forked from SteamWar/SteamWar
Improve VariantSelector for easier version upgrades (if needed)
This commit is contained in:
+20
-8
@@ -25,13 +25,14 @@ import lombok.NonNull;
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class VariantSelector {
|
||||
|
||||
public static final int BaseNodeId = 179925;
|
||||
|
||||
private static final SchematicNode BaseNode = Objects.requireNonNull(SchematicNode.byId(BaseNodeId));
|
||||
|
||||
private static final Random RANDOM = new Random();
|
||||
public static final VariantSelector EMPTY = new VariantSelector() {
|
||||
@Override
|
||||
@@ -97,8 +98,9 @@ public abstract class VariantSelector {
|
||||
};
|
||||
}
|
||||
|
||||
public static VariantSelector Folder(int folderId) {
|
||||
SchematicNode[] schematics = SchematicNode.getSchematicNodeInNode(folderId).toArray(SchematicNode[]::new);
|
||||
public static VariantSelector Folder(String... path) {
|
||||
SchematicNode folder = folder(path);
|
||||
SchematicNode[] schematics = SchematicNode.getSchematicNodeInNode(folder.getId()).toArray(SchematicNode[]::new);
|
||||
if (schematics.length == 0) return EMPTY;
|
||||
if (schematics.length == 1) {
|
||||
final SchematicNode node = schematics[0];
|
||||
@@ -119,8 +121,8 @@ public abstract class VariantSelector {
|
||||
};
|
||||
}
|
||||
|
||||
public static VariantSelector Schematic(int schematicId) {
|
||||
SchematicNode schematic = SchematicNode.getSchematicNode(schematicId);
|
||||
public static VariantSelector Schematic(String... path) {
|
||||
SchematicNode schematic = folder(path);
|
||||
return new VariantSelector() {
|
||||
@Override
|
||||
public Optional<SchematicNode> select() {
|
||||
@@ -128,4 +130,14 @@ public abstract class VariantSelector {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static SchematicNode folder(String[] path) {
|
||||
SchematicNode current = BaseNode;
|
||||
for (int i = 0; i < path.length; i++) {
|
||||
SchematicNode node = SchematicNode.getSchematicNode(current.getId(), path[i]);
|
||||
if (node == null) throw new NullPointerException("Path " + path[i] + " not found in " + current.getId());
|
||||
current = node;
|
||||
}
|
||||
return current;
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -48,21 +48,21 @@ public class PathArea extends Region.Area {
|
||||
private static final File PATH_DIR = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections/path");
|
||||
private static final File FALLBACK_SCHEM = new File(PATH_DIR, "Fallback.schem");
|
||||
|
||||
private static final VariantSelector CENTER = VariantSelector.Folder(179927);
|
||||
private static final VariantSelector CENTER = VariantSelector.Folder("Path", "Center");
|
||||
|
||||
private static final VariantSelector SIDE_VOID = VariantSelector.Folder(179930);
|
||||
private static final VariantSelector CORNER_INNER_VOID = VariantSelector.Folder(179937);
|
||||
private static final VariantSelector CORNER_OUTER_VOID = VariantSelector.Folder(179942);
|
||||
private static final VariantSelector SIDE_VOID = VariantSelector.Folder("Path", "Edge", "Void");
|
||||
private static final VariantSelector CORNER_INNER_VOID = VariantSelector.Folder("Path", "Corner", "Inner", "Void");
|
||||
private static final VariantSelector CORNER_OUTER_VOID = VariantSelector.Folder("Path", "Corner", "Outer", "Void");
|
||||
|
||||
private static final VariantSelector SIDE_WATER = VariantSelector.Folder(179931);
|
||||
private static final VariantSelector CORNER_INNER_WATER = VariantSelector.Folder(179938);
|
||||
private static final VariantSelector CORNER_OUTER_WATER = VariantSelector.Folder(179943);
|
||||
private static final VariantSelector SIDE_WATER = VariantSelector.Folder("Path", "Edge", "Water");
|
||||
private static final VariantSelector CORNER_INNER_WATER = VariantSelector.Folder("Path", "Corner", "Inner", "Water");
|
||||
private static final VariantSelector CORNER_OUTER_WATER = VariantSelector.Folder("Path", "Corner", "Outer", "Water");
|
||||
|
||||
private static final VariantSelector SIDE_CLOSED = VariantSelector.Get(new File(PATH_DIR, "side/closed"));
|
||||
private static final VariantSelector CORNER_INNER_CLOSED = VariantSelector.Get(new File(PATH_DIR, "cinner/closed"));
|
||||
private static final VariantSelector CORNER_OUTER_CLOSED = VariantSelector.Get(new File(PATH_DIR, "couter/closed"));
|
||||
|
||||
private static final VariantSelector GARDEN = VariantSelector.Folder(180045);
|
||||
private static final VariantSelector GARDEN = VariantSelector.Folder("Path", "Garden");
|
||||
private static final VariantSelector SIDE_GARDEN = VariantSelector.Get(new File(PATH_DIR, "side/garden"));
|
||||
private static final VariantSelector SIDE_GARDEN_CONNECTED = VariantSelector.Get(new File(PATH_DIR, "side/garden_connected"));
|
||||
private static final VariantSelector CORNER_INNER_GARDEN = VariantSelector.Get(new File(PATH_DIR, "cinner/garden"));
|
||||
|
||||
+6
-6
@@ -34,12 +34,12 @@ import java.util.List;
|
||||
|
||||
public class SpawnArea extends Region.Area {
|
||||
|
||||
private static final VariantSelector SPAWN_BIG = VariantSelector.Schematic(179980);
|
||||
private static final VariantSelector SPAWN_LITTLE_ZZ = VariantSelector.Schematic(180022);
|
||||
private static final VariantSelector SPAWN_LITTLE_NZ = VariantSelector.Schematic(180024);
|
||||
private static final VariantSelector SPAWN_LITTLE_PZ = VariantSelector.Schematic(180025);
|
||||
private static final VariantSelector SPAWN_LITTLE_ZN = VariantSelector.Schematic(180023);
|
||||
private static final VariantSelector SPAWN_LITTLE_ZP = VariantSelector.Schematic(180021);
|
||||
private static final VariantSelector SPAWN_BIG = VariantSelector.Schematic("Spawn", "Big");
|
||||
private static final VariantSelector SPAWN_LITTLE_ZZ = VariantSelector.Schematic("Spawn", "Little_ZZ");
|
||||
private static final VariantSelector SPAWN_LITTLE_NZ = VariantSelector.Schematic("Spawn", "Little_NZ");
|
||||
private static final VariantSelector SPAWN_LITTLE_PZ = VariantSelector.Schematic("Spawn", "Little_PZ");
|
||||
private static final VariantSelector SPAWN_LITTLE_ZN = VariantSelector.Schematic("Spawn", "Little_ZN");
|
||||
private static final VariantSelector SPAWN_LITTLE_ZP = VariantSelector.Schematic("Spawn", "Little_ZP");
|
||||
|
||||
private final Tile tile;
|
||||
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ public class DryRegion extends DynamicRegion {
|
||||
protected static final int TILE_X = 1;
|
||||
protected static final int TILE_Z = 1;
|
||||
|
||||
private static final VariantSelector DRY = VariantSelector.Folder(180028);
|
||||
private static final VariantSelector DRY = VariantSelector.Folder("Dry");
|
||||
|
||||
private final SpecialArea area;
|
||||
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ public class WetRegion extends DynamicRegion {
|
||||
protected static final int TILE_X = 1;
|
||||
protected static final int TILE_Z = 1;
|
||||
|
||||
private static final VariantSelector WET = VariantSelector.Folder(180026);
|
||||
private static final VariantSelector WET = VariantSelector.Folder("Wet");
|
||||
|
||||
private final SpecialArea area;
|
||||
|
||||
|
||||
@@ -288,6 +288,12 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
|
||||
find { (SchematicNodeTable.owner eq owner) and (SchematicNodeTable.name eq name) and (SchematicNodeTable.parent eq parent) }.firstOrNull()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getSchematicNode(parent: Int, name: String) =
|
||||
useDb {
|
||||
find { (SchematicNodeTable.parent eq parent) and (SchematicNodeTable.name eq name) }.firstOrNull()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getSchematicNode(owner: Int, name: String, parent: SchematicNode) =
|
||||
getSchematicNode(owner, name, parent.nodeId)
|
||||
|
||||
Reference in New Issue
Block a user