From 8f619f3fa13c8bf0dd173c49fc9914faa6ceb923 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 27 Mar 2021 21:28:03 -0500 Subject: [PATCH] Closes issue #12 (improve world change detection) --- .../com/backsun/lod/builders/LodBuilder.java | 9 ++++---- .../com/backsun/lod/proxy/ClientProxy.java | 23 +++++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/backsun/lod/builders/LodBuilder.java b/src/main/java/com/backsun/lod/builders/LodBuilder.java index 6e6f470fa..78e084500 100644 --- a/src/main/java/com/backsun/lod/builders/LodBuilder.java +++ b/src/main/java/com/backsun/lod/builders/LodBuilder.java @@ -28,7 +28,7 @@ import net.minecraft.world.server.ServerWorld; * (specifically: Lod World, Dimension, Region, and Chunk objects) * * @author James Seibel - * @version 3-24-2021 + * @version 3-27-2021 */ public class LodBuilder { @@ -69,9 +69,10 @@ public class LodBuilder if (lodWorld != null) // is this chunk from the same world as the lodWorld? if (!lodWorld.worldName.equals(LodDimensionFileHandler.getCurrentWorldID())) - // we are not in the same world anymore, - // remove the old world so it can be recreated later - lodWorld = null; + // we are not in the same world anymore + // don't add this LOD + return lodWorld; + // don't try to create an LOD object // if for some reason we aren't diff --git a/src/main/java/com/backsun/lod/proxy/ClientProxy.java b/src/main/java/com/backsun/lod/proxy/ClientProxy.java index 766f9110d..414d2f775 100644 --- a/src/main/java/com/backsun/lod/proxy/ClientProxy.java +++ b/src/main/java/com/backsun/lod/proxy/ClientProxy.java @@ -3,7 +3,6 @@ package com.backsun.lod.proxy; import org.lwjgl.opengl.GL11; import com.backsun.lod.builders.LodBuilder; -import com.backsun.lod.handlers.LodDimensionFileHandler; import com.backsun.lod.objects.LodChunk; import com.backsun.lod.objects.LodDimension; import com.backsun.lod.objects.LodRegion; @@ -16,6 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; //TODO Find a way to replace getIntegratedServer so this mod could be used on non-local worlds. @@ -26,7 +26,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; * and is the starting point for most of this program. * * @author James_Seibel - * @version 03-24-2021 + * @version 03-27-2021 */ public class ClientProxy { @@ -79,11 +79,6 @@ public class ClientProxy return; } - // are we still in the same world? - if (!lodWorld.worldName.equals(LodDimensionFileHandler.getCurrentWorldID())) - // no, don't render the wrong world - return; - if (mc == null || mc.player == null || lodWorld == null) return; @@ -113,9 +108,9 @@ public class ClientProxy - //=====================// - // lod creation events // - //=====================// + //==============// + // forge events // + //==============// // TODO add on chunk changed event // issue #10 @@ -128,4 +123,12 @@ public class ClientProxy } + @SubscribeEvent + public void worldUnloadEvent(WorldEvent.Unload event) + { + // clear the old LodWorld to make sure + // the correct world is used when changing worlds + lodWorld = null; + } + }