From 083a03666670e0cdae00c7334da973996cd41024 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Fri, 28 Jun 2024 15:28:33 +0500 Subject: [PATCH] Use level's ResourceLocation instead of dimension type's --- .../world/IDhApiDimensionTypeWrapper.java | 4 +- .../interfaces/world/IDhApiLevelWrapper.java | 4 +- .../core/api/internal/ClientApi.java | 4 +- .../api/internal/ClientPluginChannelApi.java | 4 +- .../FullDataToRenderDataTransformer.java | 4 +- .../FullDataSourceProviderV2.java | 8 ++-- .../GeneratedFullDataSourceProvider.java | 2 +- .../structure/ClientOnlySaveStructure.java | 18 ++++---- .../SubDimensionLevelMatcher.java | 4 +- .../core/level/DhClientLevel.java | 2 +- .../core/level/DhClientServerLevel.java | 10 ++--- .../core/level/DhServerLevel.java | 8 ++-- .../core/logging/f3/F3Screen.java | 6 +-- .../client/AbstractFullDataRequestQueue.java | 2 +- .../multiplayer/server/ServerPlayerState.java | 43 ++++++++----------- .../messages/ILevelRelatedMessage.java | 6 +-- .../FullDataPartialUpdateMessage.java | 2 +- .../FullDataSourceRequestMessage.java | 2 +- .../core/render/LodQuadTree.java | 4 +- .../core/world/DhApiWorldProxy.java | 4 +- .../core/world/DhClientServerWorld.java | 6 +-- .../core/world/DhClientWorld.java | 2 +- .../core/world/DhServerWorld.java | 2 +- .../world/IDimensionTypeWrapper.java | 8 +--- .../world/ILevelWrapper.java | 3 ++ .../world/IServerLevelWrapper.java | 21 ++++++++- 26 files changed, 97 insertions(+), 86 deletions(-) diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiDimensionTypeWrapper.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiDimensionTypeWrapper.java index 226ed77a4..a91c1088f 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiDimensionTypeWrapper.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiDimensionTypeWrapper.java @@ -28,10 +28,8 @@ import com.seibel.distanthorizons.api.interfaces.IDhApiUnsafeWrapper; */ public interface IDhApiDimensionTypeWrapper extends IDhApiUnsafeWrapper { - String getDimensionName(); - boolean hasCeiling(); boolean hasSkyLight(); -} +} \ No newline at end of file diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiLevelWrapper.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiLevelWrapper.java index 2583dfb4a..b846f1880 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiLevelWrapper.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/world/IDhApiLevelWrapper.java @@ -34,6 +34,8 @@ public interface IDhApiLevelWrapper extends IDhApiUnsafeWrapper { IDhApiDimensionTypeWrapper getDimensionType(); + String getDimensionName(); + EDhApiLevelType getLevelType(); boolean hasCeiling(); @@ -49,4 +51,4 @@ public interface IDhApiLevelWrapper extends IDhApiUnsafeWrapper */ default int getMinHeight() { return 0; } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java index 80a8a6d88..43723a102 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java @@ -177,7 +177,7 @@ public class ClientApi { try { - LOGGER.info("Unloading client level [" + level + "]-["+level.getDimensionType().getDimensionName()+"]."); + LOGGER.info("Unloading client level [" + level + "]-["+level.getDimensionName()+"]."); if (level instanceof IServerKeyedClientLevel && !respawn) { @@ -206,7 +206,7 @@ public class ClientApi { try { - LOGGER.info("Loading client level [" + level + "]-["+level.getDimensionType().getDimensionName()+"]."); + LOGGER.info("Loading client level [" + level + "]-["+level.getDimensionName()+"]."); AbstractDhWorld world = SharedApi.getAbstractDhWorld(); if (world != null) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientPluginChannelApi.java b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientPluginChannelApi.java index 465372a2f..bbddfea23 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientPluginChannelApi.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientPluginChannelApi.java @@ -55,7 +55,7 @@ public class ClientPluginChannelApi private void onCurrentLevelKeyMessage(CurrentLevelKeyMessage msg) { - if (!msg.levelKey.matches("[a-zA-Z0-9_]{1,50}")) + if (!msg.levelKey.matches("^(?=.{1,50}$)([a-zA-Z0-9-_]+@)?[a-zA-Z0-9-_]+(:[a-zA-Z0-9-_]+)?$")) { throw new IllegalArgumentException("Server sent invalid level key."); } @@ -80,7 +80,7 @@ public class ClientPluginChannelApi } else { - LOGGER.info("Unloading non-keyed level: " + clientLevel.getDimensionType().getDimensionName()); + LOGGER.info("Unloading non-keyed level: " + clientLevel.getDimensionName()); this.levelUnloadHandler.accept(clientLevel); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java index 3f0e29f52..6f3117a6b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java @@ -215,7 +215,7 @@ public class FullDataToRenderDataTransformer if (!brokenPos.contains(fullDataMapping.getPos())) { brokenPos.add(fullDataMapping.getPos()); - String dimName = level.getLevelWrapper().getDimensionType().getDimensionName(); + String dimName = level.getLevelWrapper().getDimensionName(); LOGGER.warn("Unable to get data point with id ["+id+"] " + "(Max possible ID: ["+fullDataMapping.getMaxValidId()+"]) " + "for pos ["+fullDataMapping.getPos()+"] in dimension ["+dimName+"]. " + @@ -321,4 +321,4 @@ public class FullDataToRenderDataTransformer } } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataSourceProviderV2.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataSourceProviderV2.java index d7c220e1b..c5e7d68c5 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataSourceProviderV2.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataSourceProviderV2.java @@ -124,7 +124,7 @@ public class FullDataSourceProviderV2 DebugRenderer.register(this, Config.Client.Advanced.Debugging.DebugWireframe.showFullDataUpdateStatus); - String dimensionName = level.getLevelWrapper().getDimensionType().getDimensionName(); + String dimensionName = level.getLevelWrapper().getDimensionName(); // start migrating any legacy data sources present in the background this.migrationThreadPool = ThreadUtil.makeRateLimitedThreadPool(1, MIGRATION_THREAD_NAME_PREFIX + "[" + dimensionName + "]", Config.Client.Advanced.MultiThreading.runTimeRatioForUpdatePropagatorThreads.get(), Thread.MIN_PRIORITY, (Semaphore) null); @@ -376,7 +376,7 @@ public class FullDataSourceProviderV2 private void convertLegacyDataSources() { - String dimensionName = this.level.getLevelWrapper().getDimensionType().getDimensionName(); + String dimensionName = this.level.getLevelWrapper().getDimensionName(); LOGGER.info("Attempting to migrate data sources for: [" + dimensionName + "]-[" + this.saveDir + "]..."); @@ -559,7 +559,7 @@ public class FullDataSourceProviderV2 } this.migrationStartMessageQueued = true; - String dimName = this.level.getLevelWrapper().getDimensionType().getDimensionName(); + String dimName = this.level.getLevelWrapper().getDimensionName(); ClientApi.INSTANCE.showChatMessageNextFrame( "Old Distant Horizons data is being migrated for ["+dimName+"]. \n" + "While migrating LODs may load slowly \n" + @@ -570,7 +570,7 @@ public class FullDataSourceProviderV2 private void showMigrationEndMessage(boolean success) { - String dimName = this.level.getLevelWrapper().getDimensionType().getDimensionName(); + String dimName = this.level.getLevelWrapper().getDimensionName(); if (success) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java index 2e5ab7273..bf433668b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataSourceProvider.java @@ -143,7 +143,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().getDimensionType().getDimensionName() + "]."); + LOGGER.info("Set world gen queue for level [" + this.level.getLevelWrapper().getDimensionName() + "]."); } @Override diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/structure/ClientOnlySaveStructure.java b/core/src/main/java/com/seibel/distanthorizons/core/file/structure/ClientOnlySaveStructure.java index dc8cad673..84cf97b5c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/structure/ClientOnlySaveStructure.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/structure/ClientOnlySaveStructure.java @@ -84,7 +84,7 @@ public class ClientOnlySaveStructure extends AbstractSaveStructure if (newLevelWrapper instanceof IServerKeyedClientLevel) { IServerKeyedClientLevel keyedClientLevel = (IServerKeyedClientLevel) newLevelWrapper; - LOGGER.info("Loading level " + newLevelWrapper.getDimensionType().getDimensionName() + " with key: " + keyedClientLevel.getServerLevelKey()); + LOGGER.info("Loading level " + newLevelWrapper.getDimensionName() + " with key: " + keyedClientLevel.getServerLevelKey()); // This world was identified by the server directly, so we can know for sure which folder to use. return new File(getSaveStructureFolderPath() + File.separatorChar + keyedClientLevel.getServerLevelKey()); } @@ -98,9 +98,9 @@ public class ClientOnlySaveStructure extends AbstractSaveStructure // create the matcher if one doesn't exist if (this.subDimMatcher == null || !this.subDimMatcher.isFindingLevel(newClientLevelWrapper)) { - LOGGER.info("Loading level " + newClientLevelWrapper.getDimensionType().getDimensionName()); + LOGGER.info("Loading level " + newClientLevelWrapper.getDimensionName()); - List levelFolders = this.getDhDataFoldersForDimension(newClientLevelWrapper.getDimensionType()); + List levelFolders = this.getDhDataFoldersForDimension(newClientLevelWrapper); this.subDimMatcher = new SubDimensionLevelMatcher(newClientLevelWrapper, this.folder, levelFolders); } @@ -129,7 +129,7 @@ public class ClientOnlySaveStructure extends AbstractSaveStructure private File getLevelFolderWithoutSimilarityMatching(ILevelWrapper level) { - List folders = this.getDhDataFoldersForDimension(level.getDimensionType()); + List folders = this.getDhDataFoldersForDimension(level); if (!folders.isEmpty() && folders.get(0) != null) { // use the first existing sub-dimension @@ -140,12 +140,12 @@ public class ClientOnlySaveStructure extends AbstractSaveStructure else { // no valid sub dimension was found, create a new one - LOGGER.info("Default Sub Dimension not found. Creating: [" + level.getDimensionType().getDimensionName() + "]"); - return new File(this.folder, level.getDimensionType().getDimensionName()); + LOGGER.info("Default Sub Dimension not found. Creating: [" + level.getDimensionName() + "]"); + return new File(this.folder, level.getDimensionName()); } } - public List getDhDataFoldersForDimension(IDimensionTypeWrapper dimensionType) + public List getDhDataFoldersForDimension(ILevelWrapper level) { File[] folders = this.folder.listFiles(); if (folders == null) @@ -154,7 +154,7 @@ public class ClientOnlySaveStructure extends AbstractSaveStructure } // filter by dimension name - String expectedDimName = dimensionType.getDimensionName(); + String expectedDimName = level.getDimensionName(); ArrayList possibleDimFolders = new ArrayList<>(); for (File dimFolder : folders) { @@ -297,4 +297,4 @@ public class ClientOnlySaveStructure extends AbstractSaveStructure @Override public String toString() { return "[" + this.getClass().getSimpleName() + "@" + this.folder.getName() + "]"; } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java b/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java index bb76066d0..6263bc23c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java @@ -200,7 +200,7 @@ public class SubDimensionLevelMatcher implements AutoCloseable //================================// // log the start of this attempt - LOGGER.info("Attempting to determine sub-dimension for [" + MC_CLIENT.getWrappedClientLevel().getDimensionType().getDimensionName() + "]"); + LOGGER.info("Attempting to determine sub-dimension for [" + MC_CLIENT.getWrappedClientLevel().getDimensionName() + "]"); LOGGER.info("Player block pos in dimension: [" + this.playerData.playerBlockPos.x + "," + this.playerData.playerBlockPos.y + "," + this.playerData.playerBlockPos.z + "]"); LOGGER.info("Potential Sub Dimension folders: [" + this.potentialLevelFolders.size() + "]"); @@ -379,7 +379,7 @@ public class SubDimensionLevelMatcher implements AutoCloseable } - private File CreateSubDimFolder(String subDimId) { return new File(this.levelsFolder.getPath() + File.separatorChar + this.currentClientLevel.getDimensionType().getDimensionName(), subDimId); } + private File CreateSubDimFolder(String subDimId) { return new File(this.levelsFolder.getPath() + File.separatorChar + this.currentClientLevel.getDimensionName(), subDimId); } @Override public void close() { this.matcherThread.shutdownNow(); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java index 3c95cfee4..7656bd83c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java @@ -252,7 +252,7 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel @Override public void addDebugMenuStringsToList(List messageList) { - String dimName = this.levelWrapper.getDimensionType().getDimensionName(); + String dimName = this.levelWrapper.getDimensionName(); boolean rendering = this.clientside.isRendering(); messageList.add("["+dimName+"] rendering: "+(rendering ? "yes" : "no")); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java index fd946f84f..42698d6d7 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java @@ -165,13 +165,13 @@ public class DhClientServerLevel extends AbstractDhLevel implements IDhClientLev @Override public void clearRenderCache() { - clientside.clearRenderCache(); + this.clientside.clearRenderCache(); } @Override - public IServerLevelWrapper getServerLevelWrapper() { return serverLevelWrapper; } + public IServerLevelWrapper getServerLevelWrapper() { return this.serverLevelWrapper; } @Override - public ILevelWrapper getLevelWrapper() { return getServerLevelWrapper(); } + public ILevelWrapper getLevelWrapper() { return this.getServerLevelWrapper(); } @Override public FullDataSourceProviderV2 getFullDataProvider() { return this.serverside.fullDataFileHandler; } @@ -179,7 +179,7 @@ public class DhClientServerLevel extends AbstractDhLevel implements IDhClientLev @Override public AbstractSaveStructure getSaveStructure() { - return serverside.saveStructure; + return this.serverside.saveStructure; } @Override @@ -201,7 +201,7 @@ public class DhClientServerLevel extends AbstractDhLevel implements IDhClientLev public void addDebugMenuStringsToList(List messageList) { // header - String dimName = this.serverLevelWrapper.getDimensionType().getDimensionName(); + String dimName = this.serverLevelWrapper.getDimensionName(); boolean rendering = this.clientside.isRendering(); messageList.add("["+dimName+"] rendering: "+(rendering ? "yes" : "no")); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java index 6dcf896ce..defa45d1c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java @@ -184,7 +184,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel LodUtil.assertTrue(msg instanceof ILevelRelatedMessage, MessageFormat.format("Received message does not implement {0}: {1}", ILevelRelatedMessage.class.getSimpleName(), msg.getClass().getSimpleName())); // Handle only in requested dimension - if (!((ILevelRelatedMessage) msg).isSameLevelAs(this.getLevelWrapper())) + if (!((ILevelRelatedMessage) msg).isSameLevelAs(this.getServerLevelWrapper())) { return; } @@ -199,8 +199,8 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel ((TrackableMessage) msg).sendResponse(new InvalidLevelException(MessageFormat.format( "Generation not allowed. Requested dimension: {0}, player dimension: {1}, handler dimension: {2}", ((ILevelRelatedMessage) msg).getLevelName(), - msg.session.serverPlayer.getLevel().getDimensionType().getDimensionName(), - this.getLevelWrapper().getDimensionType().getDimensionName() + msg.session.serverPlayer.getLevel().getDimensionName(), + this.getLevelWrapper().getDimensionName() ))); } @@ -392,7 +392,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel @Override public void addDebugMenuStringsToList(List messageList) { - String dimName = this.serverLevelWrapper.getDimensionType().getDimensionName(); + String dimName = this.serverLevelWrapper.getDimensionName(); messageList.add("["+dimName+"]"); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java b/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java index c317e3def..eacad1045 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java @@ -78,9 +78,9 @@ public class F3Screen Parent Update #: 12

Client_Server World with 3 levels
- [overworld] rendering: Active
- [the_end] rendering: Inactive
- [the_nether] rendering: Inactive

+ [minecraft:overworld] rendering: Active
+ [minecraft:the_end] rendering: Inactive
+ [minecraft:the_nether] rendering: Inactive

VBO Render Count: 199/374
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataRequestQueue.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataRequestQueue.java index 725cf2ce0..bae5b6429 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataRequestQueue.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataRequestQueue.java @@ -241,7 +241,7 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable, return; } - messageList.add(this.getQueueName() + " [" + this.level.getClientLevelWrapper().getDimensionType().getDimensionName() + "]"); + messageList.add(this.getQueueName() + " [" + this.level.getClientLevelWrapper().getDimensionName() + "]"); messageList.add("Requests: " + this.finishedRequests + " / " + (this.getWaitingTaskCount() + this.finishedRequests.get()) + " (failed: " + this.failedRequests + ", rate limit: " + this.getRequestConcurrencyLimit() + ")"); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java index 4fc4204ee..f9f0558de 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java @@ -1,5 +1,6 @@ package com.seibel.distanthorizons.core.multiplayer.server; +import com.seibel.distanthorizons.core.config.listeners.ConfigChangeListener; import com.seibel.distanthorizons.core.level.DhServerLevel; import com.seibel.distanthorizons.core.multiplayer.config.MultiplayerConfig; import com.seibel.distanthorizons.core.multiplayer.config.MultiplayerConfigChangeListener; @@ -25,8 +26,10 @@ public class ServerPlayerState @NotNull public ConstrainedMultiplayerConfig config = new ConstrainedMultiplayerConfig(); private final MultiplayerConfigChangeListener configChangeListener = new MultiplayerConfigChangeListener(this::onConfigChanged); + private String lastLevelKey = ""; - + private final ConfigChangeListener levelKeyPrefixChangeListener = new ConfigChangeListener<>(ServerNetworking.levelKeyPrefix, this::sendLevelKey); + private final ConcurrentHashMap rateLimiterSets = new ConcurrentHashMap<>(); public RateLimiterSet getRateLimiterSet(DhServerLevel level) { @@ -46,29 +49,7 @@ public class ServerPlayerState this.session.registerHandler(RemotePlayerConfigMessage.class, remotePlayerConfigMessage -> { this.config.clientConfig = (MultiplayerConfig) remotePlayerConfigMessage.payload; - - if (ServerNetworking.sendLevelKeys.get()) - { - String levelKeyPrefix = ServerNetworking.levelKeyPrefix.get(); - String dimensionName = serverPlayer.getLevel().getDimensionType().getDimensionName(); - - String levelKey; - if (!levelKeyPrefix.isEmpty()) - { - levelKey = levelKeyPrefix + "_" + dimensionName; - } - else - { - levelKey = dimensionName; - } - - if (!levelKey.equals(this.lastLevelKey)) - { - this.lastLevelKey = levelKey; - this.session.sendMessage(new CurrentLevelKeyMessage(levelKey)); - } - } - + this.sendLevelKey(null); this.session.sendMessage(new RemotePlayerConfigMessage(this.config)); }); @@ -78,7 +59,18 @@ public class ServerPlayerState } - + private void sendLevelKey(String ignored) + { + if (ServerNetworking.sendLevelKeys.get()) + { + String levelKey = this.serverPlayer().getLevel().getKeyedLevelDimensionName(); + if (!levelKey.equals(this.lastLevelKey)) + { + this.lastLevelKey = levelKey; + this.session.sendMessage(new CurrentLevelKeyMessage(levelKey)); + } + } + } private void onConfigChanged() { @@ -87,6 +79,7 @@ public class ServerPlayerState public void close() { + this.levelKeyPrefixChangeListener.close(); this.configChangeListener.close(); this.session.close(); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ILevelRelatedMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ILevelRelatedMessage.java index 3bbb5826d..c952d1ca1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ILevelRelatedMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ILevelRelatedMessage.java @@ -1,6 +1,6 @@ package com.seibel.distanthorizons.core.network.messages; -import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper; public interface ILevelRelatedMessage { @@ -10,9 +10,9 @@ public interface ILevelRelatedMessage * Checks whether the message's level matches the given level. */ @SuppressWarnings("BooleanMethodIsAlwaysInverted") - default boolean isSameLevelAs(ILevelWrapper levelWrapper) + default boolean isSameLevelAs(IServerLevelWrapper levelWrapper) { - return this.getLevelName().equals(levelWrapper.getDimensionType().getDimensionName()); + return this.getLevelName().equals(levelWrapper.getKeyedLevelDimensionName()); } } \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataPartialUpdateMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataPartialUpdateMessage.java index be01ba975..05b0a4a39 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataPartialUpdateMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataPartialUpdateMessage.java @@ -44,7 +44,7 @@ public class FullDataPartialUpdateMessage extends NetworkMessage implements ILev public FullDataPartialUpdateMessage() { } public FullDataPartialUpdateMessage(ILevelWrapper level, FullDataSourceV2 fullDataSource) { - this.levelName = level.getDimensionType().getDimensionName(); + this.levelName = level.getDimensionName(); try { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataSourceRequestMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataSourceRequestMessage.java index 09f72c190..0803cf7d4 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataSourceRequestMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/FullDataSourceRequestMessage.java @@ -43,7 +43,7 @@ public class FullDataSourceRequestMessage extends TrackableMessage implements IL public FullDataSourceRequestMessage() {} public FullDataSourceRequestMessage(ILevelWrapper levelWrapper, long sectionPos, @Nullable Long clientTimestamp) { - this.levelName = levelWrapper.getDimensionType().getDimensionName(); + this.levelName = levelWrapper.getDimensionName(); this.sectionPos = sectionPos; this.clientTimestamp = clientTimestamp; } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java b/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java index 49c349a42..3c819d544 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java @@ -150,7 +150,7 @@ public class LodQuadTree extends QuadTree implements IDebugRen } catch (Exception e) { - LOGGER.error("Quad Tree tick exception for dimension: " + this.level.getClientLevelWrapper().getDimensionType().getDimensionName() + ", exception: " + e.getMessage(), e); + LOGGER.error("Quad Tree tick exception for dimension: " + this.level.getClientLevelWrapper().getDimensionName() + ", exception: " + e.getMessage(), e); } finally { @@ -690,4 +690,4 @@ public class LodQuadTree extends QuadTree implements IDebugRen LOGGER.info("Finished shutting down " + LodQuadTree.class.getSimpleName()); } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhApiWorldProxy.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhApiWorldProxy.java index d7855be30..88893d9ac 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhApiWorldProxy.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhApiWorldProxy.java @@ -130,7 +130,7 @@ public class DhApiWorldProxy implements IDhApiWorldProxy for (IDhLevel dhLevel : world.getAllLoadedLevels()) { ILevelWrapper levelWrapper = dhLevel.getLevelWrapper(); - String levelDimName = levelWrapper.getDimensionType().getDimensionName().toLowerCase(); + String levelDimName = levelWrapper.getDimensionName().toLowerCase(); if (levelDimName.contains(soughtDimName)) { returnList.add(levelWrapper); @@ -140,4 +140,4 @@ public class DhApiWorldProxy implements IDhApiWorldProxy return returnList; } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java index 7b39f48e7..1471cfabb 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java @@ -87,7 +87,7 @@ public class DhClientServerWorld extends AbstractDhWorld implements IDhClientWor LodUtil.assertTrue(serverLevelWrapper != null); if (!clientLevelWrapper.getDimensionType().equals(serverLevelWrapper.getDimensionType())) { - LodUtil.assertNotReach("tryGetServerSideWrapper returned a level for a different dimension. ClientLevelWrapper dim: " + clientLevelWrapper.getDimensionType().getDimensionName() + " ServerLevelWrapper dim: " + serverLevelWrapper.getDimensionType().getDimensionName()); + LodUtil.assertNotReach("tryGetServerSideWrapper returned a level for a different dimension. ClientLevelWrapper dim: " + clientLevelWrapper.getDimensionName() + " ServerLevelWrapper dim: " + serverLevelWrapper.getDimensionName()); } @@ -167,7 +167,7 @@ public class DhClientServerWorld extends AbstractDhWorld implements IDhClientWor // close each level for (DhClientServerLevel level : levelsToClose) { - LOGGER.info("Unloading level " + level.getServerLevelWrapper().getDimensionType().getDimensionName()); + LOGGER.info("Unloading level " + level.getServerLevelWrapper().getDimensionName()); // level wrapper shouldn't be null, but just in case IServerLevelWrapper serverLevelWrapper = level.getServerLevelWrapper(); @@ -184,4 +184,4 @@ public class DhClientServerWorld extends AbstractDhWorld implements IDhClientWor LOGGER.info("Closed DhWorld of type " + this.environment); } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java index 0577d2b05..fe293a903 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java @@ -145,7 +145,7 @@ public class DhClientWorld extends AbstractDhWorld implements IDhClientWorld for (DhClientLevel dhClientLevel : this.levels.values()) { - LOGGER.info("Unloading level " + dhClientLevel.getLevelWrapper().getDimensionType().getDimensionName()); + LOGGER.info("Unloading level " + dhClientLevel.getLevelWrapper().getDimensionName()); // level wrapper shouldn't be null, but just in case IClientLevelWrapper clientLevelWrapper = dhClientLevel.getClientLevelWrapper(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhServerWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhServerWorld.java index d8bafb0db..92ca865f6 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhServerWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhServerWorld.java @@ -159,7 +159,7 @@ public class DhServerWorld extends AbstractDhWorld implements IDhServerWorld { for (DhServerLevel level : this.levels.values()) { - LOGGER.info("Unloading level " + level.getLevelWrapper().getDimensionType().getDimensionName()); + LOGGER.info("Unloading level " + level.getLevelWrapper().getDimensionName()); // level wrapper shouldn't be null, but just in case IServerLevelWrapper serverLevelWrapper = level.getServerLevelWrapper(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IDimensionTypeWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IDimensionTypeWrapper.java index c1d3b79f0..c1d7f67c9 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IDimensionTypeWrapper.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/world/IDimensionTypeWrapper.java @@ -24,18 +24,14 @@ import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindab public interface IDimensionTypeWrapper extends IDhApiDimensionTypeWrapper, IBindable { - @Override - String getDimensionName(); - @Override boolean hasCeiling(); @Override boolean hasSkyLight(); - // there's definitely a better way of doing this, but it should work well enough for now - default boolean isTheEnd() { return this.getDimensionName().equalsIgnoreCase("the_end"); } + boolean isTheEnd(); double getTeleportationScale(IDimensionTypeWrapper to); -} +} \ No newline at end of file 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 bc00c2562..d9cea7b95 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 @@ -37,6 +37,9 @@ public interface ILevelWrapper extends IDhApiLevelWrapper, IBindable @Override IDimensionTypeWrapper getDimensionType(); + @Override + String getDimensionName(); + @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 b6740bb13..b4ae28dc8 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 @@ -22,11 +22,30 @@ package com.seibel.distanthorizons.core.wrapperInterfaces.world; import org.jetbrains.annotations.Nullable; import java.io.File; +import static com.seibel.distanthorizons.core.config.Config.Client.Advanced.Multiplayer.ServerNetworking; + public interface IServerLevelWrapper extends ILevelWrapper { @Nullable IClientLevelWrapper tryGetClientLevelWrapper(); File getSaveFolder(); + + default String getKeyedLevelDimensionName() + { + String dimensionName = this.getDimensionName(); + + if (ServerNetworking.sendLevelKeys.get()) + { + String levelKeyPrefix = ServerNetworking.levelKeyPrefix.get(); + + if (!levelKeyPrefix.isEmpty()) + { + return levelKeyPrefix + "@" + dimensionName; + } + } + + return dimensionName; + } -} +} \ No newline at end of file