/gwmc

基本信息

属性 值
命令名 gwmc
权限等级 0(所有人可用)
用法 /gwmc <url>
类型 客户端命令(ClientCommandHandler,非服务端 ICommand)

作用

把地图服务器的地址写入配置,供后续拉取地图配置与瓦片使用。

执行后做三件事(GwmcCommand.processCommand,:32-39):

  1. 去掉 URL 末尾的所有 /:while (url.endsWith("/")) url = url.substring(...)
  2. Config.setRemoteUrlBase(url) → 写回 remote.baseUrl 配置项并保存
  3. RemoteConfiguration.baseUrl = url → 立即替换内存中的静态基址

⚠️ 第 3 步是必需的:HTTP 请求读的是 RemoteConfiguration.baseUrl (RemoteConfiguration.java:17,24 与 TileLoaderUrl.java:74), 不是 Config.remoteUrlBase。只改配置不刷新静态字段不会立即生效。

源码核对(2026-10-01 审计)

  • 注册:ClientProxy.preInit(:28) ClientCommandHandler.instance.registerCommand(new GwmcCommand()), 只在客户端注册,服务端安装本 mod 时该命令不存在。
  • ⚠️ 源码缺陷(会崩):processCommand 直接取 args[0](:34), 没有检查 args.length,也没有覆写 getListOfStringsMatchingLastWord 提供 Tab 补全。玩家裸敲 /gwmc 会抛 ArrayIndexOutOfBoundsException。
  • ⚠️ getRequiredPermissionLevel() 返回 0 且 canCommandSenderUseCommand() 恒为 true(:21-29), 即多人游戏中任何玩家都能改自己的地图服务器地址—— 对纯客户端行为而言影响有限,但这是源码事实。
  • ⚠️ 缺陷:静态字段不同步。Config.setRemoteUrlBase 写配置后, RemoteConfiguration.baseUrl 只由命令单独赋值。 若玩家手工编辑配置文件再重启,synchronizeConfiguration 会读回该值但不会同步给 RemoteConfiguration.baseUrl, 而后者仍保持进程初始值 http://127.0.0.1:8123。 ⇒ 手工改配置无效,必须用 /gwmc 下发。这是仓库内最实际的行为陷阱。