forked from SteamWar/SteamWar
Improve Region.Area
This commit is contained in:
+2
-3
@@ -43,12 +43,11 @@ public class WireframeCommand extends SWCommand {
|
||||
Region region = regionCheck(p);
|
||||
if (region == null) return;
|
||||
|
||||
PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.FileProvider(region.getBuildArea().getResetFile());
|
||||
try {
|
||||
PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider)
|
||||
PasteBuilder pasteBuilder = new PasteBuilder(PasteBuilder.ClipboardProvider.EMPTY)
|
||||
.ignoreAir(true)
|
||||
.color(region.getRegionData().get(Flag.COLOR).getWithDefault());
|
||||
region.getBuildArea().reset(pasteBuilder, false);
|
||||
region.getBuildArea().reset(p.getLocation(), pasteBuilder, false);
|
||||
RegionUtils.message(region, "REGION_TB_DONE");
|
||||
} catch (SecurityException e) {
|
||||
BauSystem.MESSAGE.send("REGION_TB_ERROR", p);
|
||||
|
||||
+15
-1
@@ -23,7 +23,9 @@ import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.bausystem.features.region.WireframeCommand;
|
||||
import de.steamwar.bausystem.region.dynamic.*;
|
||||
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.utils.PasteBuilder;
|
||||
import lombok.NonNull;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@@ -31,6 +33,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
@@ -94,7 +97,18 @@ public class DynamicRegionSystem implements RegionSystem {
|
||||
// [STDOUT] WET 2
|
||||
// [STDOUT] WET_SPECIAL 9
|
||||
regionTypeMap.forEach((type, regions) -> {
|
||||
System.out.println(type + " " + regions.size());
|
||||
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 WireframeCommand();
|
||||
|
||||
+1
-1
@@ -312,7 +312,7 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
dynamicRegion.getArea().place(new PasteBuilder(new PasteBuilder.FileProvider(dynamicRegion.getArea().getResetFile())), false);
|
||||
dynamicRegion.getArea().place(sourceTile.getCenterLocation(), new PasteBuilder(), false);
|
||||
dynamicRegion.updateNeighbours();
|
||||
|
||||
placement = null;
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ public abstract class DynamicRegion implements Region {
|
||||
// Updating world state for all neighbouring PathRegions
|
||||
list.forEach(data -> {
|
||||
if (needsFullReset.contains(data.getKey().getID())) {
|
||||
data.getKey().getArea().reset(null, false);
|
||||
data.getKey().getArea().reset(null,null, false); // TODO: Implement!
|
||||
} else {
|
||||
data.getKey().update(this, data.getValue().opposite());
|
||||
}
|
||||
|
||||
@@ -24,7 +24,10 @@ import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Location;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Getter
|
||||
@EqualsAndHashCode
|
||||
@@ -134,6 +137,28 @@ public class Tile {
|
||||
return getId(tileX, tileZ);
|
||||
}
|
||||
|
||||
public Stream<Tile> neighboursPlus() {
|
||||
List<Tile> tiles = new ArrayList<>();
|
||||
add(-1, 0).ifPresent(tiles::add);
|
||||
add(1, 0).ifPresent(tiles::add);
|
||||
add(0, -1).ifPresent(tiles::add);
|
||||
add(0, 1).ifPresent(tiles::add);
|
||||
return tiles.stream();
|
||||
}
|
||||
|
||||
public Stream<Tile> neighboursRing() {
|
||||
List<Tile> tiles = new ArrayList<>();
|
||||
add(-1, -1).ifPresent(tiles::add);
|
||||
add(-1, 0).ifPresent(tiles::add);
|
||||
add(-1, 1).ifPresent(tiles::add);
|
||||
add(0, -1).ifPresent(tiles::add);
|
||||
add(0, 1).ifPresent(tiles::add);
|
||||
add(1, -1).ifPresent(tiles::add);
|
||||
add(1, 0).ifPresent(tiles::add);
|
||||
add(1, 1).ifPresent(tiles::add);
|
||||
return tiles.stream();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return tileX + ":" + tileZ;
|
||||
|
||||
+1
-7
@@ -67,14 +67,8 @@ public class GlobalRegion implements Region {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public File getResetFile() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-11
@@ -28,9 +28,7 @@ import de.steamwar.bausystem.utils.PasteBuilder;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NonNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import org.bukkit.Location;
|
||||
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class AreaBlock implements Region.Area {
|
||||
@@ -162,14 +160,10 @@ public class AreaBlock implements Region.Area {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable File getResetFile() {
|
||||
if (selector == null) return null;
|
||||
return selector.select(region.getID(), 0).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||
EditSession editSession = pasteBuilder.pastePoint(copyPoint)
|
||||
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) {
|
||||
EditSession editSession = pasteBuilder
|
||||
.with(PasteBuilder.ClipboardProvider.file(selector.select(region.getID(), 0).orElse(null)))
|
||||
.pastePoint(copyPoint)
|
||||
.run();
|
||||
region.getHistory()
|
||||
.remember(editSession);
|
||||
|
||||
+2
-6
@@ -26,6 +26,7 @@ import de.steamwar.bausystem.region.dynamic.Tile;
|
||||
import de.steamwar.bausystem.region.dynamic.VariantSelector;
|
||||
import de.steamwar.bausystem.utils.PasteBuilder;
|
||||
import lombok.NonNull;
|
||||
import org.bukkit.Location;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
@@ -65,12 +66,7 @@ public class AreaTile implements Region.Area {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable File getResetFile() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) {
|
||||
File resetFile = selector.select(regionIdentifier, 0).orElse(null);
|
||||
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
|
||||
}
|
||||
|
||||
+27
-4
@@ -19,6 +19,7 @@
|
||||
|
||||
package de.steamwar.bausystem.region.dynamic.path;
|
||||
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.bausystem.region.DynamicRegionSystem;
|
||||
import de.steamwar.bausystem.region.Point;
|
||||
@@ -31,11 +32,13 @@ import de.steamwar.bausystem.shared.Pair;
|
||||
import de.steamwar.bausystem.utils.PasteBuilder;
|
||||
import lombok.NonNull;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import static de.steamwar.bausystem.region.RegionType.ConnectionType.*;
|
||||
|
||||
@@ -143,12 +146,32 @@ public class PathArea implements Region.Area {
|
||||
|
||||
@Override
|
||||
public @NonNull Point getCopyPoint() {
|
||||
return copyPoint;
|
||||
return Point.ZERO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable File getResetFile() {
|
||||
return null; // I know what I do!
|
||||
public boolean inRegion(Location location, boolean extension) {
|
||||
return inRegion(location.getBlockX(), location.getBlockZ(), extension);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean inRegion(int x, int z, boolean extension) {
|
||||
// TODO: Implement further!
|
||||
return Region.Area.super.inRegion(x, z, extension);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Clipboard copy(boolean extension) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachChunk(BiConsumer<Integer, Integer> executor) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isChunkOutside(int chunkX, int chunkZ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void reset(PathSide side) {
|
||||
@@ -191,7 +214,7 @@ public class PathArea implements Region.Area {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) {
|
||||
if (region.isGarden()) {
|
||||
File resetFile = GARDEN.select(regionIdentifier, 0).orElse(null);
|
||||
if (resetFile != null) {
|
||||
|
||||
+1
@@ -38,6 +38,7 @@ import java.util.UUID;
|
||||
public class PathRegion extends DynamicRegion {
|
||||
|
||||
private final PathArea area;
|
||||
@Getter
|
||||
private final Tile tile;
|
||||
|
||||
public PathRegion(UUID id, int minX, int minZ) {
|
||||
|
||||
+4
-8
@@ -30,6 +30,7 @@ import de.steamwar.bausystem.region.dynamic.VariantSelector;
|
||||
import de.steamwar.bausystem.utils.PasteBuilder;
|
||||
import lombok.NonNull;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
@@ -76,15 +77,10 @@ public class SpecialArea implements Region.Area {
|
||||
return copyPoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable File getResetFile() {
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean resetting = false;
|
||||
|
||||
@Override
|
||||
public void reset(PasteBuilder pasteBuilder, boolean extension) {
|
||||
public void reset(Location location, PasteBuilder pasteBuilder, boolean extension) {
|
||||
if (resetting) return;
|
||||
AtomicBoolean hasResetting = new AtomicBoolean(false);
|
||||
List<Region> regions = DynamicRegionSystem.INSTANCE.getConnectedRegions(region)
|
||||
@@ -102,13 +98,13 @@ public class SpecialArea implements Region.Area {
|
||||
final int offset = i / 10;
|
||||
final Region region = regions.get(i);
|
||||
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
|
||||
region.getArea().place(null, false);
|
||||
region.getArea().place(null, null, false); // TODO: Fix this!
|
||||
}, offset);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||
public void place(Location location, PasteBuilder pasteBuilder, boolean extension) {
|
||||
File resetFile = resetFiles.select(regionIdentifier, 0).orElse(null);
|
||||
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
|
||||
resetting = false;
|
||||
|
||||
Reference in New Issue
Block a user