JourneyMap 配置文件

基本信息

属性 值
配置文件格式 客户端为 GSON 序列化的 JSON(UTF-8,带 // 注释头);服务端为 Forge Configuration 的 .cfg
客户端配置目录 <游戏目录>/config/journeymap/config/<主.次版本>/
客户端文件名规则 journeymap.<name>.config(PropertiesBase.getFileName(),PropertiesBase.java:137)
服务端配置目录 <游戏目录>/config/JourneyMapServer/(Journeymap.java:107)
服务端文件名规则 <世界名>.cfg(ConfigHandler.java:155、:176)
配置文件数量 客户端 6 个 + 服务端每世界 1 个
配置项总数 95 个 @Config 字段(92 个唯一字段名;fontScale / textureSmall / enabled 各在两个类中重复声明)
配置分类页签 Config.Category 声明 10 个常量,其中 8 个实际建页(见 Options Manager)

功能

JourneyMap 的配置分为客户端与服务端两套,互不共享。

客户端每个配置对应一个 PropertiesBase 子类实例,由 JourneymapClient.loadConfigProperties()(JourneymapClient.java:568-575)通过 PropertiesBase.reload() 统一加载:

实例字段 类 getName() 配置文件
coreProperties CoreProperties "core"(CoreProperties.java:150) journeymap.core.config
fullMapProperties FullMapProperties "fullmap"(FullMapProperties.java:20) journeymap.fullmap.config
miniMapProperties1 MiniMapProperties "minimap"(MiniMapProperties.java:85) journeymap.minimap.config
miniMapProperties2 MiniMapProperties2 "minimap2"(MiniMapProperties2.java:22) journeymap.minimap2.config
webMapProperties WebMapProperties "webmap"(WebMapProperties.java:29) journeymap.webmap.config
waypointProperties WaypointProperties "waypoint"(WaypointProperties.java:79) journeymap.waypoint.config

MapProperties(MapProperties.java:22)与 InGameMapProperties(InGameMapProperties.java:21)声明为 abstract,不直接实例化,只作为上面 4 个具体类的父类提供共享字段。

存储与版本

  • PropertiesBase.getFile()(PropertiesBase.java:117-128)先找世界配置目录,读不到才回退到标准配置目录。
  • 每个配置文件记录一个 configVersion(PropertiesBase.java:58),与 Journeymap.JM_VERSION 比对(isCurrent(),:245-248)。版本不一致时加载后自动重写文件(save(),:273-277)。
  • 文件解析失败时把坏文件重命名为 <原名>.bad 并重新生成默认文件(load(),:345-355)。
  • 只有世界配置允许被禁用;标准配置调用 setDisabled() 会抛 IllegalStateException(PropertiesBase.java:167-178)。
  • copyToWorldConfig() / copyToStandardConfig()(:186-238)互相转换世界配置与标准配置。

值域校验

每个 @Config 字段可通过注解声明 minValue / maxValue / defaultValue / defaultBoolean / defaultEnum / stringListProvider / master / sortOrder。加载后由 ConfigValidation.validateConfigs(this)(PropertiesBase.java:420-423)反射校验并夹取到合法范围。

CoreProperties.validate()(CoreProperties.java:178-206)额外做三项跨字段修正:

  • renderDistanceCaveMax 小于 renderDistanceCaveMin 时抬升为 min 值
  • renderDistanceSurfaceMax 小于 renderDistanceSurfaceMin 时抬升为 min 值
  • 四个渲染距离中任何一项超过游戏自身的 renderDistanceChunks 时,压回游戏渲染距离

数值

项目 值
客户端配置文件数 6
服务端配置文件数 每世界 1 个(<世界名>.cfg)
@Config 字段总数 95
唯一字段名数 92
无任何外部引用的死配置项 0(逐字段核验:95 个字段在声明文件之外均有引用)
服务端配置 schema 版本 1.12F(ConfigHandler.java:24)—— 注意这是配置结构版本号,与 Minecraft 1.12 无关

服务端 Configuration(server/oldservercode/config/Configuration.java)只有 3 组配置:

组 字段 默认值(ConfigHandler.java:76-86)
全局 WorldID UUID.randomUUID()(:77)
全局 UseWorldID Forge 环境下 false,否则 true(:85-92)
全局 SaveInWorldFolder 由 Configuration 默认值决定(:19)
Radar PlayerRadar / OpRadar / WhiteListRadar true / true / ""(:78-80)
CaveMapping PlayerCaveMapping / OpCaveMapping / WhiteListCaveMapping true / true / ""(:81-83)

交互

触发 行为
游戏启动 JourneymapClient.loadConfigProperties() 读取全部 6 个客户端配置;缺失时按 newFileInit() 默认值生成
打开 Options Manager 并改动 对应配置 save() 落盘(OptionsManager → PropertiesBase.save())
切换世界 重新进入 loadConfigProperties(),若世界配置存在则优先使用(JourneymapClient.java:496)
服务端世界首次访问 ConfigHandler.getConfigByWorldName() 生成默认 <世界名>.cfg 并打印 World ID 日志(Journeymap.java:123)

死代码

Config.Category.Radar(properties/config/Config.java:51)是声明后从未使用的枚举常量。OptionSlotFactory.getSlots()(ui/option/OptionSlotFactory.java:43-48)只为 MiniMap1 / MiniMap2 / FullMap / WebMap / Waypoint / Advanced 六个分类调用 addSlots(),Radar 分类下没有任何 @Config 字段,因此 Options Manager 中不存在雷达页签 —— 雷达相关选项(maxMobsData 等 4 项)实际归在 Advanced 页签下。核验:grep 'Category.Radar' src/main/java 仅命中服务端 Configuration.getRadar(),那是另一个同名内部类,与 Config.Category 无关。

相关条目