入口点与代理类
基本信息
| 属性 | 值 |
|---|---|
| modid | journeymap(Journeymap.MOD_ID,Journeymap.java:40) |
| 主类 | journeymap.common.Journeymap(Journeymap.java:38) |
| 客户端代理 | journeymap.client.JourneymapClient |
| 服务端代理 | journeymap.server.JourneymapServer |
| 代理接口 | journeymap.common.CommonProxy |
| Core Mod | journeymap.client.mixin.MixinLoadingPlugin(coreModClass 配置项) |
| Mixin 数量 | 2 个(均为客户端) |
| FML 事件处理器 | 5 个(4 客户端 / 1 服务端) |
canBeDeactivated |
true(Journeymap.java:35) |
功能
Journeymap 是标准的 Forge 双端入口:公共代码放这里,客户端/服务端差异通过 @SidedProxy(:52-53)分流。
modid 与分类名不一致
⚠️ 本 wiki 分类名
journeymap-legacy与 modidjourneymap不同。 modid 取自源码三处一致的定义:Journeymap.MOD_ID = "journeymap"(Journeymap.java:40)、@Mod(modid = Journeymap.MOD_ID, ...)(:32)、gradle.properties的modId = journeymap,以及mcmod.info的"modid": "journeymap"。journeymap-legacy是仓库名(远端GTNewHorizons/journeymap-legacy)与本 wiki 分类名,不是游戏内 ID。资源命名空间同样是journeymap(ResourceLocation(MOD_ID, "web"),webmap/WebMap.java:86)。
5 个 FML 事件处理器
| 事件 | 方法 | 侧 | 行为 | 源码 |
|---|---|---|---|---|
FMLInitializationEvent |
initialize |
双端 | 转发 proxy.initialize(event) |
:85-89 |
FMLPostInitializationEvent |
postInitialize |
双端 | 转发 proxy.postInitialize(event) |
:97-101 |
FMLPreInitializationEvent |
preInitEvent |
仅服务端 | ConfigHandler.init(new File(event.getModConfigurationDirectory() + "/JourneyMapServer/")) |
:103-108 |
FMLServerStartingEvent |
serverStartingEvent |
仅服务端 | 注册 /jmserver 指令 |
:110-115 |
FMLServerStartedEvent |
serverStartedEvent |
仅服务端 | 记录世界名并把 World ID 打进日志 | :117-124 |
网络握手
@NetworkCheckHandler checkModLists(Map<String,String>, Side)(:66-77)决定客户端与服务端是否接受互相连接:若 proxy == null(尚未初始化)直接放行,否则转发 proxy.checkModLists()。JourneymapServer.checkModLists() 在 JourneymapServer.java:105。
服务端配置目录
preInitEvent 把服务端配置固定在 <游戏目录>/config/JourneyMapServer/(:107),与客户端的 <游戏目录>/config/journeymap/(Constants.CONFIG_DIR,Constants.java:46-47)是两套独立目录。
Core Mod 与 Mixin
MixinLoadingPlugin(client/mixin/MixinLoadingPlugin.java:11)实现 IFMLLoadingPlugin,声明 @IFMLLoadingPlugin.Name("Journeymap") 与 @IFMLLoadingPlugin.MCVersion("1.7.10")(:9-10)。
build.gradle.kts 的 tasks.jar 块在打包时移除 manifest 中的 TweakClass 属性,注释说明原因是"启用了 mixin 但它只是软依赖,若不移除,玩家未装 UniMixins 时启动会 class not found 崩溃"。
2 个 mixin 均为客户端(见 Mixin 集成)。
数值
| 数值名 | 值 |
|---|---|
| modid | journeymap |
| mod 显示名 | JourneyMap(Journeymap.SHORT_MOD_NAME,:41;gradle.properties 的 modName = JourneyMap) |
| 硬依赖 | required-after:Forge@[BuildInfo.FORGE_VERSION,)(:37) |
mcmod.info 声明依赖 |
Forge@[${forgeversion},),并同时写入 requiredMods(mcmod.info) |
| FML 事件处理器数 | 5 |
@SubscribeEvent 处理器数 |
12(客户端 11 + 服务端 1) |
| 注册的方块 / 物品 / 实体 / 配方 | 0 / 0 / 0 / 0 |
| 注册的按键 | 6 |
| 注册的指令 | 1 |
版本信息
Journeymap 中与版本相关的常量:
| 常量 | 来源 | 说明 |
|---|---|---|
JM_VERSION |
new Version(5, 1, 4, "dev")(:43) |
硬编码的兜底版本对象 |
@Mod(version = BuildInfo.JM_VERSION) |
:34 |
实际生效的是 BuildInfo.JM_VERSION |
BuildInfo |
由 generateGradleTokenClass = journeymap.common.BuildInfo 在构建期生成(gradle.properties) |
注入 VERSION、MAJOR、MINOR、MICRO、PATCH(build.gradle.kts 的 minecraft { injectedTags.put(...) }) |
| 版本号回退值 | project.properties 的 jm_major=5、jm_minor=2、jm_micro=23 |
仅当 project.version 缺分量时使用(build.gradle.kts 的 getOrNull(...) 链) |
⚠️
JM_VERSION(:43)与@Mod(version = ...)(:34)不是同一个值:前者硬编码为5.1.4-dev,后者取构建期注入的BuildInfo.JM_VERSION。因此JM_VERSION用于配置文件版本比对(PropertiesBase.isCurrent(),PropertiesBase.java:245-248)与配置目录名(Constants.CONFIG_DIR,Constants.java:47),在正式构建中与界面显示的版本可能不一致。
仓库网址常量
WEBSITE_URL(:45)、DOWNLOAD_URL(:46)、VERSION_URL(:47)分别指向 teamjm.github.io 文档站、CurseForge 1.7.10 文件页与 cfwidget API。VERSION_URL 供 checkUpdates 配置项使用。
交互
| 触发 | 行为 |
|---|---|
| 客户端连接服务端 | checkModLists() 校验双方 mod 列表;不符则拒绝连接 |
| 客户端进入世界 | ClientChatReceivedEvent → 控制码处理(见 聊天控制码) |
| 服务端世界首次启动 | 生成 <世界名>.cfg 并记录 World ID 日志(Journeymap.java:123) |
| 玩家未安装 UniMixins | jar 已移除 TweakClass,mod 仍可加载,只是 mixin 不生效 |