Fix constructors

This commit is contained in:
2026-03-23 12:19:10 +01:00
parent 60a65a92c2
commit 9c47942237
16 changed files with 286 additions and 78 deletions
@@ -57,10 +57,23 @@ public abstract class MultiTileArea implements Region.Area {
} }
} }
public void addTile(Tile tile) { /**
tiles.add(tile); * @return {@code true} if the {@link MultiTileArea} did not already contain the {@link Tile}.
*/
public boolean addTile(Tile tile) {
return tiles.add(tile);
} }
/**
* @return {@code true} if the {@link MultiTileArea} did not already contain any {@link Tile} passed as argument.
*/
public boolean addTiles(Set<Tile> tiles) {
return this.tiles.addAll(tiles);
}
/**
* @return {@code true} if the {@link MultiTileArea} no longer has any {@link Tile}'s associated with it.
*/
public boolean removeTile(Tile tile) { public boolean removeTile(Tile tile) {
tiles.remove(tile); tiles.remove(tile);
return tiles.isEmpty(); return tiles.isEmpty();
@@ -25,23 +25,23 @@ import de.steamwar.bausystem.region.dynamic.PasteUtils;
import de.steamwar.bausystem.region.dynamic.Tile; import de.steamwar.bausystem.region.dynamic.Tile;
import de.steamwar.bausystem.region.dynamic.VariantSelector; import de.steamwar.bausystem.region.dynamic.VariantSelector;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import org.bukkit.Location; import org.bukkit.Location;
import org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
import java.util.UUID;
public class AreaTile implements Region.Area { public class AreaTile implements Region.Area {
private final UUID regionIdentifier; @Getter
private final Tile tile;
private final Point minPoint; private final Point minPoint;
private final Point maxPoint; private final Point maxPoint;
private final Point copyPoint; private final Point copyPoint;
private final VariantSelector selector; private final VariantSelector selector;
public AreaTile(Tile tile, int tileX, int tileZ, Region region, VariantSelector selector) { public AreaTile(Tile tile, int tileX, int tileZ, VariantSelector selector) {
regionIdentifier = region.getID(); this.tile = tile;
minPoint = Point.fromLocation(tile.getMinLocation()).setY(WORLD_MIN_Y); minPoint = Point.fromLocation(tile.getMinLocation()).setY(WORLD_MIN_Y);
maxPoint = Point.fromLocation(tile.add(tileX - 1, tileZ - 1).orElseThrow().getMaxLocation()).setY(WORLD_MAX_Y); maxPoint = Point.fromLocation(tile.add(tileX - 1, tileZ - 1).orElseThrow().getMaxLocation()).setY(WORLD_MAX_Y);
int x = minPoint.getX() + (maxPoint.getX() - minPoint.getX()) / 2; int x = minPoint.getX() + (maxPoint.getX() - minPoint.getX()) / 2;
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.microwargear_7; package de.steamwar.bausystem.region.dynamic.modes.microwargear_7;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
@@ -32,6 +34,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -49,14 +52,27 @@ public class MiWG7DisplayRegion extends DynamicRegion {
private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/microwargear_7/display"); private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/microwargear_7/display");
private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY);
private final Area area; private final AreaTile area;
public MiWG7DisplayRegion(UUID id, int minX, int minZ) { public MiWG7DisplayRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, 1, 1, this, SELECTOR); }
public MiWG7DisplayRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private MiWG7DisplayRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, SELECTOR);
regionData = new DisplayRegionData(this); regionData = new DisplayRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.microwargear_7; package de.steamwar.bausystem.region.dynamic.modes.microwargear_7;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.*; import de.steamwar.bausystem.region.*;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock;
@@ -33,6 +35,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -58,10 +61,19 @@ public class MiWG7PlotRegion extends DynamicRegion {
private final RegionHistory history; private final RegionHistory history;
private final RegionBackups backups; private final RegionBackups backups;
public MiWG7PlotRegion(UUID id, int minX, int minZ) { public MiWG7PlotRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); }
public MiWG7PlotRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private MiWG7PlotRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, REGION);
Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 36, new Point(7, 7, 7), new Point(7, 0, 7), new Point(7, 7, 7), AreaBlock.CopyLocation.CENTER, 50); Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 36, new Point(7, 7, 7), new Point(7, 0, 7), new Point(7, 7, 7), AreaBlock.CopyLocation.CENTER, 50);
northArea = pair.getKey(); northArea = pair.getKey();
@@ -70,7 +82,11 @@ public class MiWG7PlotRegion extends DynamicRegion {
regionData = new PlotRegionData(this); regionData = new PlotRegionData(this);
history = new RegionHistory.Impl(10); history = new RegionHistory.Impl(10);
backups = new PlotRegionBackups(this, PlotRegionData::new); backups = new PlotRegionBackups(this, PlotRegionData::new);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.miniwargear; package de.steamwar.bausystem.region.dynamic.modes.miniwargear;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
@@ -32,6 +34,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -49,14 +52,27 @@ public class MWGDisplayRegion extends DynamicRegion {
private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/miniwargear/display"); private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/miniwargear/display");
private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY);
private final Area area; private final AreaTile area;
public MWGDisplayRegion(UUID id, int minX, int minZ) { public MWGDisplayRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); }
public MWGDisplayRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private MWGDisplayRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, SELECTOR);
regionData = new DisplayRegionData(this); regionData = new DisplayRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.miniwargear; package de.steamwar.bausystem.region.dynamic.modes.miniwargear;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.*; import de.steamwar.bausystem.region.*;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock;
@@ -33,6 +35,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -58,19 +61,32 @@ public class MWGPlotRegion extends DynamicRegion {
private final RegionHistory history; private final RegionHistory history;
private final RegionBackups backups; private final RegionBackups backups;
public MWGPlotRegion(UUID id, int minX, int minZ) { public MWGPlotRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
history = new RegionHistory.Impl(10); finishCreate();
backups = new PlotRegionBackups(this, PlotRegionData::new); }
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow();
area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); public MWGPlotRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private MWGPlotRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, REGION);
Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 36, new Point(37, 26, 22), new Point(7, 0, 7), new Point(7, 7, 7), AreaBlock.CopyLocation.CENTER, 50); Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 36, new Point(37, 26, 22), new Point(7, 0, 7), new Point(7, 7, 7), AreaBlock.CopyLocation.CENTER, 50);
northArea = pair.getKey(); northArea = pair.getKey();
southArea = pair.getValue(); southArea = pair.getValue();
regionData = new PlotRegionData(this); regionData = new PlotRegionData(this);
finishInit(); history = new RegionHistory.Impl(10);
backups = new PlotRegionBackups(this, PlotRegionData::new);
}
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.wargear_45; package de.steamwar.bausystem.region.dynamic.modes.wargear_45;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
@@ -32,6 +34,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -49,14 +52,27 @@ public class WG45DisplayRegion extends DynamicRegion {
private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/wargear_45/display"); private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/wargear_45/display");
private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY);
private final Area area; private final AreaTile area;
public WG45DisplayRegion(UUID id, int minX, int minZ) { public WG45DisplayRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); }
public WG45DisplayRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WG45DisplayRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, SELECTOR);
regionData = new DisplayRegionData(this); regionData = new DisplayRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,14 +19,14 @@
package de.steamwar.bausystem.region.dynamic.modes.wargear_45; package de.steamwar.bausystem.region.dynamic.modes.wargear_45;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.*; import de.steamwar.bausystem.region.*;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock;
import de.steamwar.bausystem.region.dynamic.modes.AreaTile; import de.steamwar.bausystem.region.dynamic.modes.AreaTile;
import de.steamwar.bausystem.region.dynamic.modes.PlotRegionBackups; import de.steamwar.bausystem.region.dynamic.modes.PlotRegionBackups;
import de.steamwar.bausystem.region.dynamic.modes.PlotRegionData; import de.steamwar.bausystem.region.dynamic.modes.PlotRegionData;
import de.steamwar.bausystem.region.dynamic.modes.miniwargear.MWGUtils;
import de.steamwar.bausystem.region.dynamic.modes.warship_230.WS230Utils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.shared.Pair; import de.steamwar.bausystem.shared.Pair;
import de.steamwar.sql.GameModeConfig; import de.steamwar.sql.GameModeConfig;
@@ -35,6 +35,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -60,10 +61,19 @@ public class WG45PlotRegion extends DynamicRegion {
private final RegionHistory history; private final RegionHistory history;
private final RegionBackups backups; private final RegionBackups backups;
public WG45PlotRegion(UUID id, int minX, int minZ) { public WG45PlotRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); }
public WG45PlotRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WG45PlotRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, REGION);
Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 36, new Point(67, 41, 47), new Point(16, 0, 16), new Point(16, 16, 16), AreaBlock.CopyLocation.CENTER, 50); Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 36, new Point(67, 41, 47), new Point(16, 0, 16), new Point(16, 16, 16), AreaBlock.CopyLocation.CENTER, 50);
northArea = pair.getKey(); northArea = pair.getKey();
@@ -72,7 +82,11 @@ public class WG45PlotRegion extends DynamicRegion {
regionData = new PlotRegionData(this); regionData = new PlotRegionData(this);
history = new RegionHistory.Impl(10); history = new RegionHistory.Impl(10);
backups = new PlotRegionBackups(this, PlotRegionData::new); backups = new PlotRegionBackups(this, PlotRegionData::new);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.warship_175; package de.steamwar.bausystem.region.dynamic.modes.warship_175;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
@@ -32,6 +34,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -49,14 +52,27 @@ public class WS175DisplayRegion extends DynamicRegion {
private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/warship_175/display"); private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/warship_175/display");
private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY);
private final Area area; private final AreaTile area;
public WS175DisplayRegion(UUID id, int minX, int minZ) { public WS175DisplayRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); }
public WS175DisplayRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WS175DisplayRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, SELECTOR);
regionData = new DisplayRegionData(this); regionData = new DisplayRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.warship_175; package de.steamwar.bausystem.region.dynamic.modes.warship_175;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.*; import de.steamwar.bausystem.region.*;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock;
@@ -33,6 +35,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -58,10 +61,19 @@ public class WS175PlotRegion extends DynamicRegion {
private final RegionHistory history; private final RegionHistory history;
private final RegionBackups backups; private final RegionBackups backups;
public WS175PlotRegion(UUID id, int minX, int minZ) { public WS175PlotRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); }
public WS175PlotRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WS175PlotRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, REGION);
Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 25, new Point(175, 58, 39), new Point(12, 0, 8), new Point(12, 0, 8), AreaBlock.CopyLocation.SIDE, 132); Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 25, new Point(175, 58, 39), new Point(12, 0, 8), new Point(12, 0, 8), AreaBlock.CopyLocation.SIDE, 132);
northArea = pair.getKey(); northArea = pair.getKey();
@@ -70,7 +82,11 @@ public class WS175PlotRegion extends DynamicRegion {
regionData = new PlotRegionData(this); regionData = new PlotRegionData(this);
history = new RegionHistory.Impl(10); history = new RegionHistory.Impl(10);
backups = new PlotRegionBackups(this, PlotRegionData::new); backups = new PlotRegionBackups(this, PlotRegionData::new);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.warship_230; package de.steamwar.bausystem.region.dynamic.modes.warship_230;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
@@ -32,6 +34,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -49,14 +52,27 @@ public class WS230DisplayRegion extends DynamicRegion {
private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/warship_230/display"); private static final File DIRECTORY = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/warship_230/display");
private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); private static final VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY);
private final Area area; private final AreaTile area;
public WS230DisplayRegion(UUID id, int minX, int minZ) { public WS230DisplayRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); }
public WS230DisplayRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WS230DisplayRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, SELECTOR);
regionData = new DisplayRegionData(this); regionData = new DisplayRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,6 +19,8 @@
package de.steamwar.bausystem.region.dynamic.modes.warship_230; package de.steamwar.bausystem.region.dynamic.modes.warship_230;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.*; import de.steamwar.bausystem.region.*;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock;
@@ -33,6 +35,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
@RegionConstructorData( @RegionConstructorData(
@@ -58,10 +61,19 @@ public class WS230PlotRegion extends DynamicRegion {
private final RegionHistory history; private final RegionHistory history;
private final RegionBackups backups; private final RegionBackups backups;
public WS230PlotRegion(UUID id, int minX, int minZ) { public WS230PlotRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); }
public WS230PlotRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WS230PlotRegion(UUID id, Tile tile) {
super(id, null);
area = new AreaTile(tile, TILE_X, TILE_Z, REGION);
Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 25, new Point(230, 58, 43), new Point(12, 0, 8), new Point(12, 0, 8), AreaBlock.CopyLocation.SIDE, 136); Pair<AreaBlock, AreaBlock> pair = AreaBlock.create(this, 25, new Point(230, 58, 43), new Point(12, 0, 8), new Point(12, 0, 8), AreaBlock.CopyLocation.SIDE, 136);
northArea = pair.getKey(); northArea = pair.getKey();
@@ -70,7 +82,11 @@ public class WS230PlotRegion extends DynamicRegion {
regionData = new PlotRegionData(this); regionData = new PlotRegionData(this);
history = new RegionHistory.Impl(10); history = new RegionHistory.Impl(10);
backups = new PlotRegionBackups(this, PlotRegionData::new); backups = new PlotRegionBackups(this, PlotRegionData::new);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -57,9 +57,10 @@ public class PathRegion extends DynamicRegion {
} }
public void add(Tile tile) { public void add(Tile tile) {
area.addTile(tile); if (area.addTile(tile)) {
save(); save();
} }
}
public void update(Tile toUpdate, NeighbourDirection toDirection) { public void update(Tile toUpdate, NeighbourDirection toDirection) {
for (PathSide side : toDirection.getSideUpdates()) { for (PathSide side : toDirection.getSideUpdates()) {
@@ -28,6 +28,7 @@ import de.steamwar.bausystem.region.dynamic.PasteUtils;
import de.steamwar.bausystem.region.dynamic.Tile; import de.steamwar.bausystem.region.dynamic.Tile;
import de.steamwar.bausystem.region.dynamic.VariantSelector; import de.steamwar.bausystem.region.dynamic.VariantSelector;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@@ -43,7 +44,8 @@ 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 DynamicRegion region;
private final UUID regionIdentifier;
@Getter
private final Tile tile; private final Tile tile;
private final Point minPoint; private final Point minPoint;
private final Point maxPoint; private final Point maxPoint;
@@ -52,7 +54,6 @@ public class SpecialArea implements Region.Area {
public SpecialArea(Tile tile, DynamicRegion region, VariantSelector resetFiles) { public SpecialArea(Tile tile, DynamicRegion region, VariantSelector resetFiles) {
this.region = region; this.region = region;
this.regionIdentifier = region.getID();
this.tile = tile; this.tile = tile;
minPoint = Point.fromLocation(tile.getMinLocation()).setY(WORLD_MIN_Y); minPoint = Point.fromLocation(tile.getMinLocation()).setY(WORLD_MIN_Y);
@@ -19,11 +19,15 @@
package de.steamwar.bausystem.region.dynamic.special.dry; package de.steamwar.bausystem.region.dynamic.special.dry;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
import de.steamwar.bausystem.region.RegionType; import de.steamwar.bausystem.region.RegionType;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.modes.AreaTile;
import de.steamwar.bausystem.region.dynamic.modes.DisplayRegionData;
import de.steamwar.bausystem.region.dynamic.special.SpecialArea; import de.steamwar.bausystem.region.dynamic.special.SpecialArea;
import de.steamwar.bausystem.region.dynamic.special.SpecialRegionData; import de.steamwar.bausystem.region.dynamic.special.SpecialRegionData;
import de.steamwar.sql.GameModeConfig; import de.steamwar.sql.GameModeConfig;
@@ -31,6 +35,7 @@ import lombok.NonNull;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
import static de.steamwar.bausystem.region.dynamic.special.SpecialArea.SPECIAL_PATH_DIR; import static de.steamwar.bausystem.region.dynamic.special.SpecialArea.SPECIAL_PATH_DIR;
@@ -48,12 +53,25 @@ public class DryRegion extends DynamicRegion {
private final SpecialArea area; private final SpecialArea area;
public DryRegion(UUID id, int minX, int minZ) { public DryRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
}
public DryRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private DryRegion(UUID id, Tile tile) {
super(id, null);
area = new SpecialArea(tile, this, DRY); area = new SpecialArea(tile, this, DRY);
regionData = new SpecialRegionData(this); regionData = new SpecialRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override
@@ -19,17 +19,21 @@
package de.steamwar.bausystem.region.dynamic.special.wet; package de.steamwar.bausystem.region.dynamic.special.wet;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import de.steamwar.bausystem.region.RegionBackups; import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.RegionData; import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionHistory;
import de.steamwar.bausystem.region.RegionType; import de.steamwar.bausystem.region.RegionType;
import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.*;
import de.steamwar.bausystem.region.dynamic.special.SpecialArea; import de.steamwar.bausystem.region.dynamic.special.SpecialArea;
import de.steamwar.bausystem.region.dynamic.special.SpecialRegionData;
import de.steamwar.sql.GameModeConfig; import de.steamwar.sql.GameModeConfig;
import lombok.NonNull; import lombok.NonNull;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
import static de.steamwar.bausystem.region.dynamic.special.SpecialArea.SPECIAL_PATH_DIR; import static de.steamwar.bausystem.region.dynamic.special.SpecialArea.SPECIAL_PATH_DIR;
@@ -47,12 +51,25 @@ public class WetRegion extends DynamicRegion {
private final SpecialArea area; private final SpecialArea area;
public WetRegion(UUID id, int minX, int minZ) { public WetRegion(Tile tile) {
super(id, minX, minZ); this(UUID.randomUUID(), tile);
Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); finishCreate();
}
public WetRegion(UUID id, JsonArray tileData) {
this(id, readTile(tileData));
finishLoad();
}
private WetRegion(UUID id, Tile tile) {
super(id, null);
area = new SpecialArea(tile, this, WET); area = new SpecialArea(tile, this, WET);
regionData = new WetRegionData(this); regionData = new WetRegionData(this);
finishInit(); }
@Override
public void writeData(JsonWriter writer) throws IOException {
writeTile(writer, area.getTile());
} }
@Override @Override