/dynmap
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | dynmap |
| 注册位置 | src/main/java/org/dynmap/forge/DynmapPlugin.java:1471(onEnable() 内,方法起点 DynmapPlugin.java:1369) |
| 处理类 | DynmapCommand(DynmapPlugin.java:2047-2053,继承 DynmapCommandHandler) |
| 分派链 | DynmapCommandHandler.processCommand(DynmapPlugin.java:2032)→ DynmapPlugin.onCommand(DynmapPlugin.java:1513)→ DynmapCore.processCommand(DynmapCore.java:1411) |
| 帮助表 | DynmapCore.commandinfo 静态数组(DynmapCore.java:1185),本指令 36 行 |
| 权限名集合 | DynmapCore.commands(DynmapCore.java:1134-1158),本指令 24 项含 help |
功能
服务端渲染控制主入口。所有渲染动作都在服务端后台线程完成,指令只负责改状态或入队。
onCommand(DynmapPlugin.java:1513)把 Forge 的 ICommandSender 包装成 DynmapPlayer(玩家)或 ForgeCommandSender(控制台),随后交给 DynmapCore.processCommand。processCommand 在 mapManager == null 时直接回报 “Dynmap failed to initialize properly” 并吞掉后续处理(DynmapCore.java:1412-1415)——初始化失败时全部指令不可用。
dynmap 分支会先经 parseArgs 重新解析参数以支持双引号(DynmapCore.java:1441),解析失败则打印帮助(DynmapCore.java:1443)。
子指令
下表为帮助表(commandinfo)中登记的 22 个子指令,按源码出现顺序:
| 子指令 | 参数 | 作用 |
|---|---|---|
| (空) | — | 打印帮助 |
hide |
<player> 可选 |
从地图隐藏玩家 |
show |
<player> 可选 |
在地图显示玩家 |
render |
— | 渲染当前位置的图块 |
fullrender |
<world> / <world>:<map> 可选 |
渲染整个世界/指定地图 |
radiusrender |
<radius> |
渲染当前位置半径内所有地图 |
updaterender |
— | 更新已渲染图块 |
cancelrender |
— | 取消渲染 |
stats |
— | 输出渲染统计 |
triggerstats |
— | 触发统计采样 |
resetstats |
— | 重置统计 |
sendtoweb |
— | 向网页端广播 |
purgequeue |
— | 清空渲染队列 |
purgemap |
— | 清除地图数据 |
purgeworld |
— | 清除世界数据 |
pause |
<all|none|full|update> |
查询/设置渲染暂停状态 |
quiet |
— | 抑制 fullrender 聊天刷屏 |
ids-for-ip |
— | IP 反查玩家 ID |
ips-for-id |
— | 玩家 ID 反查 IP |
add-id-for-ip |
— | 绑定 IP 与玩家 ID |
del-id-for-ip |
— | 解绑 IP 与玩家 ID |
webregister |
— | 网页端注册 |
version |
— | 显示版本 |
pause 的 4 个取值是参数而非子指令:分派在 DynmapCore.java:1664-1682,full/update/all 分别置位 setPauseFullRadiusRenders 与 setPauseUpdateRenders(DynmapCore.java:1667-1679),其余取值走 else 分支同时复位两者(DynmapCore.java:1680-1683)。
数值
fullrender 的半径与地图名解析见 DynmapCore.java:1468-1513:
| 参数位 | 含义 |
|---|---|
args[1] |
世界名,查 mapManager.worldsLookup(DynmapCore.java:1487) |
args[2] |
x 坐标(Integer.parseInt,失败回报 Invalid x coord) |
args[3] |
z 坐标(Integer.parseInt) |
args[4] |
可选半径 |
args[5] |
可选地图名 |
交互
| 触发 | 行为 |
|---|---|
| 无参数 | 打印帮助(DynmapCore.java:1443) |
pause 无参数 |
仅显示当前暂停状态(DynmapCore.java:1665 为空分支) |
| 权限不足 | checkPlayerPermission 拦截;权限名与 DynmapCore.commands 集合同名 |
已核实的不一致
reload 是可用的子指令,但未登记进帮助表:
- 运行时分派:
DynmapCore.java:1653c.equals("reload")→ 发送 “Reloading Dynmap…” →getServer().reload()→ “Dynmap reloaded”(DynmapCore.java:1654-1656) - 权限已登记:
DynmapCore.java:1143"reload" - 帮助表缺失:
DynmapCore.java:1185-1290的commandinfo数组中"reload"出现 0 次
因此 /dynmap help 不会列出 reload,但命令本身工作正常(需 reload 权限)。仓库中未找到任何注释表明这是有意省略,故此处仅如实记录行为,不判定为缺陷。