Add Region.Area.place which is called ba Region.Area.reset

This commit is contained in:
2026-03-07 13:13:28 +01:00
parent 35ef929bc8
commit ade131d737
7 changed files with 49 additions and 12 deletions
@@ -123,7 +123,7 @@ public interface Region extends RegionDataStore {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
} }
@Override @Override
@@ -174,7 +174,11 @@ public interface Region extends RegionDataStore {
@Nullable @Nullable
File getResetFile(); 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<Integer, Integer> executor) { default void forEachChunk(BiConsumer<Integer, Integer> executor) {
Point minPoint = getMinPoint(false); Point minPoint = getMinPoint(false);
@@ -48,11 +48,16 @@ public class DynamicRegionCommand extends SWCommand {
Tile tile = Tile.fromLocation(player.getLocation()).orElse(null); Tile tile = Tile.fromLocation(player.getLocation()).orElse(null);
if (tile == null) return; if (tile == null) return;
// Check location!
Class<? extends DynamicRegion> regionClass = DynamicRegionSystem.identifierDataMap.get(regionType); Class<? extends DynamicRegion> regionClass = DynamicRegionSystem.identifierDataMap.get(regionType);
DynamicRegion dynamicRegion = DynamicRegionRepository.constructRegion(regionClass, UUID.randomUUID(), tile.getMinX(), tile.getMinZ()); 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); dynamicRegion.getArea().place(new PasteBuilder(new PasteBuilder.FileProvider(dynamicRegion.getArea().getResetFile())), false);
// TODO: This here still has some kind of error!aww
dynamicRegion.updateNeighbours(); dynamicRegion.updateNeighbours();
} }
@@ -74,7 +74,7 @@ public class GlobalRegion implements Region {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
} }
@Override @Override
@@ -191,7 +191,7 @@ public class PathArea implements Region.Area {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
if (region.isGarden()) { if (region.isGarden()) {
File resetFile = GARDEN.select(regionIdentifier, 0).orElse(null); File resetFile = GARDEN.select(regionIdentifier, 0).orElse(null);
if (resetFile != null) { if (resetFile != null) {
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.special; 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.Point;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.dynamic.DynamicRegion; import de.steamwar.bausystem.region.dynamic.DynamicRegion;
@@ -31,12 +33,14 @@ import org.bukkit.Bukkit;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
import java.util.List;
import java.util.UUID; import java.util.UUID;
public class SpecialArea implements Region.Area { public class SpecialArea implements Region.Area {
public static final File SPECIAL_PATH_DIR = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/special"); 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 UUID regionIdentifier;
private final Tile tile; private final Tile tile;
private final Point minPoint; private final Point minPoint;
@@ -45,6 +49,7 @@ public class SpecialArea implements Region.Area {
private final VariantSelector resetFiles; private final VariantSelector resetFiles;
public SpecialArea(Tile tile, DynamicRegion region, VariantSelector resetFiles) { public SpecialArea(Tile tile, DynamicRegion region, VariantSelector resetFiles) {
this.region = region;
this.regionIdentifier = region.getID(); this.regionIdentifier = region.getID();
this.tile = tile; this.tile = tile;
@@ -75,10 +80,33 @@ public class SpecialArea implements Region.Area {
return null; return null;
} }
private boolean reseting = false;
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void reset(PasteBuilder pasteBuilder, boolean extension) {
if (reseting) return;
List<Region> 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); File resetFile = resetFiles.select(regionIdentifier, 0).orElse(null);
if (resetFile == null) return; if (resetFile != null) {
PasteUtils.paste(resetFile, minPoint, 0); PasteUtils.paste(resetFile, minPoint, 0);
}
} }
} }
@@ -80,7 +80,7 @@ public final class FixedGlobalRegion implements Region {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
} }
@Override @Override
@@ -190,7 +190,7 @@ public class FixedRegion implements Region {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
pasteBuilder.reset(extension) pasteBuilder.reset(extension)
.minPoint(getMinPoint(extension)) .minPoint(getMinPoint(extension))
.maxPoint(getMaxPoint(extension)) .maxPoint(getMaxPoint(extension))
@@ -243,7 +243,7 @@ public class FixedRegion implements Region {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
pasteBuilder.reset(extension) pasteBuilder.reset(extension)
.minPoint(getMinPoint(extension)) .minPoint(getMinPoint(extension))
.maxPoint(getMaxPoint(extension)) .maxPoint(getMaxPoint(extension))
@@ -297,7 +297,7 @@ public class FixedRegion implements Region {
} }
@Override @Override
public void reset(PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
pasteBuilder.reset(extension) pasteBuilder.reset(extension)
.minPoint(getMinPoint(extension)) .minPoint(getMinPoint(extension))
.maxPoint(getMaxPoint(extension)) .maxPoint(getMaxPoint(extension))