Reset state of level detection on world exit

This commit is contained in:
s809
2024-07-07 01:49:44 +05:00
parent 7e48c49e33
commit 171e6b9bcd
2 changed files with 18 additions and 3 deletions
@@ -25,6 +25,7 @@ import com.seibel.distanthorizons.api.methods.events.abstractEvents.*;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.network.messages.NetworkMessage;
import com.seibel.distanthorizons.core.network.session.Session;
import com.seibel.distanthorizons.coreapi.ModInfo;
import com.seibel.distanthorizons.api.enums.rendering.EDhApiDebugRendering;
import com.seibel.distanthorizons.api.enums.rendering.EDhApiRendererMode;
@@ -157,6 +158,8 @@ public class ClientApi
SharedApi.setDhWorld(null);
}
this.pluginChannelApi.reset();
// remove any waiting items
this.waitingChunkByClientLevelAndPos.clear();
this.waitingClientLevels.clear();
@@ -332,7 +335,11 @@ public class ClientApi
public void pluginMessageReceived(@NotNull NetworkMessage message)
{
this.pluginChannelApi.session.tryHandleMessage(message);
Session session = this.pluginChannelApi.session;
if (session != null)
{
session.tryHandleMessage(message);
}
}
@@ -12,6 +12,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftCli
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import org.apache.logging.log4j.LogManager;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import java.util.function.Consumer;
@@ -29,6 +30,7 @@ public class ClientPluginChannelApi
private final Consumer<IClientLevelWrapper> levelUnloadHandler;
private final Consumer<IServerKeyedClientLevel> multiverseLevelLoadHandler;
@Nullable
public Session session;
@@ -49,8 +51,8 @@ public class ClientPluginChannelApi
{
Objects.requireNonNull(session);
this.session = session;
this.session.registerHandler(CurrentLevelKeyMessage.class, this::onCurrentLevelKeyMessage);
this.session.registerHandler(CloseEvent.class, this::onClose);
session.registerHandler(CurrentLevelKeyMessage.class, this::onCurrentLevelKeyMessage);
session.registerHandler(CloseEvent.class, this::onClose);
}
private void onCurrentLevelKeyMessage(CurrentLevelKeyMessage msg)
@@ -100,6 +102,12 @@ public class ClientPluginChannelApi
private void onClose(CloseEvent event)
{
this.reset();
}
public void reset()
{
this.session = null;
KEYED_CLIENT_LEVEL_MANAGER.disable();
}