Treat unknown enum values in deed and rune JSON as parse failures

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MagicBotandClaude Opus 5.5 committed 2026-10-17 07:48:11 -04:00
1 parent 7309159f83
commit 08d4bc2501
3 files changed
+11 -40

No files matched your search

+7 -23
View File
@@ -84,8 +84,7 @@ public class CacheParserUtil {
}
// Exact match on the cleaned name first, then upper case (ResourceType).
// Unknown values are logged and returned as null so one bad value
// doesn't drop the whole template.
// Unknown values throw so the template fails to load.
public static <E extends Enum<E>> E readEnum(Class<E> enumClass, String value, int templateId, String fieldName) {
@@ -100,22 +99,16 @@ public class CacheParserUtil {
try {
return Enum.valueOf(enumClass, name.toUpperCase());
} catch (IllegalArgumentException e) {
Logger.error(templateId + ": " + fieldName + " has no " + enumClass.getSimpleName() + " for '" + value + "'");
return null;
throw new IllegalArgumentException(templateId + ": " + fieldName + " has no " + enumClass.getSimpleName() + " for '" + value + "'");
}
}
public static <E extends Enum<E>> EnumSet<E> readEnumSet(Class<E> enumClass, JSONArray valuesJson, int templateId, String fieldName) {
EnumSet<E> enumSet = EnumSet.noneOf(enumClass);
E enumValue;
for (int i = 0; i < valuesJson.length(); i++) {
enumValue = readEnum(enumClass, valuesJson.getString(i), templateId, fieldName);
if (enumValue != null)
enumSet.add(enumValue);
}
for (int i = 0; i < valuesJson.length(); i++)
enumSet.add(readEnum(enumClass, valuesJson.getString(i), templateId, fieldName));
return enumSet;
}
@@ -128,14 +121,10 @@ public class CacheParserUtil {
EnumMap<E, Integer> enumMap = new EnumMap<>(enumClass);
JSONObject entry;
E enumValue;
for (int i = 0; i < entriesJson.length(); i++) {
entry = entriesJson.getJSONObject(i);
enumValue = readEnum(enumClass, entry.getString(keyName), templateId, fieldName);
if (enumValue != null)
enumMap.put(enumValue, entry.getInt(valueName));
enumMap.put(readEnum(enumClass, entry.getString(keyName), templateId, fieldName), entry.getInt(valueName));
}
return enumMap;
@@ -162,14 +151,9 @@ public class CacheParserUtil {
int templateId, String fieldName) {
EnumMap<E, Float> enumMap = new EnumMap<>(enumClass);
E enumValue;
for (String key : mapJson.keySet()) {
enumValue = readEnum(enumClass, key, templateId, fieldName);
if (enumValue != null)
enumMap.put(enumValue, mapJson.getFloat(key));
}
for (String key : mapJson.keySet())
enumMap.put(readEnum(enumClass, key, templateId, fieldName), mapJson.getFloat(key));
return enumMap;
}
+1 -5
View File
@@ -60,7 +60,6 @@ public class DeedParser {
JSONObject discReq;
JSONArray itemFlags;
String flag;
mbEnums.ItemFlags itemFlag;
deed.template_id = templateId;
@@ -124,10 +123,7 @@ public class DeedParser {
if (flag.equals("None"))
continue;
itemFlag = CacheParserUtil.readEnum(mbEnums.ItemFlags.class, flag, templateId, "item_flags");
if (itemFlag != null)
deed.item_flags.add(itemFlag);
deed.item_flags.add(CacheParserUtil.readEnum(mbEnums.ItemFlags.class, flag, templateId, "item_flags"));
}
deed.item_use_flags.addAll(CacheParserUtil.readEnumSet(mbEnums.ItemUseFlags.class, deedJson.getJSONArray("item_use_flags"), templateId, "item_use_flags"));
+3 -12
View File
@@ -60,10 +60,8 @@ public class RuneParser {
JSONObject discReq;
JSONArray itemFlags;
String flag;
mbEnums.ItemFlags itemFlag;
Object subType;
JSONObject speedJson;
mbEnums.MovementType movementType;
JSONObject groupJson;
JSONArray skillGrantsJson;
JSONObject skillGrantJson;
@@ -140,10 +138,7 @@ public class RuneParser {
if (flag.equals("None"))
continue;
itemFlag = CacheParserUtil.readEnum(mbEnums.ItemFlags.class, flag, templateId, "item_flags");
if (itemFlag != null)
rune.item_flags.add(itemFlag);
rune.item_flags.add(CacheParserUtil.readEnum(mbEnums.ItemFlags.class, flag, templateId, "item_flags"));
}
rune.item_use_flags.addAll(CacheParserUtil.readEnumSet(mbEnums.ItemUseFlags.class, runeJson.getJSONArray("item_use_flags"), templateId, "item_use_flags"));
@@ -212,12 +207,8 @@ public class RuneParser {
speedJson = runeJson.getJSONObject("rune_speed");
for (String speedKey : speedJson.keySet()) {
movementType = CacheParserUtil.readEnum(mbEnums.MovementType.class, speedKey, templateId, "rune_speed");
if (movementType != null)
rune.rune_speed.put(movementType, speedJson.getFloat(speedKey));
}
for (String speedKey : speedJson.keySet())
rune.rune_speed.put(CacheParserUtil.readEnum(mbEnums.MovementType.class, speedKey, templateId, "rune_speed"), speedJson.getFloat(speedKey));
groupJson = runeJson.getJSONObject("rune_group");
rune.rune_group_type = groupJson.getInt("group_type");