/gwmc
基本信息
| 属性 | 值 |
|---|---|
| 命令名 | gwmc |
| 权限等级 | 0(所有人可用) |
| 用法 | /gwmc <url> |
| 类型 | 客户端命令(ClientCommandHandler,非服务端 ICommand) |
作用
把地图服务器的地址写入配置,供后续拉取地图配置与瓦片使用。
执行后做三件事(GwmcCommand.processCommand,:32-39):
- 去掉 URL 末尾的所有
/:while (url.endsWith("/")) url = url.substring(...) Config.setRemoteUrlBase(url)→ 写回remote.baseUrl配置项并保存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下发。这是仓库内最实际的行为陷阱。