Config Handler(配置加载与 JSON 工具)

基本信息

属性 值
类名 glowredman.amazingtrophies.ConfigHandler
入口 parseOrCreate(String directoryName, Consumer<JsonElement> action) 在 FMLPostInit 调用
两个目录 achievements/ 与 trophies/
文件格式 JSON,单个独立 object,或一个顶层 array 的多对象
排序 COMPARATOR —— 子目录优先于文件,按 ASCII 排序;同名目录按字典序

启动流程

AmazingTrophies.postInit:

  1. ConfigHandler.parseOrCreate("achievements", AchievementHandler::parseAchievement) —— 遍历 config/amazingtrophies/achievements/**/*.json,依次调用 parseAchievement(element)。
  2. ConfigHandler.parseOrCreate("trophies", TrophyHandler::parseTrophy) —— 同上对 trophies/ 子目录。
  3. AchievementHandler.registerMissingPages() —— 把收集到的 page 名注册为 AchievementPage,每个仅有空成就自动占位。
  4. AmazingTrophiesAPI.getAchievements().forEach(AchievementProperties::register) —— 推入 StatList/AchievementList。
  5. 所有 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