From 2774b29342d7eecb3e275b8a1d423c56c33299d1 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 9 Sep 2023 13:32:22 +0200 Subject: [PATCH] Add optimistic recalc on block break and place Signed-off-by: yoyosource --- .../features/simulator/preview/Simulator19.java | 2 +- .../features/simulator/preview/SimulatorData.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/Simulator19.java b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/Simulator19.java index b65cc135..a3c64d3b 100644 --- a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/Simulator19.java +++ b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/Simulator19.java @@ -96,7 +96,7 @@ public class Simulator19 implements Simulator { System.out.println("Time: " + (System.currentTimeMillis() - time) + "ms " + simulatorData.blockTypesMap.size() + "/" + simulatorData.blockDataMap.size() + "/" + simulatorData.collisionDataMap.size() + "/" + simulatorData.airBlocks.size() + " " + recordMap.size()); if (simulatorData.tntList.isEmpty() && currentTick > toCalculate.getKey()) { previewRecord.setDestroyedBlocks(simulatorData.airBlocks()); - previewRecord.setAccessedBlocks(vector -> true); + previewRecord.setAccessedBlocks(simulatorData.accessedBlocks()); consumer.accept(previewRecord); cancel(); } diff --git a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/SimulatorData.java b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/SimulatorData.java index 342c4466..2c10b231 100644 --- a/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/SimulatorData.java +++ b/BauSystem_19/src/de/steamwar/bausystem/features/simulator/preview/SimulatorData.java @@ -26,6 +26,7 @@ import org.bukkit.util.Vector; import org.bukkit.util.VoxelShape; import java.util.*; +import java.util.function.Predicate; import java.util.stream.Collectors; public class SimulatorData { @@ -95,11 +96,18 @@ public class SimulatorData { collisionDataMap.remove(pos); } - public void clearBlocks(Set poss) { // TODO: Optimize + public void clearBlocks(Set poss) { poss.forEach(this::clearBlock); } public Set airBlocks() { return airBlocks.stream().map(pos -> new Vector(pos.x, pos.y, pos.z)).collect(Collectors.toSet()); } + + public Predicate accessedBlocks() { + return vector -> { + Pos pos = new Pos(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ()); + return airBlocks.contains(pos) || blockTypesMap.containsKey(pos) || blockDataMap.containsKey(pos) || collisionDataMap.containsKey(pos); + }; + } }