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 538672873..fe9ad3d87 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 @@ -86,7 +86,7 @@ public class ClientApi private long lastFlushNanoTime = 0; - private ClientPluginChannelApi pluginChannelApi = new ClientPluginChannelApi(this::clientLevelLoadEvent, this::clientLevelUnloadEvent); + private final ClientPluginChannelApi pluginChannelApi = new ClientPluginChannelApi(this::clientLevelLoadEvent, this::clientLevelUnloadEvent); /** Holds any levels that were loaded before the {@link ClientApi#onClientOnlyConnected} was fired. */ @@ -155,9 +155,6 @@ public class ClientApi SharedApi.setDhWorld(null); } - // clear the previous server's information - this.pluginChannelApi = new ClientPluginChannelApi(this::clientLevelLoadEvent, this::clientLevelUnloadEvent); - // remove any waiting items this.waitingChunkByClientLevelAndPos.clear(); this.waitingClientLevels.clear(); 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 9f2aa9c4e..d2e375afd 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 @@ -16,7 +16,10 @@ import org.apache.logging.log4j.LogManager; import java.util.function.Consumer; -/** This class is used to manage the plugin channel session and Multiverse level keys. */ +/** + * This class is used to manage the level keys. + * Its purpose is to separate MC's and plugin channel's event handling. + */ public class ClientPluginChannelApi { private static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(), 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 66cc77559..abad2448e 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 @@ -60,6 +60,8 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable, private final SupplierBasedRateLimiter rateLimiter = new SupplierBasedRateLimiter<>(this::getRequestConcurrencyLimit); + private final ScheduledExecutorService taskFinishScheduler = Executors.newScheduledThreadPool(1); + @SuppressWarnings("BooleanMethodIsAlwaysInverted") protected boolean showInDebug() { return true; } @@ -235,17 +237,9 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable, // Hack to work around a race condition // If you finish the request too quickly, the section will never render - new Thread(() -> { - try - { - Thread.sleep(5000); + this.taskFinishScheduler.schedule(() -> { entry.future.complete(true); - } - catch (InterruptedException e) - { - throw new RuntimeException(e); - } - }).start(); + }, 10, TimeUnit.SECONDS); return null; }); }