From e793d95050d1ab31d33b8ef3c1d59f11482b9873 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sat, 7 Mar 2026 13:21:53 +0100 Subject: [PATCH] Improve SpecialArea.reset --- .../region/dynamic/special/SpecialArea.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java index d97929a3..f03f97bd 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.List; import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; public class SpecialArea implements Region.Area { @@ -80,24 +81,28 @@ public class SpecialArea implements Region.Area { return null; } - private boolean reseting = false; + private boolean resetting = false; @Override public void reset(PasteBuilder pasteBuilder, boolean extension) { - if (reseting) return; - List regions = DynamicRegionSystem.INSTANCE.getConnectedRegions(region).toList(); - System.out.println(regions.size()); + if (resetting) return; + AtomicBoolean hasResetting = new AtomicBoolean(false); + List regions = DynamicRegionSystem.INSTANCE.getConnectedRegions(region) + .peek(region -> { + if (((SpecialArea) region.getArea()).resetting) hasResetting.set(true); + }) + .toList(); + if (hasResetting.get()) return; + regions.forEach(region -> { - ((SpecialArea) region.getArea()).reseting = true; + ((SpecialArea) region.getArea()).resetting = true; }); for (int i = 0; i < regions.size(); i++) { - int offset = i / 10; - int finalI = i; + final int offset = i / 10; + final Region region = regions.get(i); Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { - SpecialArea specialArea = (SpecialArea) regions.get(finalI).getArea(); - specialArea.place(null, false); - specialArea.reseting = false; + region.getArea().place(null, false); }, offset); } } @@ -105,8 +110,7 @@ public class SpecialArea implements Region.Area { @Override public void place(PasteBuilder pasteBuilder, boolean extension) { File resetFile = resetFiles.select(regionIdentifier, 0).orElse(null); - if (resetFile != null) { - PasteUtils.paste(resetFile, minPoint, 0); - } + if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0); + resetting = false; } }