From 9449433fe8c0c5e323c46920a96feb5cd43ab88c Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 7 Aug 2024 07:47:11 -0500 Subject: [PATCH] Fix deleting beacons --- .../renderer/generic/BeaconRenderHandler.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/BeaconRenderHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/BeaconRenderHandler.java index d1beb0701..abb909a82 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/BeaconRenderHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/BeaconRenderHandler.java @@ -143,7 +143,7 @@ public class BeaconRenderHandler { // beam no longer exists at position, remove from DB this.beaconBeamRepo.deleteWithKey(beaconPos); // TODO broken when updating adjacent chunks - this.stopRenderingBeaconAtPos(beaconPos); + this.stopRenderingBeaconAtPos(beaconPos, true); } } @@ -168,7 +168,7 @@ public class BeaconRenderHandler for (int i = 0; i < existingBeamList.size(); i++) { BeaconBeamDTO beam = existingBeamList.get(i); - this.stopRenderingBeaconAtPos(beam.pos); + this.stopRenderingBeaconAtPos(beam.pos, false); } } @@ -199,18 +199,25 @@ public class BeaconRenderHandler }); } - private void stopRenderingBeaconAtPos(DhBlockPos beaconPos) + private void stopRenderingBeaconAtPos(DhBlockPos beaconPos, boolean ignoreReferenceCount) { this.beaconRefCountByBlockPos.compute(beaconPos, (pos, beaconRefCount) -> { - if (beaconRefCount != null - && beaconRefCount.decrementAndGet() <= 0) + // ignoring the reference count is needed when deleting beacons + if (ignoreReferenceCount + || + // respecting the reference count is used when unloading beacons + ( + beaconRefCount != null + && beaconRefCount.decrementAndGet() <= 0 + )) { this.beaconBoxGroup.removeIf((box) -> box.minPos.x == beaconPos.x - && box.minPos.y == beaconPos.y+1 // plus 1 because the beam starts above the beacon - && box.minPos.z == beaconPos.z + && box.minPos.y == beaconPos.y+1 // plus 1 because the beam starts above the beacon + && box.minPos.z == beaconPos.z ); + this.beaconBoxGroup.triggerBoxChange(); return null; }