Catch unknown block errors

This commit is contained in:
LOOHP 2024-12-14 22:04:29 +00:00
parent 26ce9c4a9d
commit c29b219d9c
2 changed files with 38 additions and 27 deletions

View File

@ -133,7 +133,7 @@ public class PacketRegistry {
JSONObject jsonIds = (JSONObject) jsonMappings.get(boundKey); JSONObject jsonIds = (JSONObject) jsonMappings.get(boundKey);
for (Object objPacketKey : jsonIds.keySet()) { for (Object objPacketKey : jsonIds.keySet()) {
String packetKey = (String) objPacketKey; String packetKey = (String) objPacketKey;
idMapping.put(Key.key(packetKey), (int) (long) ((JSONObject) jsonIds.get(packetKey)).get("protocol_id")); idMapping.put(Key.key(packetKey), ((Number) ((JSONObject) jsonIds.get(packetKey)).get("protocol_id")).intValue());
} }
mappings.put(packetBound, idMapping); mappings.put(packetBound, idMapping);
} }

View File

@ -20,6 +20,7 @@
package com.loohp.limbo.world; package com.loohp.limbo.world;
import com.loohp.limbo.Limbo; import com.loohp.limbo.Limbo;
import net.querz.nbt.io.SNBTUtil;
import net.querz.nbt.tag.CompoundTag; import net.querz.nbt.tag.CompoundTag;
import org.json.simple.JSONArray; import org.json.simple.JSONArray;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
@ -56,36 +57,46 @@ public class GeneratedBlockDataMappings {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static int getGlobalPaletteIDFromState(CompoundTag tag) { public static int getGlobalPaletteIDFromState(CompoundTag tag) {
String blockname = tag.getString("Name"); try {
String blockname = tag.getString("Name");
JSONObject data = (JSONObject) globalPalette.get(blockname); JSONObject data = (JSONObject) globalPalette.get(blockname);
Object obj = data.get("properties"); Object obj = data.get("properties");
if (obj == null) { if (obj == null) {
return (int) (long) ((JSONObject) ((JSONArray) data.get("states")).get(0)).get("id"); return ((Number) ((JSONObject) ((JSONArray) data.get("states")).get(0)).get("id")).intValue();
} }
//JSONObject properties = (JSONObject) obj; if (tag.containsKey("Properties")) {
CompoundTag blockProp = tag.get("Properties", CompoundTag.class);
Map<String, String> blockstate = new HashMap<>();
for (String key : blockProp.keySet()) {
blockstate.put(key, blockProp.getString(key));
}
if (tag.containsKey("Properties")) { for (Object entry : (JSONArray) data.get("states")) {
CompoundTag blockProp = tag.get("Properties", CompoundTag.class); JSONObject jsonobj = (JSONObject) entry;
Map<String, String> blockstate = new HashMap<>(); if (((JSONObject) jsonobj.get("properties")).keySet().stream().allMatch(key -> Objects.equals(blockstate.get(key), ((JSONObject) jsonobj.get("properties")).get(key)))) {
for (String key : blockProp.keySet()) { return ((Number) jsonobj.get("id")).intValue();
blockstate.put(key, blockProp.getString(key)); }
}
} }
for (Object entry : (JSONArray) data.get("states")) { for (Object entry : (JSONArray) data.get("states")) {
JSONObject jsonobj = (JSONObject) entry; if (((JSONObject) entry).containsKey("default") && ((boolean) ((JSONObject) entry).get("default"))) {
if (((JSONObject) jsonobj.get("properties")).keySet().stream().allMatch(key -> Objects.equals(blockstate.get(key), ((JSONObject) jsonobj.get("properties")).get(key)))) { return ((Number) ((JSONObject) entry).get("id")).intValue();
return (int) (long) jsonobj.get("id");
} }
} }
}
for (Object entry : (JSONArray) data.get("states")) { throw new IllegalStateException();
if (((JSONObject) entry).containsKey("default") && ((boolean) ((JSONObject) entry).get("default"))) { } catch (Throwable e) {
return (int) (long) ((JSONObject) entry).get("id"); String snbt;
} try {
} snbt = SNBTUtil.toSNBT(tag);
} catch (IOException e1) {
snbt = tag.valueToString();
}
new IllegalStateException("Unable to get global palette id for " + snbt + " (Is this scheme created in the same Minecraft version as Limbo?)", e).printStackTrace();
}
return 0; return 0;
} }