
Proxy Compatible Forge
该模组将Velocity的现代、Lucko的BungeeGuard以及BungeeCord的传统玩家信息转发模式带到了Neo/Forge服务器上
Proxy Compatible Forge 代理兼容版
特别感谢 FabricProxy-Lite 和 CrossStitch 在模组代理领域的开拓性工作。我们在移植和适配 Neo/Forge 环境方面做了不少工作,但不可否认我们是站在巨人的肩膀上。
该模组将 Velocity 的 modern、 Lucko 的 BungeeGuard 以及 BungeeCord 的旧版玩家信息转发模式带到了 Neo/Forge 服务器。
支持的版本/平台
- Forge 1.7.2 - 26.2 版本
- Forge 1.14 - 1.15.1 需要 MixinBootstrap
- Forge 1.13.x 需要 ModernMixins
- Forge 1.8 - 1.12.2 需要 MixinBooter
- Forge 1.7.x 需要 UniMixins
- 1.7.2 - 1.12.2 还需要修改版的 Velocity 代理
- NeoForge 1.20.1 - 26.2 版本
- SpongeForge/SpongeNeo
- 通常不需要 PCF,因为 Sponge 支持旧版+新版转发和命令参数包装
- 但如果安装了 Forgified Fabric API(特别是
fabric_networking_api_v1),可能需要使用 PCF 并禁用 Sponge 的转发功能
- Bukkit+Neo/Forge 混合服务器
- 尽可能使用混合服务器自带的转发支持,如果其实现不兼容则使用 PCF
更多关于支持的平台和整合包的信息,请参阅 兼容性 页面。
快速入门
关于 Forge 1.13 - 1.20.1 的说明
如果你想在 Velocity 代理后面托管现代 Forge 服务器(1.13 - 1.20.1),请查看 Ambassador:https://modrinth.com/plugin/ambassador
注意:Ambassador 1.2.0-beta 或更高版本不再需要此模组,但如果你想要现代转发功能,仍然可以使用它。
安装
以下步骤假设你已经 配置好了 Velocity 代理 并且有一个可用的环境。
- 下载此模组并将其放入 Neo/Forge 服务器的
mods文件夹中(可在 Modrinth 或 Releases 标签页中找到 JAR 文件)。 - 启动 Neo/Forge 服务器以生成默认配置文件。
- 停止 Neo/Forge 服务器。
- 打开
config文件夹中的proxy-compatible-forge.toml,将你的转发密钥填入forwarding.secret配置字段。 - 在
server.properties中确保online-mode设置为false。 - 现在你可以启动服务器并通过 Velocity 连接它了!
配置
配置文件位于 config/proxy-compatible-forge.toml,包含以下选项:
| 设置组 | 设置名称 | 默认值 | 描述 |
|---|---|---|---|
forwarding |
enabled |
true |
启用或禁用玩家信息转发。更改此设置需要重启服务器。 |
forwarding |
mode |
"MODERN" |
使用的转发类型。 |
forwarding |
secret |
"" |
用于验证玩家连接来自受信任代理的密钥。 |
forwarding |
approvedProxyHosts |
[] |
受信任的代理主机名或 IP 地址列表。如果连接的代理主机名或 IP 不在此列表中,玩家将被断开连接。留空以允许所有。 |
crossStitch |
enabled |
true |
启用或禁用 CrossStitch 支持。更改此设置需要重启服务器。 |
crossStitch |
forceWrappedArguments |
[] |
在此添加不兼容的模组或原版命令参数类型。 |
crossStitch |
forceWrapVanillaArguments |
false |
强制包装原版命令参数类型。当上述设置变得过时时很有用。 |
debug |
enabled |
false |
启用或禁用调试日志。 |
debug |
disabledMixins |
[] |
要禁用的 Mixin 列表。使用 Mixin 的名称并加上其部分或完整包名作为前缀。 |
advanced |
modernForwardingVersion |
"NO_OVERRIDE" |
覆盖由 PCF 决定的现代转发版本。如果遇到聊天签名问题,请将其改为 "MODERN_DEFAULT"。更改此设置需要重启服务器。 |
功能特性
玩家信息转发
如上所述,PCF 实现了 Velocity 的 MODERN 转发协议,允许你在代理后面安全地托管模组服务器。
支持现代转发版本 1-4:
| 名称 | 值 | 支持的 MC 版本 |
|---|---|---|
MODERN_DEFAULT |
1 | 任意 |
MODERN_FORWARDING_WITH_KEY |
2 | 1.19 |
MODERN_FORWARDING_WITH_KEY_V2 |
3 | 1.19.1 - 1.19.2 |
MODERN_LAZY_SESSION |
4 | 1.19.3 及以上 |
如果遇到聊天签名相关的兼容性问题,请报告问题,然后将 PCF 配置中的 advanced.modernForwardingVersion 改为 MODERN_DEFAULT。
接下来,BUNGEEGUARD 转发要求你使用 Velocity 的 BUNGEEGUARD 转发模式,或者使用安装了 BungeeGuard 插件的 BungeeCord。
最后,LEGACY 转发要求你使用 Velocity 的 LEGACY 转发模式或 BungeeCord 并启用 IP 转发。建议不要使用此转发模式,但你可以使用 forwarding.approvedProxyHosts 设置来在一定程度上保护安全。
模组命令参数包装,即 CrossStitch
这可以解决类似以下错误:
io.netty.handler.codec.CorruptedFrameException: Error decoding class com.velocitypowered.proxy.protocol.packet.AvailableCommandsPacket
PCF 移植了此 Fabric 模组的模组命令参数包装功能,允许它们通过 Velocity 发送,而无需为每个模组添加的命令参数编写自定义数据包反序列化器。请注意,BungeeCord 不支持包装的命令参数,因此如果你使用(或运行 BungeeCord 的分支),可能需要禁用此功能。
在少数情况下,模组会在 minecraft 命名空间下注册其命令参数,或者修改原版参数,绕过 PCF 的参数包装器。在这种情况下,你可以将自定义参数的 ID 添加到 PCF 的 crossStitch.forceWrappedArguments 设置中,强制 PCF 包装该参数。
在模组在原版之前注入并注册其参数,导致所有参数 ID 值偏移的情况下,你可以启用 crossStitch.forceWrapVanillaArguments 设置来强制包装 minecraft 和 brigadier 命名空间。这更像是一个临时解决方案,因为偏移的参数 ID 无法被 Velocity 读取,如果客户端上的参数 ID 具有相同偏移,Velocity 命令也无法被客户端读取,除非你通过权限禁用代理上的所有命令或移除添加命令的插件,否则将完全阻止连接。
判断是否发生此情况的最简单方法是启用 PCF 配置中的调试日志,检查 brigadier:boolean 的参数 ID 是否不是 0。
常见的解决方法是让相关模组将其注册 Mixin 改为 RETURN,并确保其参数的注册使用其 modid 作为命名空间。
如果你发现任何奇怪的参数,请提交 issue,以便我们将其添加到默认配置中,或者利用提供的信息为导致问题的模组编写 PR。
常见问题
频道过多(Too Many Channels)
客户端错误:
Invalid payload REGISTER!
Velocity:
Velocity 修复:在 Velocity 启动参数中添加 -Dvelocity.max-known-packs=#,其中 # 是 64 + 模组数量 × 1.5(向上取整)的数字。
例如:对于 40 个模组,使用 64 + 40×1.5 = 124,所以 -Dvelocity.max-known-packs=124
Paper 服务器错误:
[00:00:00 ERROR]: Couldn't register custom payload
java.lang.IllegalStateException: Cannot register channel 'modid:channel'. Too many channels registered!
Paper 修复:在 Paper 服务器启动参数中添加 -Dpaper.disableChannelLimit=true
注意:由于涉及大量频道和模组,加入原版服务器时客户端上的纹理/物品可能会出现不匹配。
发生内部服务器连接错误
客户端错误:
An internal server connection error occurred.
Velocity 错误:
io.netty.handler.codec.CorruptedFrameException: Packet sent for class com.velocitypowered.proxy.protocol.packet.PluginMessagePacket was too big (expected 1234567 bytes, got 7654321 bytes)
在 Velocity 端解决:在 Velocity 启动参数中添加 -Dvelocity.max-plugin-message-payload-size=#######,其中 ####### 比错误信息中最后的 "got ####### bytes" 数字稍大一些。重复此操作直到你的客户端能够登录。
构建项目
克隆仓库。
git clone https://github.com/adde0109/Proxy-Compatible-Forge.git在项目根目录下运行
./gradlew build(Windows 上为gradlew.exe build)JAR 文件将在
build/libs/目录中
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。