Update Region.Area

This commit is contained in:
2026-03-24 18:12:05 +01:00
parent 13f8712325
commit 02aad8d094
17 changed files with 26 additions and 48 deletions
@@ -63,11 +63,11 @@ public class ColorCommand extends SWCommand {
} }
region.getRegionData().set(Flag.COLOR, color); region.getRegionData().set(Flag.COLOR, color);
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(PasteBuilder.ClipboardProvider.EMPTY) PasteBuilder pasteBuilder = new PasteBuilder()
.ignoreAir(true) .ignoreAir(true)
.onlyColors(true) .onlyColors(true)
.color(color); .color(color);
region.getArea().reset(p.getLocation(), pasteBuilder, false); region.getArea().reset(pasteBuilder, false);
RegionUtils.message(region, "REGION_REGION_COLORED"); RegionUtils.message(region, "REGION_REGION_COLORED");
RegionUtils.message(region, "REGION_REGION_COLORED_FAILED"); RegionUtils.message(region, "REGION_REGION_COLORED_FAILED");
} catch (SecurityException e) { } catch (SecurityException e) {
@@ -49,9 +49,9 @@ public class ResetCommand extends SWCommand {
Region region = regionCheck(p); Region region = regionCheck(p);
if (region == null) return; if (region == null) return;
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(PasteBuilder.ClipboardProvider.EMPTY) PasteBuilder pasteBuilder = new PasteBuilder()
.color(region.getRegionData().get(Flag.COLOR).getWithDefault()); .color(region.getRegionData().get(Flag.COLOR).getWithDefault());
region.getArea().reset(p.getLocation(), pasteBuilder, false); region.getArea().reset(pasteBuilder, false);
region.getRegionData().clear(); region.getRegionData().clear();
RegionUtils.message(region, "REGION_RESET_RESETED"); RegionUtils.message(region, "REGION_RESET_RESETED");
} catch (SecurityException e) { } catch (SecurityException e) {
@@ -116,7 +116,7 @@ public class TestblockCommand extends SWCommand {
.removeTNT(removeTNT) .removeTNT(removeTNT)
.removeWater(removeWater) .removeWater(removeWater)
.color(region.getRegionData().get(Flag.COLOR).getWithDefault()); .color(region.getRegionData().get(Flag.COLOR).getWithDefault());
region.getTestblockArea().reset(p.getLocation(), pasteBuilder, regionExtensionType == RegionExtensionType.EXTENSION); region.getTestblockArea().reset(pasteBuilder, regionExtensionType == RegionExtensionType.EXTENSION);
RegionUtils.message(region, "REGION_TB_DONE"); RegionUtils.message(region, "REGION_TB_DONE");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_TB_ERROR", p); BauSystem.MESSAGE.send("REGION_TB_ERROR", p);
@@ -38,7 +38,7 @@ public class StabFinalizer extends StabStep {
if (data.region.getRegionData().has(Flag.COLOR).isReadable()) { if (data.region.getRegionData().has(Flag.COLOR).isReadable()) {
pasteBuilder.color(data.region.getRegionData().get(Flag.COLOR).getWithDefault()); pasteBuilder.color(data.region.getRegionData().get(Flag.COLOR).getWithDefault());
} }
data.region.getTestblockArea().reset(null, pasteBuilder, true); data.region.getTestblockArea().reset(pasteBuilder, true);
} catch (SecurityException e) { } catch (SecurityException e) {
stop(); stop();
throw e; throw e;
@@ -77,7 +77,7 @@ public class StabGenerator extends StabStep implements Listener {
if (data.region.getRegionData().has(Flag.COLOR).isReadable()) { if (data.region.getRegionData().has(Flag.COLOR).isReadable()) {
pasteBuilder.color(data.region.getRegionData().get(Flag.COLOR).getWithDefault()); pasteBuilder.color(data.region.getRegionData().get(Flag.COLOR).getWithDefault());
} }
data.region.getTestblockArea().reset(null, pasteBuilder, true); data.region.getTestblockArea().reset(pasteBuilder, true);
} catch (SecurityException e) { } catch (SecurityException e) {
stop(); stop();
throw e; throw e;
@@ -111,7 +111,7 @@ public interface Region extends RegionDataStore {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
} }
@Override @Override
@@ -159,11 +159,11 @@ public interface Region extends RegionDataStore {
return FlatteningWrapper.impl.copy(getMinPoint(extension), getMaxPoint(extension), getCopyPoint()); return FlatteningWrapper.impl.copy(getMinPoint(extension), getMaxPoint(extension), getCopyPoint());
} }
default void reset(Location location, PasteBuilder pasteBuilder, boolean extension) { default void reset(PasteBuilder pasteBuilder, boolean extension) {
place(location, pasteBuilder, extension); place(pasteBuilder, extension);
} }
void place(Location location, PasteBuilder pasteBuilder, boolean 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);
@@ -44,10 +44,10 @@ public class WireframeCommand extends SWCommand {
if (region == null) return; if (region == null) return;
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(PasteBuilder.ClipboardProvider.EMPTY) PasteBuilder pasteBuilder = new PasteBuilder()
.ignoreAir(true) .ignoreAir(true)
.color(region.getRegionData().get(Flag.COLOR).getWithDefault()); .color(region.getRegionData().get(Flag.COLOR).getWithDefault());
region.getBuildArea().reset(p.getLocation(), pasteBuilder, false); region.getBuildArea().reset(pasteBuilder, false);
RegionUtils.message(region, "REGION_TB_DONE"); RegionUtils.message(region, "REGION_TB_DONE");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_TB_ERROR", p); BauSystem.MESSAGE.send("REGION_TB_ERROR", p);
@@ -23,9 +23,7 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.region.WireframeCommand; import de.steamwar.bausystem.features.region.WireframeCommand;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.global.GlobalRegion; import de.steamwar.bausystem.region.dynamic.global.GlobalRegion;
import de.steamwar.bausystem.region.dynamic.path.PathRegion;
import de.steamwar.bausystem.shared.Pair; import de.steamwar.bausystem.shared.Pair;
import de.steamwar.bausystem.utils.PasteBuilder;
import lombok.NonNull; import lombok.NonNull;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@@ -33,7 +31,6 @@ import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
@@ -91,25 +88,6 @@ public class DynamicRegionSystem implements RegionSystem {
.collect(Collectors.toUnmodifiableMap(entry -> entry.getValue().identifier(), Map.Entry::getKey)); .collect(Collectors.toUnmodifiableMap(entry -> entry.getValue().identifier(), Map.Entry::getKey));
DynamicRegionRepository.loadRegions(); DynamicRegionRepository.loadRegions();
// [STDOUT] PATH 239
// [STDOUT] DRY 4
// [STDOUT] DRY_SPECIAL 18
// [STDOUT] WET 2
// [STDOUT] WET_SPECIAL 9
regionTypeMap.forEach((type, regions) -> {
if (type != RegionType.PATH) return;
MultiTileArea multiTileArea = new MultiTileArea() {
@Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) {
}
};
for (Region region : regions) {
PathRegion pathRegion = (PathRegion) region;
multiTileArea.addTile(pathRegion.getTile());
}
multiTileArea.quantize();
});
new DynamicRegionCommand(); new DynamicRegionCommand();
new WireframeCommand(); new WireframeCommand();
} }
@@ -312,7 +312,7 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener {
return; return;
} }
dynamicRegion.getArea().place(sourceTile.getCenterLocation(), new PasteBuilder(), false); dynamicRegion.getArea().place(new PasteBuilder(), false);
dynamicRegion.updateNeighbours(); dynamicRegion.updateNeighbours();
placement = null; placement = null;
@@ -73,7 +73,7 @@ public abstract class DynamicRegion implements Region {
// Updating world state for all neighbouring PathRegions // Updating world state for all neighbouring PathRegions
list.forEach(data -> { list.forEach(data -> {
if (needsFullReset.contains(data.getKey().getID())) { if (needsFullReset.contains(data.getKey().getID())) {
data.getKey().getArea().reset(null,null, false); // TODO: Implement! data.getKey().getArea().reset(null, false); // TODO: Implement!
} else { } else {
data.getKey().update(this, data.getValue().opposite()); data.getKey().update(this, data.getValue().opposite());
} }
@@ -68,7 +68,7 @@ public class GlobalRegion implements Region {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
} }
@Override @Override
@@ -160,7 +160,7 @@ public class AreaBlock implements Region.Area {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
EditSession editSession = pasteBuilder EditSession editSession = pasteBuilder
.with(PasteBuilder.ClipboardProvider.file(selector.select(region.getID(), 0).orElse(null))) .with(PasteBuilder.ClipboardProvider.file(selector.select(region.getID(), 0).orElse(null)))
.pastePoint(copyPoint) .pastePoint(copyPoint)
@@ -66,7 +66,7 @@ public class AreaTile implements Region.Area {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
File resetFile = selector.select(regionIdentifier, 0).orElse(null); File resetFile = selector.select(regionIdentifier, 0).orElse(null);
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0); if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
} }
@@ -214,7 +214,7 @@ public class PathArea implements Region.Area {
} }
@Override @Override
public void place(Location location, 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) {
@@ -80,7 +80,7 @@ public class SpecialArea implements Region.Area {
private boolean resetting = false; private boolean resetting = false;
@Override @Override
public void reset(Location location, PasteBuilder pasteBuilder, boolean extension) { public void reset(PasteBuilder pasteBuilder, boolean extension) {
if (resetting) return; if (resetting) return;
AtomicBoolean hasResetting = new AtomicBoolean(false); AtomicBoolean hasResetting = new AtomicBoolean(false);
List<Region> regions = DynamicRegionSystem.INSTANCE.getConnectedRegions(region) List<Region> regions = DynamicRegionSystem.INSTANCE.getConnectedRegions(region)
@@ -98,13 +98,13 @@ public class SpecialArea implements Region.Area {
final int offset = i / 10; final int offset = i / 10;
final Region region = regions.get(i); final Region region = regions.get(i);
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
region.getArea().place(null, null, false); // TODO: Fix this! region.getArea().place(null, false); // TODO: Fix this!
}, offset); }, offset);
} }
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { 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) PasteUtils.paste(resetFile, minPoint, 0); if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
resetting = false; resetting = false;
@@ -74,7 +74,7 @@ public final class FixedGlobalRegion implements Region {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
} }
@Override @Override
@@ -176,7 +176,7 @@ public class FixedRegion implements Region {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
pasteBuilder.with(PasteBuilder.ClipboardProvider.file(prototype.getSkinMap().get(skin).getSchematicFile())) pasteBuilder.with(PasteBuilder.ClipboardProvider.file(prototype.getSkinMap().get(skin).getSchematicFile()))
.reset(extension) .reset(extension)
.minPoint(getMinPoint(extension)) .minPoint(getMinPoint(extension))
@@ -224,7 +224,7 @@ public class FixedRegion implements Region {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
pasteBuilder.with(PasteBuilder.ClipboardProvider.file(prototype.getSkinMap().get(skin).getBuildSchematicFile())) pasteBuilder.with(PasteBuilder.ClipboardProvider.file(prototype.getSkinMap().get(skin).getBuildSchematicFile()))
.reset(extension) .reset(extension)
.minPoint(getMinPoint(extension)) .minPoint(getMinPoint(extension))
@@ -273,7 +273,7 @@ public class FixedRegion implements Region {
} }
@Override @Override
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) { public void place(PasteBuilder pasteBuilder, boolean extension) {
pasteBuilder.with(PasteBuilder.ClipboardProvider.file(prototype.getSkinMap().get(skin).getTestblockSchematicFile())) pasteBuilder.with(PasteBuilder.ClipboardProvider.file(prototype.getSkinMap().get(skin).getTestblockSchematicFile()))
.reset(extension) .reset(extension)
.minPoint(getMinPoint(extension)) .minPoint(getMinPoint(extension))