Web 地图选项(WebMap)
基本信息
| 属性 | 值 |
|---|---|
| 配置文件 | journeymap.webmap.config |
| 宿主类 | journeymap.client.properties.WebMapProperties(WebMapProperties.java:20) |
| 继承链 | WebMapProperties → MapProperties → PropertiesBase |
@Config 字段数 |
2(本 mod 最小的配置类) |
| 所属页签 | WebMap(2 项,全部) |
| 界面入口 | OptionSlotFactory.addSlots(..., Config.Category.WebMap, getWebMapProperties())(OptionSlotFactory.java:46) |
| HTTP 服务器 | 内嵌 Javalin 4.6.8(dependencies.gradle,shadowImplementation) |
| 默认状态 | 关闭(enabled 默认 false) |
功能
Web 地图选项只控制两件事:是否启用与监听哪个端口。它继承 MapProperties 的 11 项图层开关(详见 地图显示选项),因此 Web 地图的显示内容与游戏内全屏地图共用同一套配置语义,只是持久化在不同文件里。
两项配置
| 语言键 | 字段 | 类型 | 默认 | 范围 | 说明 |
|---|---|---|---|---|---|
jm.webmap.enable |
enabled |
bool | false | — | 启用浏览器 Web 地图(master = true,作为本分类的主开关) |
jm.advanced.port |
port |
int | 8080 | 80–10000 | HTTP 监听端口 |
(行号:WebMapProperties.java:22-26。)
注意 port 的语言键是 jm.advanced.port 而非 jm.webmap.port —— 它归在 WebMap 分类但键名前缀是 advanced,这是源码中的实际写法(WebMapProperties.java:25)。
preferredMapType(WebMapProperties.java:28,默认 MapType.Name.day)是非 @Config 字段,不显示在选项界面。
端口占用回退逻辑
WebMap.findPort(boolean tryCurrentPort)(webmap/WebMap.java:138-187)在启动时探测端口,行为分两级:
- 第一次尝试(
tryCurrentPort = true):用配置端口new ServerSocket(port)试绑定。- 成功 → 取
socket.getLocalPort()后立即关闭,用该端口启动 - 失败(
IOException)→ 打警告日志后递归调用findPort(false)
- 成功 → 取
- 第二次尝试(
tryCurrentPort = false):用new ServerSocket(0)请求系统分配的任意空闲端口,取回后关闭 socket 并使用- 若连这一步也失败 → 记录错误并调用
stop(),Web 地图不启动
- 若连这一步也失败 → 记录错误并调用
⚠️ 端口回退是静默降级:配置里写 8080 而 8080 被占用时,服务器会改用随机端口,只在日志里留下
Configured port {} could not be bound的警告。浏览器端因此可能连不上配置端口,需查日志确认实际端口。
客户端实例为 null(开发环境类加载问题)时直接回落到 8080(:144-147),并在注释中明确说明"这只是在开发环境压制异常,并不修复该问题"。
数值
| 数值名 | 值 |
|---|---|
@Config 字段数 |
2 |
| 默认端口 | 8080 |
| 端口合法范围 | 80–10000 |
| 端口被占用时的回退 | 系统分配的随机空闲端口(ServerSocket(0)) |
| 静态资源根目录 | <游戏目录>/journeymap/web/(Constants.WEB_DIR,Constants.java:66) |
交互
| 触发 | 行为 |
|---|---|
游戏启动且 enabled = true |
JourneymapClient.postInitialize() 中 if (webMapProperties.enabled.get()) 启动 Web 服务器(JourneymapClient.java:311) |
| 启动成功 | 日志输出 Webmap is now listening on port: {}(WebMap.java:51) |
| 配置端口被占用 | 自动改用随机端口,仅记警告日志(:164-168) |
| 修改端口设置 | 需重启 Web 服务器(findPort 的注释指出端口只在 port == 0 时才重新读取配置,:140、:150) |
| 浏览器访问 | 见 Web 地图服务器 的 9 条路由 |
安全提示
服务器对所有响应统一追加两个头(WebMap.java:105-108):
Access-Control-Allow-Origin: *—— 允许任意来源跨域读取Cache-Control: no-cache
且内置 HTTP 服务器无任何身份验证。在共享网络下启用等于把地图数据对同网段完全开放,建议仅在本地或可信局域网使用。
相关条目
- Web 地图服务器 - Javalin 路由与静态资源
- 地图显示选项 - 继承自
MapProperties的 11 项图层开关 - 配置文件 -
journeymap.webmap.config的加载规则 - Options Manager -
WebMap页签