From 595b8ecbb5c89852b9ff3d434c07248037317a20 Mon Sep 17 00:00:00 2001 From: tom lee Date: Fri, 11 Feb 2022 13:33:11 +0800 Subject: [PATCH] Fixed hash bug for ChunkPos & incorrect shink causing overdraw issue --- .../java/com/seibel/lod/core/util/LodUtil.java | 15 ++++----------- .../chunk/AbstractChunkPosWrapper.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/util/LodUtil.java b/src/main/java/com/seibel/lod/core/util/LodUtil.java index ef856248e..abeec20f9 100644 --- a/src/main/java/com/seibel/lod/core/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/core/util/LodUtil.java @@ -375,17 +375,10 @@ public class LodUtil // if the skipRadius is being used if (skipRadius != 0) { - for (int x = centerChunk.getX() - chunkRenderDist; x < centerChunk.getX() + chunkRenderDist; x++) - { - for (int z = centerChunk.getZ() - chunkRenderDist; z < centerChunk.getZ() + chunkRenderDist; z++) - { - if (x <= centerChunk.getX() - skipRadius || x >= centerChunk.getX() + skipRadius - || z <= centerChunk.getZ() - skipRadius || z >= centerChunk.getZ() + skipRadius) - { - posToSkip.remove(FACTORY.createChunkPos(x, z)); - } - } - } + posToSkip.removeIf((pos) -> { + return (pos.getX() < centerChunk.getX() - skipRadius || pos.getX() > centerChunk.getX() + skipRadius + || pos.getZ() < centerChunk.getZ() - skipRadius || pos.getZ() > centerChunk.getZ() + skipRadius); + }); } return posToSkip; } diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/AbstractChunkPosWrapper.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/AbstractChunkPosWrapper.java index c24d3f590..997f71d71 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/AbstractChunkPosWrapper.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/AbstractChunkPosWrapper.java @@ -50,4 +50,15 @@ public abstract class AbstractChunkPosWrapper public abstract AbstractBlockPosWrapper getWorldPosition(); + @Override + public int hashCode() { + return Long.hashCode(getLong()); + } + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (!(obj instanceof AbstractChunkPosWrapper)) return false; + return getLong() == ((AbstractChunkPosWrapper)obj).getLong(); + } + }