forked from SteamWar/SteamWar
Improve reading/writing Regions
Improve DynamicRegion constructors
This commit is contained in:
+3
-2
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"region_identifier": "SpawnRegion",
|
"region_identifier": "SpawnRegion",
|
||||||
"tile_x": 0,
|
"tiles": [
|
||||||
"tile_z": 0
|
{ "tile_x": 0, "tile_z": 0 }
|
||||||
|
]
|
||||||
}
|
}
|
||||||
+1
-1
@@ -306,7 +306,7 @@ public class DynamicRegionVisualizer implements SWPlayer.Component, Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void place() {
|
private void place() {
|
||||||
DynamicRegion dynamicRegion = DynamicRegionRepository.constructRegion(regionType, UUID.randomUUID(), sourceTile.getMinX(), sourceTile.getMinZ());
|
DynamicRegion dynamicRegion = DynamicRegionRepository.constructRegion(regionType, sourceTile);
|
||||||
if (dynamicRegion == null) {
|
if (dynamicRegion == null) {
|
||||||
// TODO: Give error to user
|
// TODO: Give error to user
|
||||||
return;
|
return;
|
||||||
|
|||||||
+32
-9
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.region.dynamic;
|
package de.steamwar.bausystem.region.dynamic;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.stream.JsonWriter;
|
||||||
import de.steamwar.bausystem.region.DynamicRegionSystem;
|
import de.steamwar.bausystem.region.DynamicRegionSystem;
|
||||||
import de.steamwar.bausystem.region.Point;
|
import de.steamwar.bausystem.region.Point;
|
||||||
import de.steamwar.bausystem.region.Region;
|
import de.steamwar.bausystem.region.Region;
|
||||||
@@ -28,6 +30,7 @@ import de.steamwar.bausystem.shared.Pair;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -36,26 +39,46 @@ import java.util.UUID;
|
|||||||
public abstract class DynamicRegion implements Region {
|
public abstract class DynamicRegion implements Region {
|
||||||
|
|
||||||
protected final UUID id;
|
protected final UUID id;
|
||||||
protected final int minX;
|
|
||||||
protected final int minZ;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
protected RegionData regionData = null;
|
protected RegionData regionData = null;
|
||||||
|
|
||||||
protected DynamicRegion(UUID id, int minX, int minZ) {
|
/**
|
||||||
this.id = id;
|
* This Constructor should be used if a Region is placed newly onto the world!
|
||||||
this.minX = minX;
|
*
|
||||||
this.minZ = minZ;
|
* @param tile this parameter is never used but forces the implementor to have it as a parameter
|
||||||
|
*/
|
||||||
|
protected DynamicRegion(Tile tile) {
|
||||||
|
this.id = UUID.randomUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method must be called from the super constructor in a way that everything is already initialized.
|
* This constructor is used for loading the Region from a file
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @param tileData this parameter is never used but forces the implementor to have it as a parameter
|
||||||
*/
|
*/
|
||||||
protected final void finishInit() {
|
protected DynamicRegion(UUID id, JsonArray tileData) {
|
||||||
DynamicRegionSystem.INSTANCE.add(this);
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should be called when a Region is created and needs to be saved afterward
|
||||||
|
*/
|
||||||
|
protected final void finishCreate() {
|
||||||
|
finishLoad();
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should be called when a Region is loaded from file!
|
||||||
|
*/
|
||||||
|
protected final void finishLoad() {
|
||||||
|
DynamicRegionSystem.INSTANCE.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void writeTileData(JsonWriter writer) throws IOException;
|
||||||
|
|
||||||
public final void updateNeighbours() {
|
public final void updateNeighbours() {
|
||||||
List<Pair<PathRegion, NeighbourDirection>> list = DynamicRegionSystem.INSTANCE.getNeighbours(this)
|
List<Pair<PathRegion, NeighbourDirection>> list = DynamicRegionSystem.INSTANCE.getNeighbours(this)
|
||||||
.filter(data -> data.getKey() instanceof PathRegion)
|
.filter(data -> data.getKey() instanceof PathRegion)
|
||||||
|
|||||||
+41
-28
@@ -19,10 +19,7 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.region.dynamic;
|
package de.steamwar.bausystem.region.dynamic;
|
||||||
|
|
||||||
import com.google.gson.JsonIOException;
|
import com.google.gson.*;
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonParser;
|
|
||||||
import com.google.gson.JsonSyntaxException;
|
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import de.steamwar.bausystem.region.*;
|
import de.steamwar.bausystem.region.*;
|
||||||
import de.steamwar.bausystem.region.dynamic.path.PathRegion;
|
import de.steamwar.bausystem.region.dynamic.path.PathRegion;
|
||||||
@@ -31,7 +28,6 @@ import lombok.Cleanup;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
@@ -71,8 +67,11 @@ public class DynamicRegionRepository {
|
|||||||
|
|
||||||
public static final String META_FILE_NAME = "meta.json";
|
public static final String META_FILE_NAME = "meta.json";
|
||||||
public static final String META_FILE_REGION_IDENTIFIER = "region_identifier";
|
public static final String META_FILE_REGION_IDENTIFIER = "region_identifier";
|
||||||
public static final String META_FILE_TILE_X = "tile_x";
|
@Deprecated
|
||||||
public static final String META_FILE_TILE_Z = "tile_z";
|
private static final String META_FILE_TILE_X = "tile_x";
|
||||||
|
@Deprecated
|
||||||
|
private static final String META_FILE_TILE_Z = "tile_z";
|
||||||
|
public static final String META_FILES_TILES = "tiles";
|
||||||
|
|
||||||
public static final String FLAG_FILE_NAME = "flags.json";
|
public static final String FLAG_FILE_NAME = "flags.json";
|
||||||
public static final String BACKUPS_DIR_NAME = "backups";
|
public static final String BACKUPS_DIR_NAME = "backups";
|
||||||
@@ -119,12 +118,8 @@ public class DynamicRegionRepository {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tileX;
|
|
||||||
int tileZ;
|
|
||||||
String identifier;
|
String identifier;
|
||||||
try {
|
try {
|
||||||
tileX = metaData.getAsJsonPrimitive(META_FILE_TILE_X).getAsInt();
|
|
||||||
tileZ = metaData.getAsJsonPrimitive(META_FILE_TILE_Z).getAsInt();
|
|
||||||
identifier = metaData.getAsJsonPrimitive(META_FILE_REGION_IDENTIFIER).getAsString();
|
identifier = metaData.getAsJsonPrimitive(META_FILE_REGION_IDENTIFIER).getAsString();
|
||||||
} catch (ClassCastException | NumberFormatException e) {
|
} catch (ClassCastException | NumberFormatException e) {
|
||||||
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (invalid json)");
|
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (invalid json)");
|
||||||
@@ -138,13 +133,12 @@ public class DynamicRegionRepository {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile tile = Tile.fromTile(tileX, tileZ).orElse(null);
|
JsonArray tileData = metaData.getAsJsonArray(META_FILES_TILES);
|
||||||
if (tile == null) {
|
if (tileData == null) {
|
||||||
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (tile is no longer in bounds)");
|
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (tile is no longer in bounds)");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Location minTileLocation = tile.getMinLocation();
|
constructRegion(regionClass, regionUUID, tileData);
|
||||||
constructRegion(regionClass, regionUUID, minTileLocation.getBlockX(), minTileLocation.getBlockZ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate Garden State for all PathRegions
|
// Calculate Garden State for all PathRegions
|
||||||
@@ -154,17 +148,35 @@ public class DynamicRegionRepository {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DynamicRegion constructRegion(Class<? extends DynamicRegion> clazz, UUID uuid, int minX, int minZ) {
|
public static DynamicRegion constructRegion(Class<? extends DynamicRegion> clazz, Tile tile) {
|
||||||
Constructor<? extends DynamicRegion> regionConstructor;
|
Constructor<? extends DynamicRegion> regionConstructor;
|
||||||
try {
|
try {
|
||||||
regionConstructor = clazz.getConstructor(UUID.class, int.class, int.class);
|
regionConstructor = clazz.getConstructor(Tile.class);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to create region (region constructor not found)");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return regionConstructor.newInstance(tile);
|
||||||
|
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException |
|
||||||
|
InvocationTargetException e) {
|
||||||
|
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to create region (invalid data)");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DynamicRegion constructRegion(Class<? extends DynamicRegion> clazz, UUID uuid, JsonArray tileData) {
|
||||||
|
Constructor<? extends DynamicRegion> regionConstructor;
|
||||||
|
try {
|
||||||
|
regionConstructor = clazz.getConstructor(UUID.class, JsonArray.class);
|
||||||
} catch (NoSuchMethodException e) {
|
} catch (NoSuchMethodException e) {
|
||||||
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (region constructor not found)");
|
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (region constructor not found)");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return regionConstructor.newInstance(uuid, minX, minZ);
|
return regionConstructor.newInstance(uuid, tileData);
|
||||||
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException |
|
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException |
|
||||||
InvocationTargetException e) {
|
InvocationTargetException e) {
|
||||||
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (invalid data)");
|
RegionSystem.LOGGER.log(Level.SEVERE, "Failed to read region metadata file (invalid data)");
|
||||||
@@ -236,17 +248,18 @@ public class DynamicRegionRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void saveRegion(Region region) {
|
public static void saveRegion(Region region) {
|
||||||
|
if (!(region.getType().isGlobal() || region instanceof DynamicRegion)) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
File regionDirectory = new File(REGION_DATA_FOLDER, region.getID().toString());
|
File regionDirectory = new File(REGION_DATA_FOLDER, region.getID().toString());
|
||||||
if (!regionDirectory.exists()) {
|
if (!regionDirectory.exists()) {
|
||||||
regionDirectory.mkdir();
|
regionDirectory.mkdir();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!region.getType().isGlobal()) {
|
if (region instanceof DynamicRegion dynamicRegion) {
|
||||||
RegionConstructorData constructorData = DynamicRegionSystem.constructorDataMap.get(region.getClass());
|
RegionConstructorData constructorData = DynamicRegionSystem.constructorDataMap.get(region.getClass());
|
||||||
Point point = region.getArea().getMinPoint(false);
|
writeMetaFile(regionDirectory, constructorData, dynamicRegion);
|
||||||
Tile tile = Tile.fromPoint(point).get();
|
|
||||||
|
|
||||||
writeMetaFile(regionDirectory, constructorData, tile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writeFlagsFile(regionDirectory, region.getRegionData());
|
writeFlagsFile(regionDirectory, region.getRegionData());
|
||||||
@@ -261,17 +274,17 @@ public class DynamicRegionRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private static void writeMetaFile(File regionDirectory, RegionConstructorData constructorData, Tile tile) {
|
private static void writeMetaFile(File regionDirectory, RegionConstructorData constructorData, DynamicRegion dynamicRegion) {
|
||||||
@Cleanup
|
@Cleanup
|
||||||
JsonWriter jsonWriter = new JsonWriter(new FileWriter(new File(regionDirectory, META_FILE_NAME)));
|
JsonWriter jsonWriter = new JsonWriter(new FileWriter(new File(regionDirectory, META_FILE_NAME)));
|
||||||
jsonWriter.setIndent(" ");
|
jsonWriter.setIndent(" ");
|
||||||
jsonWriter.beginObject();
|
jsonWriter.beginObject();
|
||||||
jsonWriter.name(META_FILE_REGION_IDENTIFIER);
|
jsonWriter.name(META_FILE_REGION_IDENTIFIER);
|
||||||
jsonWriter.value(constructorData.identifier());
|
jsonWriter.value(constructorData.identifier());
|
||||||
jsonWriter.name(META_FILE_TILE_X);
|
jsonWriter.name(META_FILES_TILES);
|
||||||
jsonWriter.value(tile.getTileX());
|
jsonWriter.beginArray();
|
||||||
jsonWriter.name(META_FILE_TILE_Z);
|
dynamicRegion.writeTileData(jsonWriter);
|
||||||
jsonWriter.value(tile.getTileZ());
|
jsonWriter.endArray();
|
||||||
jsonWriter.endObject();
|
jsonWriter.endObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+62
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2026 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.region.dynamic;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class TileUtils {
|
||||||
|
|
||||||
|
private static Tile readTile(JsonObject tileData, String prefix) {
|
||||||
|
JsonPrimitive xData = tileData.getAsJsonPrimitive(prefix + "_x");
|
||||||
|
JsonPrimitive zData = tileData.getAsJsonPrimitive(prefix + "_z");
|
||||||
|
if (xData == null || zData == null) return null;
|
||||||
|
return Tile.fromTile(xData.getAsInt(), zData.getAsInt())
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Tile readTile(JsonArray tileData) {
|
||||||
|
if (tileData.size() != 1) return null;
|
||||||
|
try {
|
||||||
|
return readTile(tileData.get(0).getAsJsonObject(), "tile");
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeTile(JsonWriter writer, Tile tile, String prefix) throws IOException {
|
||||||
|
writer.name(prefix + "_x");
|
||||||
|
writer.value(tile.getTileX());
|
||||||
|
writer.name(prefix + "_z");
|
||||||
|
writer.value(tile.getTileZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeTile(JsonWriter writer, Tile tile) throws IOException {
|
||||||
|
writer.beginObject();
|
||||||
|
writeTile(writer, tile, "tile");
|
||||||
|
writer.endObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
+12
-10
@@ -24,14 +24,17 @@ import lombok.NonNull;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.Month;
|
import java.time.Month;
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public abstract class VariantSelector {
|
public abstract class VariantSelector {
|
||||||
|
|
||||||
private static final Random RANDOM = new Random();
|
private static final Random RANDOM = new Random();
|
||||||
public static final VariantSelector EMPTY = new VariantSelector() {
|
public static final VariantSelector EMPTY = new VariantSelector() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<File> select(UUID regionID, int drift) {
|
public Optional<File> select() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -39,15 +42,15 @@ public abstract class VariantSelector {
|
|||||||
private VariantSelector() {
|
private VariantSelector() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract Optional<File> select(UUID regionID, int drift);
|
public abstract Optional<File> select();
|
||||||
|
|
||||||
public final VariantSelector or(VariantSelector other) {
|
public final VariantSelector or(VariantSelector other) {
|
||||||
if (this == EMPTY) return other;
|
if (this == EMPTY) return other;
|
||||||
VariantSelector self = this;
|
VariantSelector self = this;
|
||||||
return new VariantSelector() {
|
return new VariantSelector() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<File> select(UUID regionID, int drift) {
|
public Optional<File> select() {
|
||||||
return self.select(regionID, drift).or(() -> other.select(regionID, drift));
|
return self.select().or(() -> other.select());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -57,10 +60,10 @@ public abstract class VariantSelector {
|
|||||||
VariantSelector self = this;
|
VariantSelector self = this;
|
||||||
return new VariantSelector() {
|
return new VariantSelector() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<File> select(UUID regionID, int drift) {
|
public Optional<File> select() {
|
||||||
LocalDate date = LocalDate.now();
|
LocalDate date = LocalDate.now();
|
||||||
if (date.getDayOfMonth() == day && date.getMonth() == month) {
|
if (date.getDayOfMonth() == day && date.getMonth() == month) {
|
||||||
return self.select(regionID, drift);
|
return self.select();
|
||||||
} else {
|
} else {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
@@ -75,7 +78,7 @@ public abstract class VariantSelector {
|
|||||||
final File file = files[0];
|
final File file = files[0];
|
||||||
return new VariantSelector() {
|
return new VariantSelector() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<File> select(UUID regionID, int drift) {
|
public Optional<File> select() {
|
||||||
return Optional.of(file);
|
return Optional.of(file);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -85,8 +88,7 @@ public abstract class VariantSelector {
|
|||||||
final int filesCount = files.length;
|
final int filesCount = files.length;
|
||||||
return new VariantSelector() {
|
return new VariantSelector() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<File> select(UUID regionID, int drift) {
|
public Optional<File> select() {
|
||||||
RANDOM.setSeed(regionID.getLeastSignificantBits() ^ regionID.getMostSignificantBits() ^ drift);
|
|
||||||
return Optional.of(files[RANDOM.nextInt(filesCount)]);
|
return Optional.of(files[RANDOM.nextInt(filesCount)]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-1
@@ -162,7 +162,7 @@ public class AreaBlock implements Region.Area {
|
|||||||
@Override
|
@Override
|
||||||
public void place(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().orElse(null)))
|
||||||
.pastePoint(copyPoint)
|
.pastePoint(copyPoint)
|
||||||
.run();
|
.run();
|
||||||
region.getHistory()
|
region.getHistory()
|
||||||
|
|||||||
+6
-7
@@ -25,23 +25,22 @@ 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.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;
|
||||||
@@ -67,7 +66,7 @@ public class AreaTile implements Region.Area {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||||
File resetFile = selector.select(regionIdentifier, 0).orElse(null);
|
File resetFile = selector.select().orElse(null);
|
||||||
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
|
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -104,8 +104,6 @@ public class PlotRegionBackups implements RegionBackups {
|
|||||||
|
|
||||||
private final class BackupImpl extends Backup {
|
private final class BackupImpl extends Backup {
|
||||||
|
|
||||||
private static final String SCHEM_FILE = "backup.schem";
|
|
||||||
|
|
||||||
private final DynamicRegion region;
|
private final DynamicRegion region;
|
||||||
|
|
||||||
public BackupImpl(@NonNull BackupType type, DynamicRegion region) {
|
public BackupImpl(@NonNull BackupType type, DynamicRegion region) {
|
||||||
@@ -118,7 +116,7 @@ public class PlotRegionBackups implements RegionBackups {
|
|||||||
|
|
||||||
DynamicRegionRepository.saveBackup(region, this);
|
DynamicRegionRepository.saveBackup(region, this);
|
||||||
Clipboard clipboard = region.getArea().copy(false);
|
Clipboard clipboard = region.getArea().copy(false);
|
||||||
try (ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(new File(backupDirectory, SCHEM_FILE)))) {
|
try (ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(new File(backupDirectory, DynamicRegionRepository.BACKUP_FILE_NAME)))) {
|
||||||
writer.write(clipboard);
|
writer.write(clipboard);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
|
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
|
||||||
@@ -133,7 +131,7 @@ public class PlotRegionBackups implements RegionBackups {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean load() {
|
public boolean load() {
|
||||||
File file = new File(DynamicRegionRepository.getBackupDirectory(region, this), SCHEM_FILE);
|
File file = new File(DynamicRegionRepository.getBackupDirectory(region, this), DynamicRegionRepository.BACKUP_FILE_NAME);
|
||||||
if (!file.exists()) return false;
|
if (!file.exists()) return false;
|
||||||
EditSession editSession = PasteUtils.paste(file, region.getArea().getMinPoint(false), 0);
|
EditSession editSession = PasteUtils.paste(file, region.getArea().getMinPoint(false), 0);
|
||||||
if (editSession == null) return false;
|
if (editSession == null) return false;
|
||||||
|
|||||||
+22
-6
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+21
-5
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+22
-6
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+23
-7
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+22
-6
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+21
-7
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+22
-6
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+21
-5
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+22
-6
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+21
-5
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+4
-9
@@ -37,7 +37,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
import static de.steamwar.bausystem.region.RegionType.ConnectionType.*;
|
import static de.steamwar.bausystem.region.RegionType.ConnectionType.*;
|
||||||
@@ -118,20 +117,16 @@ public class PathArea implements Region.Area {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final PathRegion region;
|
private final PathRegion region;
|
||||||
private final UUID regionIdentifier;
|
|
||||||
private final Tile tile;
|
private final Tile tile;
|
||||||
private final Point minPoint;
|
private final Point minPoint;
|
||||||
private final Point maxPoint;
|
private final Point maxPoint;
|
||||||
private final Point copyPoint;
|
|
||||||
|
|
||||||
public PathArea(Tile tile, PathRegion region) {
|
public PathArea(Tile tile, PathRegion region) {
|
||||||
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);
|
||||||
maxPoint = Point.fromLocation(tile.getMaxLocation()).setY(WORLD_MAX_Y);
|
maxPoint = Point.fromLocation(tile.getMaxLocation()).setY(WORLD_MAX_Y);
|
||||||
copyPoint = Point.fromLocation(tile.getCenterLocation());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -177,7 +172,7 @@ public class PathArea implements Region.Area {
|
|||||||
public void reset(PathSide side) {
|
public void reset(PathSide side) {
|
||||||
File resetFile = null;
|
File resetFile = null;
|
||||||
VariantSelector selector = SELECTOR_SIDE.Select(tile, side);
|
VariantSelector selector = SELECTOR_SIDE.Select(tile, side);
|
||||||
if (selector != null) resetFile = selector.select(regionIdentifier, side.ordinal() + side.rotate).orElse(null);
|
if (selector != null) resetFile = selector.select().orElse(null);
|
||||||
if (selector == null || resetFile == null) {
|
if (selector == null || resetFile == null) {
|
||||||
if (!BauSystem.DEV_SERVER) return;
|
if (!BauSystem.DEV_SERVER) return;
|
||||||
resetFile = FALLBACK_SCHEM;
|
resetFile = FALLBACK_SCHEM;
|
||||||
@@ -191,7 +186,7 @@ public class PathArea implements Region.Area {
|
|||||||
Pair<VariantSelector, RotationCorrection> pair = SELECTOR_CORNER.Select(tile, corner);
|
Pair<VariantSelector, RotationCorrection> pair = SELECTOR_CORNER.Select(tile, corner);
|
||||||
VariantSelector selector = pair.getKey();
|
VariantSelector selector = pair.getKey();
|
||||||
RotationCorrection rotationCorrection = pair.getValue();
|
RotationCorrection rotationCorrection = pair.getValue();
|
||||||
if (selector != null) resetFile = selector.select(regionIdentifier, corner.side1.ordinal() * corner.side2.ordinal() + corner.side1.rotate * corner.side2.rotate).orElse(null);
|
if (selector != null) resetFile = selector.select().orElse(null);
|
||||||
if (selector == null || resetFile == null) {
|
if (selector == null || resetFile == null) {
|
||||||
if (!BauSystem.DEV_SERVER) return;
|
if (!BauSystem.DEV_SERVER) return;
|
||||||
resetFile = FALLBACK_SCHEM;
|
resetFile = FALLBACK_SCHEM;
|
||||||
@@ -216,14 +211,14 @@ public class PathArea implements Region.Area {
|
|||||||
@Override
|
@Override
|
||||||
public void place(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().orElse(null);
|
||||||
if (resetFile != null) {
|
if (resetFile != null) {
|
||||||
PasteUtils.paste(resetFile, minPoint, 0);
|
PasteUtils.paste(resetFile, minPoint, 0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
File resetFile = CENTER_NORMAL.select(regionIdentifier, 0).orElse(null);
|
File resetFile = CENTER_NORMAL.select().orElse(null);
|
||||||
if (resetFile != null) {
|
if (resetFile != null) {
|
||||||
PasteUtils.paste(resetFile, minPoint.add(7, 0, 7), 0);
|
PasteUtils.paste(resetFile, minPoint.add(7, 0, 7), 0);
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-4
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.region.dynamic.path;
|
package de.steamwar.bausystem.region.dynamic.path;
|
||||||
|
|
||||||
|
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.sql.GameModeConfig;
|
import de.steamwar.sql.GameModeConfig;
|
||||||
@@ -26,6 +28,7 @@ import lombok.Getter;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@RegionConstructorData(
|
@RegionConstructorData(
|
||||||
@@ -41,15 +44,29 @@ public class PathRegion extends DynamicRegion {
|
|||||||
@Getter
|
@Getter
|
||||||
private final Tile tile;
|
private final Tile tile;
|
||||||
|
|
||||||
public PathRegion(UUID id, int minX, int minZ) {
|
public PathRegion(Tile tile) {
|
||||||
super(id, minX, minZ);
|
this(UUID.randomUUID(), tile);
|
||||||
tile = Tile.fromXZ(minX, minZ).orElseThrow();
|
finishCreate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PathRegion(UUID id, JsonArray tileData) {
|
||||||
|
this(id, TileUtils.readTile(tileData));
|
||||||
|
finishLoad();
|
||||||
|
}
|
||||||
|
|
||||||
|
private PathRegion(UUID id, Tile tile) {
|
||||||
|
super(id, null);
|
||||||
|
this.tile = tile;
|
||||||
area = new PathArea(tile, this);
|
area = new PathArea(tile, this);
|
||||||
regionData = new PathRegionData(this);
|
regionData = new PathRegionData(this);
|
||||||
finishInit();
|
|
||||||
calculateGardenState();
|
calculateGardenState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, tile);
|
||||||
|
}
|
||||||
|
|
||||||
public void update(DynamicRegion updateFrom, NeighbourDirection direction) {
|
public void update(DynamicRegion updateFrom, NeighbourDirection direction) {
|
||||||
for (PathSide side : direction.getSideUpdates()) {
|
for (PathSide side : direction.getSideUpdates()) {
|
||||||
area.reset(side);
|
area.reset(side);
|
||||||
|
|||||||
+4
-3
@@ -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);
|
||||||
@@ -105,7 +106,7 @@ public class SpecialArea implements Region.Area {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
public void place(PasteBuilder pasteBuilder, boolean extension) {
|
||||||
File resetFile = resetFiles.select(regionIdentifier, 0).orElse(null);
|
File resetFile = resetFiles.select().orElse(null);
|
||||||
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
|
if (resetFile != null) PasteUtils.paste(resetFile, minPoint, 0);
|
||||||
resetting = false;
|
resetting = false;
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-4
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+21
-4
@@ -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, TileUtils.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 writeTileData(JsonWriter writer) throws IOException {
|
||||||
|
TileUtils.writeTile(writer, area.getTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user