Config Handler(配置加载与 JSON 工具)
基本信息
| 属性 | 值 |
|---|---|
| 类名 | glowredman.amazingtrophies.ConfigHandler |
| 入口 | parseOrCreate(String directoryName, Consumer<JsonElement> action) 在 FMLPostInit 调用 |
| 两个目录 | achievements/ 与 trophies/ |
| 文件格式 | JSON,单个独立 object,或一个顶层 array 的多对象 |
| 排序 | COMPARATOR —— 子目录优先于文件,按 ASCII 排序;同名目录按字典序 |
启动流程
AmazingTrophies.postInit:
ConfigHandler.parseOrCreate("achievements", AchievementHandler::parseAchievement)—— 遍历config/amazingtrophies/achievements/**/*.json,依次调用parseAchievement(element)。ConfigHandler.parseOrCreate("trophies", TrophyHandler::parseTrophy)—— 同上对trophies/子目录。AchievementHandler.registerMissingPages()—— 把收集到的page名注册为AchievementPage,每个仅有空成就自动占位。AmazingTrophiesAPI.getAchievements().forEach(AchievementProperties::register)—— 推入StatList/AchievementList。- 所有 ConditionHandler 调
ConditionHandler::registerAsEventHandler注册到 Forge/FML bus。
parseOrCreate会先Files.createDirectories(dir),找不到目录不报错——首次运行会自动建空目录。
ItemDefinition / 实体类辅助常量
| 常量 | 值 |
|---|---|
PROPERTY_REGISTRY_NAME |
"registryName" |
PROPERTY_META |
"meta" |
PROPERTY_NBT |
"nbt" |
工具方法
| 方法 | 行为 |
|---|---|
parseEntityClass(JsonElement) |
优先查 EntityList.stringToClassMapping,回退 Class.forName;仅接受 Entity 子类 |
parseEntityLivingClass(JsonElement) |
同上但仅 EntityLivingBase 子类 |
getItemProperty(json, key, defaultMeta) |
读取子对象 → ItemDefinition(getStringProperty("registryName"), getIntegerProperty("meta", defaultMeta), getStringProperty("nbt", null)) |
getIntegerProperty(json, key) |
必填 int(缺失或 null → JsonSyntaxException) |
getStringProperty(json, key) |
必填 String |
getObjectProperty(json, key) |
必填 JsonObject |
getSetProperty(json, key, parser) |
必填集合(支持单值或数组) |
getBooleanProperty(json, key, fallback) |
可选 bool |
getDoubleProperty(json, key, fallback) |
可选 double |
getFloatProperty(json, key, fallback) |
可选 float |
getIntegerProperty(json, key, fallback) |
可选 int |
getStringProperty(json, key, fallback) |
可选 string |
getSetProperty(json, key, parser, fallback) |
可选集合(支持单值或数组) |
缺失字段时
getProperty(...)内部检查:缺失或 JSON null 时,要么抛JsonSyntaxException(必填版),要么返回 fallback(可选版)。
相关条目
源码
src/main/java/glowredman/amazingtrophies/ConfigHandler.java