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
@@ -48,11 +48,16 @@ public class DynamicRegionCommand extends SWCommand {
Tile tile = Tile.fromLocation(player.getLocation()).orElse(null);
if (tile == null) return;
// Check location!
Class<? extends DynamicRegion> 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();
}
@@ -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
@@ -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) {
@@ -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<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);
if (resetFile == null) return;
PasteUtils.paste(resetFile, minPoint, 0);
if (resetFile != null) {
PasteUtils.paste(resetFile, minPoint, 0);
}
}
}