Be Quiet Negotiator

Be Quiet Negotiator 是一个客户端 NeoForge 模组,它允许你通过静默跳过 NeoForge 握手协商来连接到原版或非 NeoForge 服务器,阻止常见的握手错误,并实现更流畅的连接。

Be Quiet Negotiator

Be Quiet Negotiator 是一个轻量级、仅客户端侧的 NeoForge 模组,它允许安装了模组的客户端连接到原版或模组极少的服务器(例如只有服务端模组的 Fabric 服务器),而不会触发 NeoForge 严格的网络协商流程。

工作原理

通常,NeoForge 会强制执行一个握手协议,以确保客户端和服务器在模组负载和能力方面达成一致。当连接到不支持 NeoForge 的服务器时,此模组会悄悄抑制该协商过程,使连接能够顺利进行而不会断开或报错——也就是说,它通过保持沉默来“协商”。

此外,连接过程中可能出现的其他错误(例如数据包解码错误或意外数据包大小)也会被忽略,从而让客户端能够顺利连接。

具体来说,Be Quiet Negotiator 使用 Mixin 修补 NeoForge 客户端代码,专门针对那些在连接到不支持 NeoForge 的服务器时会产生错误或断开的恼人方法。

此外,所有修补都是可配置的,用户可以根据需要启用或禁用特定修补。

使用场景

此模组适用于:

  1. 希望加入原版服务器的 NeoForge 客户端玩家,防止因缺少网络协商响应而导致的断开连接。
  2. 通过混合或代理网络连接的玩家,其入口点是原版或非 NeoForge 服务器,避免客户端期望 NeoForge 时握手失败。
  3. 在客户端使用全栈 NeoForge 模组的整合包开发者或测试人员,希望连接到未安装模组或使用不同模组的服务器,而无需每次都禁用模组。
  4. 尝试加入未安装 NeoForge 的服务器,但已安装预期服务端有模组(例如,带有网络功能的世生、物品或 GUI 模组)的玩家。
  5. 局域网或休闲多人游戏设置,其中只有客户端运行 NeoForge 并安装了功能完整的模组,服务器端则未安装模组或运行着不同的模组加载器。

要搭建生产级代理网络?

不要使用此模组!你很可能会遇到模组兼容性问题,因为 Be Quiet Negotiator 只是抑制错误,并不能神奇地让不兼容的模组正常工作。

与其使用传统的代理将连接路由到后端服务器,我建议为每台 NeoForge 服务器分配一个独立的公共 IP 地址/域名。

如果你的 IP 地址不够用,可以使用反向代理,例如 Gate Lite Mode 或我自己的 mc-router,根据握手数据包中的服务器地址字段来路由连接。

要在服务器之间传送玩家,请使用 Minecraft 1.20.5 中引入的原版 /transfer 命令,或安装 Server Redirect 模组。

包含的修补(自 v1.0.1 起)

  • bypassNegotiationErrors - 通过忽略协商错误,允许客户端连接到不支持 NeoForge 的服务器。
  • bypassCustomFeatureFlags - 连接服务器时忽略自定义特性标志,使客户端能够顺利连接。
  • ignorePacketDecodingErrors - 连接服务器时忽略数据包解码错误,使客户端能够顺利连接。
  • ignorePacketHandlerErrors - 连接服务器时忽略客户端侧数据包处理错误,使客户端能够顺利连接。

重要说明

连接安全性

Be Quiet Negotiator 在设计上是安全的:它仅在服务器被识别为非 NeoForge 时激活,完全不影响正常的模组对模组连接。配置简单且可切换,让用户能精细控制何时允许静默协商。

模组兼容性

某些模组可能依赖于成功的协商,或期望服务端支持特定功能。在这些情况下,功能可能会静默失效或导致令人困惑的行为。

请谨慎使用,并在未运行 NeoForge 的服务器上,避免放置或交互使用模组方块、物品或 GUI。 此模组能实现连接兼容,但无法让不兼容的模组神奇地正常工作。

我们有一个已知不兼容模组的列表,请参阅 docs/incompatibility.md。