From 89fb9a8ea281d8c0ed7fd738c4908e850e4ed524 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Thu, 14 Aug 2025 13:35:43 +0200 Subject: [PATCH] restore types in block states --- .../core/nms/container/BlockProperty.java | 77 +++++++++++++++++-- .../iris/core/project/SchemaBuilder.java | 6 +- .../iris/engine/object/IrisBlockData.java | 4 - .../iris/core/nms/v1_20_R1/NMSBinding.java | 2 +- .../iris/core/nms/v1_20_R2/NMSBinding.java | 2 +- .../iris/core/nms/v1_20_R3/NMSBinding.java | 2 +- .../iris/core/nms/v1_20_R4/NMSBinding.java | 2 +- .../iris/core/nms/v1_21_R1/NMSBinding.java | 2 +- .../iris/core/nms/v1_21_R2/NMSBinding.java | 2 +- .../iris/core/nms/v1_21_R3/NMSBinding.java | 2 +- .../iris/core/nms/v1_21_R4/NMSBinding.java | 2 +- .../iris/core/nms/v1_21_R5/NMSBinding.java | 2 +- 12 files changed, 82 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/nms/container/BlockProperty.java b/core/src/main/java/com/volmit/iris/core/nms/container/BlockProperty.java index b3183dd7f..8eaa9721f 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/container/BlockProperty.java +++ b/core/src/main/java/com/volmit/iris/core/nms/container/BlockProperty.java @@ -1,19 +1,82 @@ package com.volmit.iris.core.nms.container; +import com.volmit.iris.util.json.JSONArray; import org.jetbrains.annotations.NotNull; -import java.util.Collection; -import java.util.Set; +import java.util.*; import java.util.function.Function; -import java.util.stream.Collectors; -public record BlockProperty(String name, String defaultValue, Set value) { - public static BlockProperty of(String name, T defaultValue, Collection values, Function nameFunction) { - return new BlockProperty(name, nameFunction.apply(defaultValue), values.stream().map(nameFunction).collect(Collectors.toSet())); +public final class BlockProperty { + private final String name; + private final Class type; + + private final Object defaultValue; + private final Set values; + private final Function nameFunction; + private final Function jsonFunction; + + public > BlockProperty( + String name, + Class type, + T defaultValue, + Collection values, + Function nameFunction + ) { + this.name = name; + this.type = type; + this.defaultValue = defaultValue; + this.values = Collections.unmodifiableSet(new TreeSet<>(values)); + this.nameFunction = (Function) (Object) nameFunction; + jsonFunction = type == Boolean.class || type == Integer.class ? + Function.identity() : + this.nameFunction::apply; } @Override public @NotNull String toString() { - return name + "=" + defaultValue + " [" + String.join(",", value) + "]"; + return name + "=" + nameFunction.apply(defaultValue) + " [" + String.join(",", names()) + "]"; + } + + public String name() { + return name; + } + + public String defaultValue() { + return nameFunction.apply(defaultValue); + } + + public List names() { + return values.stream().map(nameFunction).toList(); + } + + public Object defaultValueAsJson() { + return jsonFunction.apply(defaultValue); + } + + public JSONArray valuesAsJson() { + return new JSONArray(values.stream().map(jsonFunction).toList()); + } + + public String jsonType() { + if (type == Boolean.class) + return "boolean"; + if (type == Integer.class) + return "integer"; + return "string"; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null || obj.getClass() != this.getClass()) return false; + var that = (BlockProperty) obj; + return Objects.equals(this.name, that.name) && + Objects.equals(this.values, that.values) && + Objects.equals(this.type, that.type); + } + + @Override + public int hashCode() { + return Objects.hash(name, values, type); } } diff --git a/core/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java b/core/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java index f1005aedb..c17be89c4 100644 --- a/core/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java +++ b/core/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java @@ -399,9 +399,9 @@ public class SchemaBuilder { if (!definitions.containsKey(propertiesKey)) { JSONObject props = new JSONObject(); properties.forEach(property -> { - JSONArray values = new JSONArray(); - property.value().forEach(values::put); - props.put(property.name(), new JSONObject().put("enum", values)); + props.put(property.name(), new JSONObject() + .put("type", property.jsonType()) + .put("enum", property.valuesAsJson())); }); definitions.put(propertiesKey, new JSONObject() diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisBlockData.java b/core/src/main/java/com/volmit/iris/engine/object/IrisBlockData.java index d85ed80a2..1c9cb514d 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisBlockData.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisBlockData.java @@ -64,10 +64,6 @@ public class IrisBlockData extends IrisRegistrant { @RegistryMapBlockState("block") @Desc("Optional properties for this block data such as 'waterlogged': true") private KMap data = new KMap<>(); - @RegistryMapBlockState("block") - @ArrayType(type = KMap.class) - @Desc("Optional properties for this block data such as 'waterlogged': true") - private KList> altData = new KList<>(); @Desc("Optional tile data for this block data") private KMap tileData = new KMap<>(); diff --git a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java index 0636a0aef..f2b923c30 100644 --- a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java +++ b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java @@ -701,7 +701,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java index 3a8edbbe9..0086ff9d9 100644 --- a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java +++ b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java @@ -704,7 +704,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java index 0102123ec..de96f541c 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java @@ -705,7 +705,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java index 1c0023551..ded43678c 100644 --- a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java +++ b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java @@ -723,7 +723,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java b/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java index 683c31e5c..758d57b8c 100644 --- a/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java +++ b/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java @@ -734,7 +734,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java b/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java index 157f8c331..c724806c3 100644 --- a/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java +++ b/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java @@ -731,7 +731,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java b/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java index 7b58a912e..9f2449ec4 100644 --- a/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java +++ b/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java @@ -731,7 +731,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_21_R4/src/main/java/com/volmit/iris/core/nms/v1_21_R4/NMSBinding.java b/nms/v1_21_R4/src/main/java/com/volmit/iris/core/nms/v1_21_R4/NMSBinding.java index 10bd6f8c3..ddcd66bdd 100644 --- a/nms/v1_21_R4/src/main/java/com/volmit/iris/core/nms/v1_21_R4/NMSBinding.java +++ b/nms/v1_21_R4/src/main/java/com/volmit/iris/core/nms/v1_21_R4/NMSBinding.java @@ -731,7 +731,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) { diff --git a/nms/v1_21_R5/src/main/java/com/volmit/iris/core/nms/v1_21_R5/NMSBinding.java b/nms/v1_21_R5/src/main/java/com/volmit/iris/core/nms/v1_21_R5/NMSBinding.java index 5477348a4..c8f50cbb2 100644 --- a/nms/v1_21_R5/src/main/java/com/volmit/iris/core/nms/v1_21_R5/NMSBinding.java +++ b/nms/v1_21_R5/src/main/java/com/volmit/iris/core/nms/v1_21_R5/NMSBinding.java @@ -730,7 +730,7 @@ public class NMSBinding implements INMSBinding { } private > BlockProperty createProperty(Property property, BlockState state) { - return BlockProperty.of(property.getName(), state.getValue(property), property.getPossibleValues(), property::getName); + return new BlockProperty(property.getName(), property.getValueClass(), state.getValue(property), property.getPossibleValues(), property::getName); } public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {