From 9c479422376ba5078402543e0ae793cc1f52ae21 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Mon, 23 Mar 2026 12:19:10 +0100 Subject: [PATCH] Fix constructors --- .../region/dynamic/MultiTileArea.java | 17 +++++++++-- .../region/dynamic/modes/AreaTile.java | 10 +++---- .../microwargear_7/MiWG7DisplayRegion.java | 28 +++++++++++++---- .../modes/microwargear_7/MiWG7PlotRegion.java | 26 ++++++++++++---- .../modes/miniwargear/MWGDisplayRegion.java | 28 +++++++++++++---- .../modes/miniwargear/MWGPlotRegion.java | 30 ++++++++++++++----- .../modes/wargear_45/WG45DisplayRegion.java | 28 +++++++++++++---- .../modes/wargear_45/WG45PlotRegion.java | 28 ++++++++++++----- .../modes/warship_175/WS175DisplayRegion.java | 28 +++++++++++++---- .../modes/warship_175/WS175PlotRegion.java | 26 ++++++++++++---- .../modes/warship_230/WS230DisplayRegion.java | 28 +++++++++++++---- .../modes/warship_230/WS230PlotRegion.java | 26 ++++++++++++---- .../dynamic/path_special/PathRegion.java | 5 ++-- .../region/dynamic/special/SpecialArea.java | 5 ++-- .../region/dynamic/special/dry/DryRegion.java | 26 +++++++++++++--- .../region/dynamic/special/wet/WetRegion.java | 25 +++++++++++++--- 16 files changed, 286 insertions(+), 78 deletions(-) diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/MultiTileArea.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/MultiTileArea.java index 40fe7763..21709b68 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/MultiTileArea.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/MultiTileArea.java @@ -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 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) { tiles.remove(tile); return tiles.isEmpty(); diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/AreaTile.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/AreaTile.java index 0248a0a6..1df5384f 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/AreaTile.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/AreaTile.java @@ -25,23 +25,23 @@ import de.steamwar.bausystem.region.dynamic.PasteUtils; import de.steamwar.bausystem.region.dynamic.Tile; import de.steamwar.bausystem.region.dynamic.VariantSelector; import de.steamwar.bausystem.utils.PasteBuilder; +import lombok.Getter; import lombok.NonNull; import org.bukkit.Location; -import org.jetbrains.annotations.Nullable; import java.io.File; -import java.util.UUID; public class AreaTile implements Region.Area { - private final UUID regionIdentifier; + @Getter + private final Tile tile; private final Point minPoint; private final Point maxPoint; private final Point copyPoint; private final VariantSelector selector; - public AreaTile(Tile tile, int tileX, int tileZ, Region region, VariantSelector selector) { - regionIdentifier = region.getID(); + public AreaTile(Tile tile, int tileX, int tileZ, VariantSelector selector) { + this.tile = tile; minPoint = Point.fromLocation(tile.getMinLocation()).setY(WORLD_MIN_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; diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7DisplayRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7DisplayRegion.java index 60c5fb88..62a99509 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7DisplayRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7DisplayRegion.java @@ -19,6 +19,8 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; @@ -32,6 +34,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @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 VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); - private final Area area; + private final AreaTile area; - public MiWG7DisplayRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, 1, 1, this, SELECTOR); + public MiWG7DisplayRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7PlotRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7PlotRegion.java index d9f49ba4..e7be39f9 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7PlotRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/microwargear_7/MiWG7PlotRegion.java @@ -19,6 +19,8 @@ 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.dynamic.*; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; @@ -33,6 +35,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @RegionConstructorData( @@ -58,10 +61,19 @@ public class MiWG7PlotRegion extends DynamicRegion { private final RegionHistory history; private final RegionBackups backups; - public MiWG7PlotRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); + public MiWG7PlotRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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 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(); @@ -70,7 +82,11 @@ public class MiWG7PlotRegion extends DynamicRegion { regionData = new PlotRegionData(this); history = new RegionHistory.Impl(10); backups = new PlotRegionBackups(this, PlotRegionData::new); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGDisplayRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGDisplayRegion.java index 6db37b59..e2dc3a1b 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGDisplayRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGDisplayRegion.java @@ -19,6 +19,8 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; @@ -32,6 +34,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @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 VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); - private final Area area; + private final AreaTile area; - public MWGDisplayRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); + public MWGDisplayRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGPlotRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGPlotRegion.java index e2989dc2..d805d425 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGPlotRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/miniwargear/MWGPlotRegion.java @@ -19,6 +19,8 @@ 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.dynamic.*; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; @@ -33,6 +35,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @RegionConstructorData( @@ -58,19 +61,32 @@ public class MWGPlotRegion extends DynamicRegion { private final RegionHistory history; private final RegionBackups backups; - public MWGPlotRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - history = new RegionHistory.Impl(10); - 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(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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 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(); southArea = pair.getValue(); 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 diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45DisplayRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45DisplayRegion.java index c069b642..242cc14b 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45DisplayRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45DisplayRegion.java @@ -19,6 +19,8 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; @@ -32,6 +34,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @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 VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); - private final Area area; + private final AreaTile area; - public WG45DisplayRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); + public WG45DisplayRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45PlotRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45PlotRegion.java index da663d7e..7f90be46 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45PlotRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/wargear_45/WG45PlotRegion.java @@ -19,14 +19,14 @@ 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.dynamic.*; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; import de.steamwar.bausystem.region.dynamic.modes.AreaTile; import de.steamwar.bausystem.region.dynamic.modes.PlotRegionBackups; 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.shared.Pair; import de.steamwar.sql.GameModeConfig; @@ -35,6 +35,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @RegionConstructorData( @@ -60,10 +61,19 @@ public class WG45PlotRegion extends DynamicRegion { private final RegionHistory history; private final RegionBackups backups; - public WG45PlotRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); + public WG45PlotRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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 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(); @@ -72,7 +82,11 @@ public class WG45PlotRegion extends DynamicRegion { regionData = new PlotRegionData(this); history = new RegionHistory.Impl(10); backups = new PlotRegionBackups(this, PlotRegionData::new); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175DisplayRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175DisplayRegion.java index 278ea41c..d5c5c7b0 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175DisplayRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175DisplayRegion.java @@ -19,6 +19,8 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; @@ -32,6 +34,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @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 VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); - private final Area area; + private final AreaTile area; - public WS175DisplayRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); + public WS175DisplayRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175PlotRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175PlotRegion.java index cb02bd35..55de90a4 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175PlotRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_175/WS175PlotRegion.java @@ -19,6 +19,8 @@ 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.dynamic.*; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; @@ -33,6 +35,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @RegionConstructorData( @@ -58,10 +61,19 @@ public class WS175PlotRegion extends DynamicRegion { private final RegionHistory history; private final RegionBackups backups; - public WS175PlotRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); + public WS175PlotRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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 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(); @@ -70,7 +82,11 @@ public class WS175PlotRegion extends DynamicRegion { regionData = new PlotRegionData(this); history = new RegionHistory.Impl(10); backups = new PlotRegionBackups(this, PlotRegionData::new); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230DisplayRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230DisplayRegion.java index f0e3f436..05a93f45 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230DisplayRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230DisplayRegion.java @@ -19,6 +19,8 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; @@ -32,6 +34,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @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 VariantSelector SELECTOR = VariantSelector.Get(DIRECTORY); - private final Area area; + private final AreaTile area; - public WS230DisplayRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, SELECTOR); + public WS230DisplayRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230PlotRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230PlotRegion.java index f6dc654b..078a975c 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230PlotRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/modes/warship_230/WS230PlotRegion.java @@ -19,6 +19,8 @@ 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.dynamic.*; import de.steamwar.bausystem.region.dynamic.modes.AreaBlock; @@ -33,6 +35,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; @RegionConstructorData( @@ -58,10 +61,19 @@ public class WS230PlotRegion extends DynamicRegion { private final RegionHistory history; private final RegionBackups backups; - public WS230PlotRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); - area = new AreaTile(tile, TILE_X, TILE_Z, this, REGION); + public WS230PlotRegion(Tile tile) { + this(UUID.randomUUID(), tile); + finishCreate(); + } + + 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 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(); @@ -70,7 +82,11 @@ public class WS230PlotRegion extends DynamicRegion { regionData = new PlotRegionData(this); history = new RegionHistory.Impl(10); backups = new PlotRegionBackups(this, PlotRegionData::new); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path_special/PathRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path_special/PathRegion.java index 6e3b45ad..afd2a754 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path_special/PathRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/path_special/PathRegion.java @@ -57,8 +57,9 @@ public class PathRegion extends DynamicRegion { } public void add(Tile tile) { - area.addTile(tile); - save(); + if (area.addTile(tile)) { + save(); + } } public void update(Tile toUpdate, NeighbourDirection toDirection) { diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java index 43ef3154..ef72e4c4 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/SpecialArea.java @@ -28,6 +28,7 @@ import de.steamwar.bausystem.region.dynamic.PasteUtils; import de.steamwar.bausystem.region.dynamic.Tile; import de.steamwar.bausystem.region.dynamic.VariantSelector; import de.steamwar.bausystem.utils.PasteBuilder; +import lombok.Getter; import lombok.NonNull; import org.bukkit.Bukkit; 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"); private final DynamicRegion region; - private final UUID regionIdentifier; + + @Getter private final Tile tile; private final Point minPoint; private final Point maxPoint; @@ -52,7 +54,6 @@ public class SpecialArea implements Region.Area { public SpecialArea(Tile tile, DynamicRegion region, VariantSelector resetFiles) { this.region = region; - this.regionIdentifier = region.getID(); this.tile = tile; minPoint = Point.fromLocation(tile.getMinLocation()).setY(WORLD_MIN_Y); diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/dry/DryRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/dry/DryRegion.java index 70843e36..17b97a92 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/dry/DryRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/dry/DryRegion.java @@ -19,11 +19,15 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionType; 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.SpecialRegionData; import de.steamwar.sql.GameModeConfig; @@ -31,6 +35,7 @@ import lombok.NonNull; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; 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; - public DryRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); + public DryRegion(Tile tile) { + this(UUID.randomUUID(), tile); + 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); regionData = new SpecialRegionData(this); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/wet/WetRegion.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/wet/WetRegion.java index 70c031d2..9977e9dd 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/wet/WetRegion.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/special/wet/WetRegion.java @@ -19,17 +19,21 @@ 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.RegionData; import de.steamwar.bausystem.region.RegionHistory; import de.steamwar.bausystem.region.RegionType; import de.steamwar.bausystem.region.dynamic.*; import de.steamwar.bausystem.region.dynamic.special.SpecialArea; +import de.steamwar.bausystem.region.dynamic.special.SpecialRegionData; import de.steamwar.sql.GameModeConfig; import lombok.NonNull; import org.bukkit.Material; import java.io.File; +import java.io.IOException; import java.util.UUID; 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; - public WetRegion(UUID id, int minX, int minZ) { - super(id, minX, minZ); - Tile tile = Tile.fromXZ(minX, minZ).orElseThrow(); + public WetRegion(Tile tile) { + this(UUID.randomUUID(), tile); + 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); regionData = new WetRegionData(this); - finishInit(); + } + + @Override + public void writeData(JsonWriter writer) throws IOException { + writeTile(writer, area.getTile()); } @Override