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:
1 parent
7309159f83
commit
08d4bc2501
3 files changed
+11
-40
No files matched your search
+7
-23
@@ -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
@@ -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
@@ -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");
|
||||
|
||||
Reference in new issue
Block a user