Remove seed hash from local & server worlds, and expose DH's level identifier to API
This commit is contained in:
+7
@@ -39,6 +39,13 @@ public interface IDhApiLevelWrapper extends IDhApiUnsafeWrapper
|
||||
|
||||
/** @since API 4.0.0 */
|
||||
String getDimensionName();
|
||||
|
||||
/**
|
||||
* Returns a string intended to uniquely identify this level.
|
||||
*
|
||||
* @since API 4.0.0
|
||||
*/
|
||||
String getDhIdentifier();
|
||||
|
||||
EDhApiLevelType getLevelType();
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@ public class ClientApi
|
||||
{
|
||||
try
|
||||
{
|
||||
LOGGER.info("Unloading client level [" + level.getClass().getSimpleName() + "]-["+level.getLevelIdString()+"].");
|
||||
LOGGER.info("Unloading client level [" + level.getClass().getSimpleName() + "]-[" + level.getDhIdentifier() + "].");
|
||||
|
||||
if (level instanceof IServerKeyedClientLevel)
|
||||
{
|
||||
@@ -253,7 +253,7 @@ public class ClientApi
|
||||
|
||||
try
|
||||
{
|
||||
LOGGER.info("Loading client level [" + levelWrapper + "]-["+levelWrapper.getLevelIdString()+"].");
|
||||
LOGGER.info("Loading client level [" + levelWrapper + "]-[" + levelWrapper.getDhIdentifier() + "].");
|
||||
|
||||
AbstractDhWorld world = SharedApi.getAbstractDhWorld();
|
||||
if (world != null)
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@ public class ClientPluginChannelApi
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.info("Unloading non-keyed level: [" + clientLevel.getLevelIdString() + "].");
|
||||
LOGGER.info("Unloading non-keyed level: [" + clientLevel.getDhIdentifier() + "].");
|
||||
this.levelUnloadHandler.accept(clientLevel);
|
||||
}
|
||||
|
||||
|
||||
@@ -1542,11 +1542,11 @@ public class Config
|
||||
|
||||
public static ConfigEntry<String> levelKeyPrefix = new ConfigEntry.Builder<String>()
|
||||
.setServersideShortName("levelKeyPrefix")
|
||||
.set(getDefaultLevelKeyPrefix())
|
||||
.set("")
|
||||
.comment(""
|
||||
+ "Prefix of the level keys sent to the clients.\n"
|
||||
+ "If the mod is running behind a proxy, each backend should use a unique value (an empty string is allowed for one of the servers).\n"
|
||||
+ "This value may be auto-generated if the mod is installed before the first start of the server.\n"
|
||||
+ "If the mod is running behind a proxy, each backend should use a unique value.\n"
|
||||
+ "If this value is empty, level key will be based on the server's seed hash.\n"
|
||||
+ "")
|
||||
.build();
|
||||
|
||||
@@ -1633,21 +1633,6 @@ public class Config
|
||||
}
|
||||
}
|
||||
|
||||
private static String getDefaultLevelKeyPrefix()
|
||||
{
|
||||
IMinecraftSharedWrapper mcWrapper = SingletonInjector.INSTANCE.get(IMinecraftSharedWrapper.class);
|
||||
if (mcWrapper.isDedicatedServer())
|
||||
{
|
||||
return mcWrapper.isWorldNew()
|
||||
? "server" + ThreadLocalRandom.current().nextInt(1, 1000)
|
||||
: "";
|
||||
}
|
||||
else
|
||||
{
|
||||
return SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class).getUsername();
|
||||
}
|
||||
}
|
||||
|
||||
/** Guesses whether a dev environment is used based on the current folder path */
|
||||
private static boolean isRunningInDevEnvironment()
|
||||
{
|
||||
|
||||
+1
-4
@@ -20,7 +20,6 @@
|
||||
package com.seibel.distanthorizons.core.dataObjects.transformers;
|
||||
|
||||
import com.seibel.distanthorizons.api.enums.config.EDhApiBlocksToAvoid;
|
||||
import com.seibel.distanthorizons.api.enums.config.EDhApiVerticalQuality;
|
||||
import com.seibel.distanthorizons.core.config.Config;
|
||||
import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
|
||||
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
||||
@@ -40,12 +39,10 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrappe
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
import com.seibel.distanthorizons.coreapi.util.BitShiftUtil;
|
||||
import com.seibel.distanthorizons.coreapi.util.MathUtil;
|
||||
import it.unimi.dsi.fastutil.longs.LongArrayList;
|
||||
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
@@ -236,7 +233,7 @@ public class FullDataToRenderDataTransformer
|
||||
if (!brokenPos.contains(fullDataMapping.getPos()))
|
||||
{
|
||||
brokenPos.add(fullDataMapping.getPos());
|
||||
String levelId = level.getLevelWrapper().getLevelIdString();
|
||||
String levelId = level.getLevelWrapper().getDhIdentifier();
|
||||
LOGGER.warn("Unable to get data point with id ["+id+"] " +
|
||||
"(Max possible ID: ["+fullDataMapping.getMaxValidId()+"]) " +
|
||||
"for pos ["+fullDataMapping.getPos()+"] in level ["+levelId+"]. " +
|
||||
|
||||
+4
-4
@@ -130,7 +130,7 @@ public class FullDataSourceProviderV2
|
||||
|
||||
DebugRenderer.register(this, Config.Client.Advanced.Debugging.DebugWireframe.showFullDataUpdateStatus);
|
||||
|
||||
String levelId = level.getLevelWrapper().getLevelIdString();
|
||||
String levelId = level.getLevelWrapper().getDhIdentifier();
|
||||
|
||||
// start migrating any legacy data sources present in the background
|
||||
this.migrationThreadPool = ThreadUtil.makeRateLimitedThreadPool(1, MIGRATION_THREAD_NAME_PREFIX + "["+levelId+"]", Config.Common.MultiThreading.runTimeRatioForUpdatePropagatorThreads.get(), Thread.MIN_PRIORITY, (Semaphore) null);
|
||||
@@ -346,7 +346,7 @@ public class FullDataSourceProviderV2
|
||||
|
||||
private void convertLegacyDataSources()
|
||||
{
|
||||
String levelId = this.level.getLevelWrapper().getLevelIdString();
|
||||
String levelId = this.level.getLevelWrapper().getDhIdentifier();
|
||||
LOGGER.info("Attempting to migrate data sources for: ["+levelId+"]-["+this.saveDir+"]...");
|
||||
|
||||
|
||||
@@ -525,7 +525,7 @@ public class FullDataSourceProviderV2
|
||||
}
|
||||
this.migrationStartMessageQueued = true;
|
||||
|
||||
String levelId = this.level.getLevelWrapper().getLevelIdString();
|
||||
String levelId = this.level.getLevelWrapper().getDhIdentifier();
|
||||
ClientApi.INSTANCE.showChatMessageNextFrame(
|
||||
"Old Distant Horizons data is being migrated for ["+levelId+"]. \n" +
|
||||
"While migrating LODs may load slowly \n" +
|
||||
@@ -536,7 +536,7 @@ public class FullDataSourceProviderV2
|
||||
|
||||
private void showMigrationEndMessage(boolean success)
|
||||
{
|
||||
String levelId = this.level.getLevelWrapper().getLevelIdString();
|
||||
String levelId = this.level.getLevelWrapper().getDhIdentifier();
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ public class GeneratedFullDataSourceProvider extends FullDataSourceProviderV2 im
|
||||
{
|
||||
boolean oldQueueExists = this.worldGenQueueRef.compareAndSet(null, newWorldGenQueue);
|
||||
LodUtil.assertTrue(oldQueueExists, "previous world gen queue is still here!");
|
||||
LOGGER.info("Set world gen queue for level [" + this.level.getLevelWrapper().getLevelIdString() + "].");
|
||||
LOGGER.info("Set world gen queue for level [" + this.level.getLevelWrapper().getDhIdentifier() + "].");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-2
@@ -80,14 +80,14 @@ public class ClientOnlySaveStructure implements ISaveStructure
|
||||
if (newLevelWrapper instanceof IServerKeyedClientLevel)
|
||||
{
|
||||
IServerKeyedClientLevel keyedClientLevel = (IServerKeyedClientLevel) newLevelWrapper;
|
||||
LOGGER.info("Loading level [" + newLevelWrapper.getLevelIdString() + "] with key: [" + keyedClientLevel.getServerLevelKey() + "].");
|
||||
LOGGER.info("Loading level [" + newLevelWrapper.getDhIdentifier() + "] with key: [" + keyedClientLevel.getServerLevelKey() + "].");
|
||||
// This world was identified by the server directly, so we can know for sure which folder to use.
|
||||
saveFolder = getSaveFolderByLevelId(keyedClientLevel.getServerLevelKey());
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the default folder
|
||||
saveFolder = getSaveFolderByLevelId(levelWrapper.getLevelIdString());
|
||||
saveFolder = getSaveFolderByLevelId(levelWrapper.getDhIdentifier());
|
||||
}
|
||||
|
||||
// Allow API users to override the save folder
|
||||
|
||||
@@ -114,7 +114,7 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I
|
||||
continue;
|
||||
}
|
||||
|
||||
NETWORK_LOGGER.debug("["+this.serverLevelWrapper.getLevelIdString()+"] Fulfilled request group ["+entry.getKey()+"]");
|
||||
NETWORK_LOGGER.debug("[" + this.serverLevelWrapper.getDhIdentifier() + "] Fulfilled request group [" + entry.getKey() + "]");
|
||||
|
||||
// Make this group unavailable for adding into
|
||||
this.requestGroupByPos.remove(entry.getKey());
|
||||
@@ -228,7 +228,7 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I
|
||||
FullDataSourceRequestMessage requestMessage = requestGroup.requestMessages.remove(msg.futureId);
|
||||
if (requestGroup.requestMessages.isEmpty())
|
||||
{
|
||||
NETWORK_LOGGER.debug("["+this.serverLevelWrapper.getLevelIdString()+"] Cancelled request group ["+DhSectionPos.toString(requestMessage.sectionPos)+"].");
|
||||
NETWORK_LOGGER.debug("[" + this.serverLevelWrapper.getDhIdentifier() + "] Cancelled request group [" + DhSectionPos.toString(requestMessage.sectionPos) + "].");
|
||||
this.requestGroupByPos.remove(requestMessage.sectionPos);
|
||||
this.serverside.fullDataFileHandler.removeRetrievalRequestIf(pos -> pos == requestMessage.sectionPos);
|
||||
}
|
||||
@@ -307,7 +307,7 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I
|
||||
{
|
||||
DataSourceRequestGroup newGroup = new DataSourceRequestGroup();
|
||||
this.tryFulfillDataSourceRequestGroup(newGroup, pos);
|
||||
NETWORK_LOGGER.debug("["+this.serverLevelWrapper.getLevelIdString()+"] Created request group for pos ["+DhSectionPos.toString(pos)+"].");
|
||||
NETWORK_LOGGER.debug("[" + this.serverLevelWrapper.getDhIdentifier() + "] Created request group for pos [" + DhSectionPos.toString(pos) + "].");
|
||||
return newGroup;
|
||||
});
|
||||
|
||||
@@ -353,8 +353,8 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I
|
||||
new InvalidLevelException(
|
||||
"Generation not allowed. " +
|
||||
"Requested dimension: ["+((ILevelRelatedMessage) message).getLevelName()+"], " +
|
||||
"player dimension: ["+message.getSession().serverPlayer.getLevel().getLevelIdString()+"], " +
|
||||
"handler dimension: ["+this.getLevelWrapper().getLevelIdString()+"]"
|
||||
"player dimension: [" + message.getSession().serverPlayer.getLevel().getDhIdentifier() + "], " +
|
||||
"handler dimension: [" + this.getLevelWrapper().getDhIdentifier() + "]"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -294,7 +294,7 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel
|
||||
@Override
|
||||
public void addDebugMenuStringsToList(List<String> messageList)
|
||||
{
|
||||
String dimName = this.levelWrapper.getDimensionName();
|
||||
String dimName = this.levelWrapper.getDhIdentifier();
|
||||
boolean rendering = this.clientside.isRendering();
|
||||
messageList.add("["+dimName+"] rendering: "+(rendering ? "yes" : "no"));
|
||||
|
||||
@@ -338,7 +338,7 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel
|
||||
//================//
|
||||
|
||||
@Override
|
||||
public String toString() { return "DhClientLevel{"+this.getClientLevelWrapper().getLevelIdString()+"}"; }
|
||||
public String toString() { return "DhClientLevel{" + this.getClientLevelWrapper().getDhIdentifier() + "}"; }
|
||||
|
||||
@Override
|
||||
public void close()
|
||||
|
||||
@@ -132,7 +132,7 @@ public class DhClientServerLevel extends AbstractDhServerLevel implements IDhCli
|
||||
public void addDebugMenuStringsToList(List<String> messageList)
|
||||
{
|
||||
// header
|
||||
String dimName = this.serverLevelWrapper.getDimensionName();
|
||||
String dimName = this.serverLevelWrapper.getDhIdentifier();
|
||||
boolean rendering = this.clientside.isRendering();
|
||||
messageList.add("["+dimName+"] rendering: "+(rendering ? "yes" : "no"));
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ public class DhServerLevel extends AbstractDhServerLevel
|
||||
@Override
|
||||
public void addDebugMenuStringsToList(List<String> messageList)
|
||||
{
|
||||
messageList.add("[" + this.serverLevelWrapper.getDimensionName() + "]");
|
||||
messageList.add("[" + this.serverLevelWrapper.getDhIdentifier() + "]");
|
||||
super.addDebugMenuStringsToList(messageList);
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -19,7 +19,6 @@ import com.seibel.distanthorizons.core.render.renderer.DebugRenderer;
|
||||
import com.seibel.distanthorizons.core.render.renderer.IDebugRenderable;
|
||||
import com.seibel.distanthorizons.core.sql.dto.FullDataSourceV2DTO;
|
||||
import com.seibel.distanthorizons.core.util.LodUtil;
|
||||
import com.seibel.distanthorizons.core.util.TimerUtil;
|
||||
import com.seibel.distanthorizons.core.util.objects.DataCorruptedException;
|
||||
import com.seibel.distanthorizons.core.util.ratelimiting.SupplierBasedRateLimiter;
|
||||
import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil;
|
||||
@@ -291,7 +290,7 @@ public abstract class AbstractFullDataNetworkRequestQueue implements IDebugRende
|
||||
|
||||
public void addDebugMenuStringsToList(List<String> messageList)
|
||||
{
|
||||
messageList.add(this.getQueueName() + " [" + this.level.getClientLevelWrapper().getLevelIdString() + "]");
|
||||
messageList.add(this.getQueueName() + " [" + this.level.getClientLevelWrapper().getDhIdentifier() + "]");
|
||||
messageList.add("Requests: " + this.finishedRequests + " / " + (this.getWaitingTaskCount() + this.finishedRequests.get()) + " (failed: " + this.failedRequests + ", rate limit: " + this.getRequestRateLimit() + ")");
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ public interface ILevelRelatedMessage
|
||||
return this.getLevelName().equals(((IServerLevelWrapper) levelWrapper).getKeyedLevelDimensionName());
|
||||
}
|
||||
|
||||
return this.getLevelName().equals(levelWrapper.getDimensionName());
|
||||
return this.getLevelName().equals(levelWrapper.getDhIdentifier());
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -48,7 +48,7 @@ public class FullDataSourceRequestMessage extends AbstractTrackableMessage imple
|
||||
public FullDataSourceRequestMessage() {}
|
||||
public FullDataSourceRequestMessage(ILevelWrapper levelWrapper, long sectionPos, @Nullable Long clientTimestamp)
|
||||
{
|
||||
this.levelName = levelWrapper.getDimensionName();
|
||||
this.levelName = levelWrapper.getDhIdentifier();
|
||||
this.sectionPos = sectionPos;
|
||||
this.clientTimestamp = clientTimestamp;
|
||||
}
|
||||
|
||||
@@ -147,7 +147,7 @@ public class LodQuadTree extends QuadTree<LodRenderSection> implements IDebugRen
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.error("Quad Tree tick exception for level: [" + this.level.getLevelWrapper().getLevelIdString() + "], error: [" + e.getMessage() + "].", e);
|
||||
LOGGER.error("Quad Tree tick exception for level: [" + this.level.getLevelWrapper().getDhIdentifier() + "], error: [" + e.getMessage() + "].", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
@@ -123,7 +122,7 @@ public abstract class AbstractDhServerWorld<TDhServerLevel extends AbstractDhSer
|
||||
{
|
||||
for (TDhServerLevel level : this.dhLevelByLevelWrapper.values())
|
||||
{
|
||||
LOGGER.info("Unloading level [" + level.getLevelWrapper().getLevelIdString() + "].");
|
||||
LOGGER.info("Unloading level [" + level.getLevelWrapper().getDhIdentifier() + "].");
|
||||
|
||||
// level wrapper shouldn't be null, but just in case
|
||||
IServerLevelWrapper serverLevelWrapper = level.getServerLevelWrapper();
|
||||
|
||||
@@ -190,7 +190,7 @@ public class DhApiWorldProxy implements IDhApiWorldProxy
|
||||
for (IDhLevel dhLevel : world.getAllLoadedLevels())
|
||||
{
|
||||
ILevelWrapper levelWrapper = dhLevel.getLevelWrapper();
|
||||
String levelDimName = levelWrapper.getDimensionName().toLowerCase();
|
||||
String levelDimName = levelWrapper.getDhIdentifier().toLowerCase();
|
||||
if (levelDimName.contains(soughtDimName))
|
||||
{
|
||||
returnList.add(levelWrapper);
|
||||
|
||||
@@ -79,7 +79,7 @@ public class DhClientServerWorld extends AbstractDhServerWorld<DhClientServerLev
|
||||
LodUtil.assertTrue(serverLevelWrapper != null);
|
||||
if (!clientLevelWrapper.getDimensionType().equals(serverLevelWrapper.getDimensionType()))
|
||||
{
|
||||
LodUtil.assertNotReach("tryGetServerSideWrapper returned a level for a different dimension. ClientLevelWrapper dim: [" + clientLevelWrapper.getDimensionName() + "] ServerLevelWrapper dim: [" + serverLevelWrapper.getDimensionName() + "].");
|
||||
LodUtil.assertNotReach("tryGetServerSideWrapper returned a level for a different dimension. ClientLevelWrapper dim: [" + clientLevelWrapper.getDhIdentifier() + "] ServerLevelWrapper dim: [" + serverLevelWrapper.getDhIdentifier() + "].");
|
||||
}
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ public class DhClientServerWorld extends AbstractDhServerWorld<DhClientServerLev
|
||||
// close each level
|
||||
for (DhClientServerLevel level : this.dhLevels)
|
||||
{
|
||||
LOGGER.info("Unloading level [" + level.getServerLevelWrapper().getLevelIdString() + "].");
|
||||
LOGGER.info("Unloading level [" + level.getServerLevelWrapper().getDhIdentifier() + "].");
|
||||
|
||||
// level wrapper shouldn't be null, but just in case
|
||||
IServerLevelWrapper serverLevelWrapper = level.getServerLevelWrapper();
|
||||
|
||||
@@ -131,7 +131,7 @@ public class DhClientWorld extends AbstractDhWorld implements IDhClientWorld
|
||||
|
||||
for (DhClientLevel dhClientLevel : this.levels.values())
|
||||
{
|
||||
LOGGER.info("Unloading level [" + dhClientLevel.getLevelWrapper().getLevelIdString() + "].");
|
||||
LOGGER.info("Unloading level [" + dhClientLevel.getLevelWrapper().getDhIdentifier() + "].");
|
||||
|
||||
// level wrapper shouldn't be null, but just in case
|
||||
IClientLevelWrapper clientLevelWrapper = dhClientLevel.getClientLevelWrapper();
|
||||
|
||||
-3
@@ -30,9 +30,6 @@ public interface IMinecraftSharedWrapper extends IBindable
|
||||
|
||||
File getInstallationDirectory();
|
||||
|
||||
/** @return true if this is the first time loading this world */
|
||||
boolean isWorldNew();
|
||||
|
||||
int getPlayerCount();
|
||||
|
||||
}
|
||||
|
||||
+4
-6
@@ -26,7 +26,6 @@ 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 com.seibel.distanthorizons.coreapi.util.StringUtil;
|
||||
|
||||
/** Can be either a Server world or a Client world. */
|
||||
public interface ILevelWrapper extends IDhApiLevelWrapper, IBindable
|
||||
@@ -38,13 +37,12 @@ public interface ILevelWrapper extends IDhApiLevelWrapper, IBindable
|
||||
@Override
|
||||
String getDimensionName();
|
||||
|
||||
long getHashedSeed();
|
||||
int getHashedSeed();
|
||||
|
||||
/**
|
||||
* A combination of the dimension name and hashed seed
|
||||
* intended to uniquely identify this level.
|
||||
/**
|
||||
* A string intended to uniquely identify this level.
|
||||
*/
|
||||
default String getLevelIdString() { return this.getDimensionName() + "_" + this.getHashedSeed(); }
|
||||
@Override String getDhIdentifier();
|
||||
|
||||
@Override
|
||||
boolean hasCeiling();
|
||||
|
||||
+13
-9
@@ -32,7 +32,7 @@ public interface IServerLevelWrapper extends ILevelWrapper
|
||||
|
||||
default String getKeyedLevelDimensionName()
|
||||
{
|
||||
String dimensionName = this.getDimensionName();
|
||||
String dimensionName = this.getDhIdentifier();
|
||||
|
||||
if (Config.Server.sendLevelKeys.get())
|
||||
{
|
||||
@@ -43,18 +43,22 @@ public interface IServerLevelWrapper extends ILevelWrapper
|
||||
String cleanWorldFolderName = this.getMcSaveFolder().getParentFile().getName()
|
||||
.replaceAll("[^" + LevelInitMessage.PART_ALLOWED_CHARS_REGEX + " ]", "")
|
||||
.replaceAll(" ", "_");
|
||||
levelKeyPrefix += (!levelKeyPrefix.isEmpty() ? "_" : "") + cleanWorldFolderName;
|
||||
|
||||
levelKeyPrefix += (!levelKeyPrefix.isEmpty() ? "_" : "") + cleanWorldFolderName
|
||||
+ "_" + this.getHashedSeed();
|
||||
}
|
||||
|
||||
if (!levelKeyPrefix.isEmpty())
|
||||
if (levelKeyPrefix.isEmpty())
|
||||
{
|
||||
String mainPart = "@" + dimensionName;
|
||||
|
||||
return levelKeyPrefix.substring(0, Math.min(
|
||||
LevelInitMessage.MAX_LENGTH - mainPart.length(),
|
||||
levelKeyPrefix.length()
|
||||
)) + mainPart;
|
||||
levelKeyPrefix = String.valueOf(this.getHashedSeed());
|
||||
}
|
||||
|
||||
String mainPart = "@" + dimensionName;
|
||||
|
||||
return levelKeyPrefix.substring(0, Math.min(
|
||||
LevelInitMessage.MAX_LENGTH - mainPart.length(),
|
||||
levelKeyPrefix.length()
|
||||
)) + mainPart;
|
||||
}
|
||||
|
||||
return dimensionName;
|
||||
|
||||
Reference in New Issue
Block a user