
WSMC
为Minecraft Java版启用Websocket支持。
WSMC
为 Minecraft Java 版启用 WebSocket 支持。由于大多数 CDN 提供商(至少在其免费套餐中)不支持原始 TCP 代理,借助此模组,服务器所有者现在可以将服务器隐藏在 CDN 之后,并让玩家通过 WebSocket 连接,从而防止 DDoS 攻击。
适用于 Minecraft 1.20.1 至 1.20.4 版本,支持 Forge 和 Fabric。
如果您想在当前不支持的 Minecraft 版本上运行此模组,请在 GitHub 上提交 issue 或在此处留言。
此模组独立运行,没有任何依赖项。
当此模组安装在服务器端时:
- 服务器将允许玩家通过 WebSocket 连接。
- 玩家仍然可以使用原版 TCP 加入。
- 服务器在同一监听端口上接受和处理 TCP 与 WebSocket 连接。
- 即使玩家未在客户端安装此模组,仍可使用原版 TCP 加入安装了此模组的服务器。
- 服务器可以从 WebSocket 握手中获取客户端统计信息(如真实 IP)。
当此模组安装在客户端时:
- 客户端可以使用类似
ws://hostname.com:port/path_to_minecraft_endpoint的 URI 加入支持 WebSocket 的服务器。 - 客户端可以使用旧语法(如
hostname_or_ip:port)通过原版 TCP 加入任何服务器。
注意事项
- 此模组不会影响任何游戏玩法。
- 此模组不会修改任何图形界面。
- 即使您安装此模组,原版客户端仍可加入您的服务器,但请注意您安装的其他模组可能会阻止原版客户端加入。
- 在客户端安装此模组不会阻止您加入其他原版或模组服务器。
- 服务器仍然可以获取通过 CDN 代理的 WebSocket 加入的玩家的真实 IP。
- 此模组与其他 TCP-WebSocket 代理兼容,例如 websocat。
客户端选项
有时 DNS 会为 HTTP 主机名(ws)或 SNI(wss)返回较慢的 IP 地址。客户端可能希望控制 IP 地址的解析方式。
客户端可以选择性地控制 WebSocket 握手期间使用的 HTTP 主机名和 SNI:
指定 HTTP 主机名的非安全 WebSocket 连接:
ws://host.com@ip.ip.ip.ip
将 SNI 和 HTTP 主机名设置为相同值(sni-host.com),从 ip.ip.ip.ip 解析服务器 IP:
wss://sni-host.com@ip.ip.ip.ip
分别设置 SNI 和 HTTP 主机名,从 host.com 解析服务器 IP:
wss://sni.com:@host.com[:port]
分别设置 SNI 和 HTTP 主机名,从 sni.com 解析服务器 IP:
wss://:host.com@sni.com[:port]
分别设置 SNI、HTTP 主机名和服务器地址:
wss://sni.com:host.com@ip.ip.ip.ip
端口和路径规格可以同时附加。
配置
此模组的配置通过"系统属性"传递。您可以在 JVM 命令行中使用 -D 来传递这些选项。
| 属性键 | 类型 | 用途 | 作用端 | 默认值 | 示例 |
|---|---|---|---|---|---|
| wsmc.disableVanillaTCP | 布尔值 | 禁用原版 TCP 登录和服务器状态。 | 服务器端 | false | true |
| wsmc.wsmcEndpoint | 字符串 | 设置 Minecraft 登录和服务器状态的 WebSocket 端点。如果此属性不存在,客户端可以通过任何 WebSocket 端点加入游戏。必须以 / 开头,区分大小写。 | 服务器端 | 未设置 | /mc |
| wsmc.debug | 布尔值 | 显示调试日志。 | 服务器端、客户端 | false | true |
| wsmc.dumpBytes | 布尔值 | 转储原始 WebSocket 二进制帧。仅在 wsmc.debug 设置为 true 时生效。 |
服务器端、客户端 | false | true |
| wsmc.maxFramePayloadLength | 字符串 | 允许的最大帧负载长度。将此值设置为您整合包的需求值,否则 Netty 会抛出错误"Max frame length of x has been exceeded"。 | 服务器端、客户端 | 65536 | 65536 |
面向开发者
在服务器端,如果客户端通过 WebSocket 加入,其握手请求可以通过原版的 net.minecraft.network.Connection 类访问。要获取此类信息,请将 Connection 实例强制转换为 IConnectionEx,然后调用 IConnectionEx.getWsHandshakeRequest()。
当 Minecraft 服务器位于反向代理(如 CDN)之后时,这对于获取原始请求信息非常有用。例如,X-Forwarded-For 和 CF-IPCountry 标头分别表示客户端 IP 地址和客户端所在国家/地区代码。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。