diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java index 52acdac4..af9b85fc 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java @@ -123,7 +123,7 @@ public interface Region extends RegionDataStore { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { } @Override @@ -174,7 +174,11 @@ public interface Region extends RegionDataStore { @Nullable File getResetFile(); - void reset(PasteBuilder pasteBuilder, boolean extension); + default void reset(PasteBuilder pasteBuilder, boolean extension) { + place(pasteBuilder, extension); + } + + void place(PasteBuilder pasteBuilder, boolean extension); default void forEachChunk(BiConsumer executor) { Point minPoint = getMinPoint(false); diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionCommand.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionCommand.java index 16c93e94..89f09758 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionCommand.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/DynamicRegionCommand.java @@ -48,11 +48,16 @@ public class DynamicRegionCommand extends SWCommand { Tile tile = Tile.fromLocation(player.getLocation()).orElse(null); if (tile == null) return; + // Check location! + Class regionClass = DynamicRegionSystem.identifierDataMap.get(regionType); DynamicRegion dynamicRegion = DynamicRegionRepository.constructRegion(regionClass, UUID.randomUUID(), tile.getMinX(), tile.getMinZ()); + if (dynamicRegion == null) { + // TODO: Give error to user + return; + } - dynamicRegion.getArea().reset(new PasteBuilder(new PasteBuilder.FileProvider(dynamicRegion.getArea().getResetFile())), false); - // TODO: This here still has some kind of error!aww + dynamicRegion.getArea().place(new PasteBuilder(new PasteBuilder.FileProvider(dynamicRegion.getArea().getResetFile())), false); dynamicRegion.updateNeighbours(); } diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/global/GlobalRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/global/GlobalRegion.java index 78679a52..8219baf4 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/global/GlobalRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/global/GlobalRegion.java @@ -74,7 +74,7 @@ public class GlobalRegion implements Region { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathArea.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathArea.java index 4c47b303..44f3b3f2 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathArea.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path/PathArea.java @@ -191,7 +191,7 @@ public class PathArea implements Region.Area { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { if (region.isGarden()) { File resetFile = GARDEN.select(regionIdentifier, 0).orElse(null); if (resetFile != null) { 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 8f3c2762..d97929a3 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 @@ -19,6 +19,8 @@ package de.steamwar.bausystem.region.dynamic.special; +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.region.DynamicRegionSystem; import de.steamwar.bausystem.region.Point; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.dynamic.DynamicRegion; @@ -31,12 +33,14 @@ import org.bukkit.Bukkit; import org.jetbrains.annotations.Nullable; import java.io.File; +import java.util.List; import java.util.UUID; public class SpecialArea implements Region.Area { public static final File SPECIAL_PATH_DIR = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/special"); + private final DynamicRegion region; private final UUID regionIdentifier; private final Tile tile; private final Point minPoint; @@ -45,6 +49,7 @@ public class SpecialArea implements Region.Area { private final VariantSelector resetFiles; public SpecialArea(Tile tile, DynamicRegion region, VariantSelector resetFiles) { + this.region = region; this.regionIdentifier = region.getID(); this.tile = tile; @@ -75,10 +80,33 @@ public class SpecialArea implements Region.Area { return null; } + private boolean reseting = false; + @Override public void reset(PasteBuilder pasteBuilder, boolean extension) { + if (reseting) return; + List regions = DynamicRegionSystem.INSTANCE.getConnectedRegions(region).toList(); + System.out.println(regions.size()); + regions.forEach(region -> { + ((SpecialArea) region.getArea()).reseting = true; + }); + + for (int i = 0; i < regions.size(); i++) { + int offset = i / 10; + int finalI = i; + Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { + SpecialArea specialArea = (SpecialArea) regions.get(finalI).getArea(); + specialArea.place(null, false); + specialArea.reseting = false; + }, offset); + } + } + + @Override + public void place(PasteBuilder pasteBuilder, boolean extension) { File resetFile = resetFiles.select(regionIdentifier, 0).orElse(null); - if (resetFile == null) return; - PasteUtils.paste(resetFile, minPoint, 0); + if (resetFile != null) { + PasteUtils.paste(resetFile, minPoint, 0); + } } } diff --git a/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedGlobalRegion.java b/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedGlobalRegion.java index 3f9d21e8..865e075f 100644 --- a/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedGlobalRegion.java +++ b/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedGlobalRegion.java @@ -80,7 +80,7 @@ public final class FixedGlobalRegion implements Region { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { } @Override diff --git a/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedRegion.java b/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedRegion.java index f19e46ec..20fc0440 100644 --- a/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedRegion.java +++ b/BauSystem/BauSystem_RegionFixed/src/de/steamwar/bausystem/region/fixed/FixedRegion.java @@ -190,7 +190,7 @@ public class FixedRegion implements Region { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { pasteBuilder.reset(extension) .minPoint(getMinPoint(extension)) .maxPoint(getMaxPoint(extension)) @@ -243,7 +243,7 @@ public class FixedRegion implements Region { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { pasteBuilder.reset(extension) .minPoint(getMinPoint(extension)) .maxPoint(getMaxPoint(extension)) @@ -297,7 +297,7 @@ public class FixedRegion implements Region { } @Override - public void reset(PasteBuilder pasteBuilder, boolean extension) { + public void place(PasteBuilder pasteBuilder, boolean extension) { pasteBuilder.reset(extension) .minPoint(getMinPoint(extension)) .maxPoint(getMaxPoint(extension))