diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java index d4fcd8d80..c50e25696 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkPosWrapper.java @@ -2,6 +2,7 @@ package com.seibel.lod.common.wrappers.chunk; import java.util.Objects; +import com.seibel.lod.core.objects.lod.RegionPos; import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper; import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; import com.seibel.lod.common.wrappers.block.BlockPosWrapper; @@ -96,7 +97,16 @@ public class ChunkPosWrapper extends AbstractChunkPosWrapper @Override public boolean equals(Object o) { - return chunkPos.equals(o); + // If the object is compared with itself then return true + if (o == this) { + return true; + } + // Check if o is an instance of RegionPos or not + if (!(o instanceof ChunkPosWrapper)) { + return false; + } + ChunkPosWrapper c = (ChunkPosWrapper) o; + return c.chunkPos.equals(chunkPos); } @Override diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java index 8da550a70..3a010e936 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -158,7 +158,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper public HashSet getVanillaRenderedChunks() { LevelRenderer levelRenderer = MC.levelRenderer; LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks; - ClientApi.LOGGER.info("getVanillaRenderedChunks: "+chunks.size()); + //ClientApi.LOGGER.info("getVanillaRenderedChunks: "+chunks.size()); return (chunks.stream().map((chunk) -> { AABB chunkBoundingBox = chunk.chunk.bb; return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16), @@ -169,7 +169,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper public HashSet getSodiumRenderedChunks() { LevelRenderer levelRenderer = MC.levelRenderer; LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks; - ClientApi.LOGGER.info("gettSodiumRenderedChunks: "+chunks.size()); + //ClientApi.LOGGER.info("gettSodiumRenderedChunks: "+chunks.size()); return (chunks.stream().map((chunk) -> { AABB chunkBoundingBox = chunk.chunk.bb; return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16), diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java index ff3f96ac2..a0a7bdc17 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java @@ -25,9 +25,12 @@ import java.util.concurrent.ConcurrentMap; import com.seibel.lod.core.enums.WorldType; import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper; +import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; import com.seibel.lod.common.wrappers.block.BlockPosWrapper; +import com.seibel.lod.common.wrappers.chunk.ChunkWrapper; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; @@ -35,6 +38,9 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.ChunkStatus; + import org.jetbrains.annotations.Nullable; /** @@ -170,6 +176,13 @@ public class WorldWrapper implements IWorldWrapper // TODO this is depreciated, what should we use instead? return world.getSeaLevel(); } + + @Override + public IChunkWrapper tryGetChunk(AbstractChunkPosWrapper pos) { + ChunkAccess chunk = world.getChunk(pos.getX(), pos.getZ(), ChunkStatus.EMPTY, false); + if (chunk == null) return null; + return new ChunkWrapper(chunk, world); + } } diff --git a/core b/core index e5f5d33db..943a2d5ca 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit e5f5d33db95e96b5e73011ee576ea2c21dc27df8 +Subproject commit 943a2d5cada3235e93ea73eacce412cc887136ed diff --git a/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java b/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java index 5ed0d2f8d..020f3954b 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/ClientProxy.java @@ -41,6 +41,7 @@ import net.fabricmc.fabric.mixin.event.lifecycle.client.ClientChunkManagerMixin; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientChunkCache; +import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.core.BlockPos; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.Level; @@ -59,6 +60,7 @@ import org.lwjgl.glfw.GLFW; public class ClientProxy { private final EventApi eventApi = EventApi.INSTANCE; + private final ClientApi clientApi = ClientApi.INSTANCE; /** @@ -75,8 +77,6 @@ public class ClientProxy /* World Events */ //ServerChunkEvents.CHUNK_LOAD.register(this::chunkLoadEvent); ClientChunkEvents.CHUNK_LOAD.register(this::chunkLoadEvent); - - /* World Events */ ServerWorldEvents.LOAD.register((server, level) -> this.worldLoadEvent(level)); @@ -101,7 +101,8 @@ public class ClientProxy public void chunkLoadEvent(LevelAccessor level, LevelChunk chunk) { - eventApi.chunkLoadEvent(new ChunkWrapper(chunk, level), DimensionTypeWrapper.getDimensionTypeWrapper(level.dimensionType())); + clientApi.clientChunkLoadEvent(new ChunkWrapper(chunk, level), + WorldWrapper.getWorldWrapper(level)); } public void worldSaveEvent() diff --git a/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java b/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java index 2d0a5c5c6..de0d79af7 100644 --- a/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/lod/forge/ForgeClientProxy.java @@ -19,6 +19,7 @@ package com.seibel.lod.forge; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.api.EventApi; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.lod.common.wrappers.chunk.ChunkWrapper; @@ -42,6 +43,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class ForgeClientProxy { private final EventApi eventApi = EventApi.INSTANCE; + private final ClientApi clientApi = ClientApi.INSTANCE; @@ -54,7 +56,7 @@ public class ForgeClientProxy @SubscribeEvent public void chunkLoadEvent(ChunkEvent.Load event) { - eventApi.chunkLoadEvent(new ChunkWrapper(event.getChunk(), event.getWorld()), DimensionTypeWrapper.getDimensionTypeWrapper(event.getWorld().dimensionType())); + clientApi.clientChunkLoadEvent(new ChunkWrapper(event.getChunk(), event.getWorld()), WorldWrapper.getWorldWrapper(event.getWorld())); } @SubscribeEvent