From 5448b8890d1d079f56867ec899b392bf4e9866ca Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:23:35 +0500 Subject: [PATCH] Replace truncating the hashed seed with encoding it into base32 --- .../wrapperInterfaces/world/ILevelWrapper.java | 16 ++++++++++++++-- .../world/IServerLevelWrapper.java | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/ILevelWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/ILevelWrapper.java index d10b8e71b..652d7be55 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/ILevelWrapper.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/ILevelWrapper.java @@ -19,6 +19,7 @@ package com.seibel.distanthorizons.core.wrapperInterfaces.world; +import com.google.common.primitives.Longs; import com.seibel.distanthorizons.api.interfaces.world.IDhApiLevelWrapper; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos; @@ -26,10 +27,12 @@ import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable; +import org.apache.commons.codec.binary.Base32; /** Can be either a Server world or a Client world. */ public interface ILevelWrapper extends IDhApiLevelWrapper, IBindable { + Base32 base32 = new Base32(true); @Override IDimensionTypeWrapper getDimensionType(); @@ -38,12 +41,21 @@ public interface ILevelWrapper extends IDhApiLevelWrapper, IBindable String getDimensionName(); long getHashedSeed(); + /** + * Returns the result of {@link #getHashedSeed()}, encoded into a short string.
+ * Prefer using this method over stringifying the number directly. + */ + default String getHashedSeedEncoded() + { + String encoded = base32.encodeAsString(Longs.toByteArray(this.getHashedSeed())); + return encoded.substring(0, 13).toLowerCase(); // Remaining 3 chars are padding + } /** * A string intended to uniquely identify this level. */ - @Override - default String getDhIdentifier() { return this.getDimensionName() + "_" + this.getHashedSeed(); } + @Override + String getDhIdentifier(); @Override boolean hasCeiling(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IServerLevelWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IServerLevelWrapper.java index c4e419d12..cfc6096c3 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IServerLevelWrapper.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IServerLevelWrapper.java @@ -45,12 +45,12 @@ public interface IServerLevelWrapper extends ILevelWrapper .replaceAll(" ", "_"); levelKeyPrefix += (!levelKeyPrefix.isEmpty() ? "_" : "") + cleanWorldFolderName - + "_" + this.getHashedSeed(); + + "_" + this.getHashedSeedEncoded(); } if (levelKeyPrefix.isEmpty()) { - levelKeyPrefix = String.valueOf(this.getHashedSeed()); + levelKeyPrefix = this.getHashedSeedEncoded(); } String mainPart = "@" + dimensionName;