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); + }; + } }