/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:1653 c.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 权限)。仓库中未找到任何注释表明这是有意省略,故此处仅如实记录行为,不判定为缺陷。

相关条目

  • /dmap - 地图/世界/透视配置的增删改指令
  • /gwm - 本 fork 追加的 GTNH 专用指令
  • 权限体系 - 权限名与 permissions.yml 格式