OritechDefender

OritechDefender

OritechDefender是一个服务端NeoForge性能优化模组,用于减少Oritech机器同步产生的冗余编码与传输。

性能

OritechDefender

OritechDefender 是一个服务端 NeoForge 性能优化模组,用于减少 Oritech 机器同步过程中产生的冗余编码与网络传输。

当同一个 Oritech 方块实体在短时间内产生多次绝对状态更新时,OritechDefender 会保留最新状态,并依据真实的区块追踪、连接可写性以及有界发送预算,安全地投递该状态。

默认模式为 OBSERVE(观察)。该模式仅记录真实统计信息,不会改变数据包投递方式。管理员可以在查看统计结果后,再切换至 ENFORCE(强制执行)模式。

特性

  • 合并 Oritech TICK 和 SPARSE_TICK 绝对状态更新;
  • 仅为每个方块实体保留最新的待处理状态;
  • 仅向实际追踪相关区块的玩家发送更新;
  • 为每位玩家使用独立队列,慢速连接不会阻塞其他正常玩家;
  • 应用负载数量预算、估算字节预算及 Netty 背压机制;
  • 在发送前重新验证维度、区块、方块实体身份及玩家追踪状态;
  • 报告真实的请求、编码、合并、投递、延迟及积压统计信息;
  • 可随时切换至 OFF 模式,恢复 Oritech 原始投递路径。

实际效果

以下累计统计数据来自真实服务器上的长时间运行会话:

类型 请求次数 编码次数 编码缩减率
TICK 4,768,552 1,076,220 约 77.43%
SPARSE_TICK 123,237 120,114 约 2.53%
总计 4,891,789 1,196,334 约 75.54%

编码缩减率计算公式为 1 - encoded / requested。结果取决于机器数量、玩家数量、区块追踪情况以及配置。编码缩减率并不等同于网络接口流量缩减率。

安全边界

OritechDefender 仅管理 Oritech TICK 和 SPARSE_TICK 广播:

  • INITIAL、GUI_OPEN、GUI_TICK 及 CUSTOM 始终正常通过;
  • 定向的 sendUpdate(type, player) 同步始终正常通过;
  • 不会修改机器的运转、能量、物品、流体、配方、NBT 或世界数据;
  • 不会强制加载区块;
  • 不会写入世界 SavedData;
  • 当版本或精确注入点不匹配时,优化功能保持禁用;
  • 队列已满、线程或实体校验失败、或编码异常时,将保留原始投递路径。

OritechDefender 无需世界数据迁移。停止服务器并移除其 JAR 文件即可恢复至未安装状态。

运行要求

  • Minecraft:1.21.1
  • 模组加载器:NeoForge 21.1.240 或 21.1.x 系列中的更新版本
  • Oritech:1.2.8
  • 安装位置:仅服务端
  • Java:21

OritechDefender 会校验完整 Oritech 1.2.8 JAR 指纹以及所需的 Mixin 注入点。若检测到不同、已修改或不支持的 Oritech 构建版本,将报告为 PASS_THROUGH(直通),不会强制进行优化。

安装步骤

  1. 停止服务器。
  2. 备份世界、mods 和 config 目录。
  3. 将 OritechDefender JAR 放入服务器的 mods 目录。
  4. 确保受支持的 Oritech 1.2.8 JAR 已安装,文件名为 oritech-neoforge-1.21.1-1.2.8.jar。
  5. 启动服务器。
  6. 运行 /oritechdefender status。
  7. 确认 Oritech 报告为 SUPPORTED(受支持),然后在典型的峰值负载期间保持 OBSERVE 模式。
  8. 确认统计信息和服务器状态正常后,运行 /oritechdefender mode enforce。

客户端无需安装 OritechDefender。

命令

/oritechdefender status

显示当前模式、兼容性检查、钩子活动、请求/编码/合并/投递计数器、调度器计时、积压、背压、失效及故障开放统计信息。

/oritechdefender top [1..60]

显示所选时间窗口内最繁忙的维度、区块及 Oritech 同步类型。

/oritechdefender player <名称>

显示所选玩家的待处理数量、最早条目年龄、上一 tick 投递量、连接可写性及压力状态。

/oritechdefender mode <off|observe|enforce>

  • OFF:使用 Oritech 原始投递行为。
  • OBSERVE:记录统计信息而不改变投递方式。
  • ENFORCE:启用安全合并、独立队列及背压机制。

此命令需要权限等级 2。所选模式将持久化保存至配置文件中。

/oritechdefender reload

重新加载配置文件。需要权限等级 2。

/oritechdefender resetstats

清空已累计的统计信息。需要权限等级 2。

统计信息说明

  • requested:Oritech 发起的同步请求数;
  • encoded:实际编码的 Oritech 负载数;
  • coalesced:因被更新状态替代而无需单独发送的请求数;
  • sent:实际投递给玩家的接收方负载数;
  • deferred:因预算或背压而推迟的调度尝试次数;
  • pending:当前在玩家队列中等待的状态数;
  • oldest:最早待处理条目的年龄;
  • failOpen:安全校验失败时保留原始路径的次数;
  • queueFull:有界队列达到配置上限的次数。

sent 可能高于 encoded,因为一个编码后的负载可以投递给多个追踪同一区块的玩家。

推荐部署流程

OBSERVE → ENFORCE → 需要时 OFF

在典型的峰值负载期间保持 OBSERVE 模式,并在启用 ENFORCE 前保存 status 和 top 60 的输出。如果出现问题,立即运行:

/oritechdefender mode off

配置

服务器首次启动时会生成:

config/oritechdefender-server.toml

默认最小同步间隔:

  • TICK:10 tick
  • SPARSE_TICK:100 tick

默认值优先保证状态新鲜度和安全回滚。增大这些间隔可能会进一步减少编码量,但也会增加客户端可见的状态延迟。不建议在未经受控对比测试的情况下进行激进调整。

问题反馈

反馈问题时,请包含以下内容:

  • Minecraft、NeoForge、OritechDefender 和 Oritech 的版本号;
  • /oritechdefender status 的脱敏输出;
  • 当前配置文件;
  • 最小复现步骤;
  • 相关日志和异常堆栈信息;
  • 切换至 OFF 模式是否能解决问题。

发布前请移除服务器地址、玩家信息、身份验证令牌、RCON 密码及其他敏感数据。