
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(直通),不会强制进行优化。
安装步骤
- 停止服务器。
- 备份世界、
mods和config目录。 - 将 OritechDefender JAR 放入服务器的
mods目录。 - 确保受支持的 Oritech 1.2.8 JAR 已安装,文件名为
oritech-neoforge-1.21.1-1.2.8.jar。 - 启动服务器。
- 运行
/oritechdefender status。 - 确认 Oritech 报告为
SUPPORTED(受支持),然后在典型的峰值负载期间保持 OBSERVE 模式。 - 确认统计信息和服务器状态正常后,运行
/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 密码及其他敏感数据。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。