/jmserver 指令
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | jmserver(CommandJMServerForge.getCommandName(),CommandJMServerForge.java:30-33) |
| 指令类 | journeymap.server.oldservercode.command.CommandJMServerForge(:18) |
| 逻辑实现 | journeymap.server.oldservercode.command.CommandJourneyMapServer(由 CommandJMServerForge 构造时持有,:20、:24) |
| 注册方式 | event.registerServerCommand(new CommandJMServerForge())(Journeymap.java:114) |
| 侧 | 仅服务端(Journeymap.serverStartingEvent 带 @SideOnly(Side.SERVER),Journeymap.java:111) |
| 权限等级 | 3(op 级,getRequiredPermissionLevel(),:51-54) |
| 用法串 | /jmserver help|worldid(getCommandUsage(),:37-40) |
| 子命令数 | 2 个顶层(help、worldid),其中 worldid 另有 4 个二级子命令 |
功能
/jmserver 是 JourneyMap 唯一注册的指令(核验:grep -rn 'registerServerCommand' src/main/java 仅 Journeymap.java:114 一处命中)。它是纯查询/诊断用途的指令,不修改任何游戏数据,作用是让管理员确认"服务端为这个世界分配了哪个 World ID",以及查看客户端能否连接。
CommandJMServerForge 本身只是一个薄壳:把 Forge 的 ICommandSender 拆成三个参数(发送者名、世界名、参数数组)转发给 CommandJourneyMapServer.processCommand()(:59-72)。真正的分支逻辑在后者。
子命令
顶层只有两个分支(CommandJourneyMapServer.processCommand(),:26-46):
| 子命令 | 行为 | 源码 |
|---|---|---|
worldid |
进入 World ID 分支;若该世界未启用 World ID 则回复 WorldID settings are disabled.(:31-38) |
:29 |
help |
打印指令帮助 | :41、:48-54 |
CommandJMServerForge.processCommand() 要求至少一个参数,无参数直接抛 WrongUsageException(getCommandUsage(sender))(:61-71)。
worldid 的二级子命令
worldid 带参数时进入 processWorldID()(:56-91),不带参数则直接打印当前 World ID(:87-90):
| 二级子命令 | 行为 | 源码 |
|---|---|---|
help |
打印 World ID 子命令帮助 | :61、:102-109 |
set <name> |
把 World ID 设为指定字符串,落盘并向所有在线客户端广播 | :66-70 → processSetWorldID() :93-100 |
setrandom |
把 World ID 设为随机 UUID(UUID.randomUUID()) |
:71-75 → processSetWorldID() |
resync |
不改配置,仅向所有在线客户端重发当前 World ID | :76-81,调用 PacketHandler.sendAllPlayersWorldID(world) |
| 其它 / 空 | 打印用法提示 /jmserver worldid help|set|setrandom|resync|(blank) |
:82-85、:87-90 |
processSetWorldID() 的三步副作用(:93-100):改 Configuration.WorldID → ConfigHandler.saveWorld() 写回 <世界名>.cfg → PacketHandler.sendAllPlayersWorldID() 广播。先落盘再广播,因此客户端收到的永远是已持久化的值。
Tab 补全
addTabCompletionOptions()(CommandJMServerForge.java:74-77)转发给 CommandJourneyMapServer.retrieveTabCompleteValues(args)(:111-124),按参数个数分级补全:
| 参数个数 | 条件 | 候选补全 | 源码 |
|---|---|---|---|
| 1 | — | help、worldid |
:114-117 |
| 2 | 第 1 个为 worldid |
help、set、setrandom、resync |
:119-122 |
| 其它 | — | null(不补全) |
:123 |
补全列表与 processWorldID() 的四个分支完全一致,无遗留项。
数值
| 数值名 | 值 |
|---|---|
| 指令总数 | 1 |
| 顶层子命令数 | 2(help、worldid) |
worldid 的二级子命令数 |
4(help、set、setrandom、resync) |
| 最低权限等级 | 3 |
| 读取的 World ID 来源 | ConfigHandler.getConfigByWorldName(worldName).getWorldID()(Journeymap.java:123) |
交互
| 触发 | 行为 |
|---|---|
| 服务端启动 | FMLServerStartingEvent 时注册指令(Journeymap.java:112-115) |
/jmserver(无参数) |
抛 WrongUsageException,客户端显示 /jmserver help|worldid |
/jmserver worldid |
打印 World ID: <id>(CommandJourneyMapServer.java:89) |
/jmserver worldid help |
打印 World ID 子命令帮助(:102-109) |
/jmserver worldid set <name> |
设置自定义 World ID,落盘并广播(:66-70、:93-100) |
/jmserver worldid setrandom |
设为随机 UUID,落盘并广播(:71-75) |
/jmserver worldid resync |
不改配置,仅重发给所有在线客户端(:76-81) |
/jmserver worldid <其它> |
打印 /jmserver worldid help|set|setrandom|resync|(blank)(:84) |
| 服务端世界首次启动 | serverStartedEvent 记录世界名并把 World ID 打进日志(Journeymap.java:119-124) |
相关条目
- World ID 同步 -
worldid查的就是这条通道传输的值 - 聊天控制码 - 服务端按世界覆写客户端雷达权限
- 配置文件 - World ID 存在每世界的
<世界名>.cfg中