崩服防护与自动化
XFEServerManager 在“设置 → 崩服防护”提供可热更新的主线程熔断器,并把检测结果接入普通触发器。它用于在掉落物、生物、模组实体、区块加载器或命令方块失控时保住服务器的响应能力;它不能代替原版 watchdog、内存/磁盘监控、定期备份或对第三方模组本身的修复。
默认保护
新安装默认启用下列限制;旧配置文件缺少整段或只写了部分字段时,其余字段会自动继承当前安全默认值。
| 项目 | 默认值 | 超限行为 |
|---|---|---|
| 已加载掉落物(每维度 / 每区块) | 2,000 / 256 | 清理超额掉落物,并阻止继续生成 |
| 已加载生物(每维度 / 每区块) | 2,000 / 128 | 只阻止继续生成,不删除已有生物 |
| 已加载实体总数(每维度 / 每区块) | 5,000 / 512 | 阻止继续生成 |
| 同一第三方注册命名空间实体数(每维度) | 512 | 阻止该维度继续生成该模组的实体;minecraft 使用掉落物/生物/总实体限制 |
| 新实体生成突发量 | 5 秒内 400 个 | 立即阻止本窗口内后续实体生成 |
| 命令方块执行速率 | 每秒 100 条 | 熔断本秒内后续命令方块命令 |
| 已加载区块数(每维度) | 8,000 | 发出事件和告警,不强制卸载 |
| 慢刻 | 连续 3 刻均至少 200 ms | 发出事件和告警 |
| JVM 堆占用 | 90% | 发出事件和告警,不强制 GC |
周期统计默认每 100 游戏刻(正常约 5 秒)扫描一次,只遍历已经加载的实体和区块,不加载新区块、不访问磁盘,也不在服务器线程发起网络请求。生成突发量和命令方块速率使用轻量计数器即时判断。
玩家实体永远不会被实体上限拦截。磁盘加载中的已有实体也不会在加入事件中被拒绝,避免世界加载时破坏存档;但后续周期扫描仍可清理超过上限的掉落物。自动清理只作用于 ItemEntity,不会删除生物、宠物、村民、Boss 或玩家。
这些规则覆盖常见的命令方块循环 /summon、高频投掷器/刷怪器、集中掉落物碰撞、Create 等模组产生的失控实体/机械实体,以及区块强加载、严重慢刻和内存压力。命名空间事件仍会报告 minecraft,方便单独观察原版实体,但第三方模组硬上限不会抢先覆盖原版的分类限制。静态方块实体网络、第三方模组死循环、原生崩溃、Mixin 冲突和单个异常数据包仍可能越过通用实体计数;应配合 Spark、watchdog、模组更新和离线备份处理。
触发器事件
| 事件 ID | 用途 | 可配置项 |
|---|---|---|
protection.item_overflow |
掉落物超过阈值 | threshold, scope=dimension|chunk, cooldownSeconds |
protection.mob_overflow |
生物超过阈值 | 同上 |
protection.entity_overflow |
全部实体超过阈值 | 同上 |
protection.mod_entity_overflow |
指定模组/命名空间实体超过阈值 | threshold, namespace, cooldownSeconds |
protection.spawn_burst |
短时间实体生成洪泛 | threshold, cooldownSeconds |
protection.command_block_rate |
命令方块执行洪泛 | threshold, cooldownSeconds |
protection.slow_tick |
连续慢刻 | threshold(毫秒), consecutive, cooldownSeconds |
protection.loaded_chunk_overflow |
已加载区块过多 | threshold, cooldownSeconds |
protection.memory_pressure |
JVM 堆占用过高 | threshold(百分比), cooldownSeconds |
阈值使用严格的“超过”语义:数量等于阈值时不会触发。编辑器默认 60 秒冷却,冷却键按触发器、维度、范围和模组命名空间隔离,避免一次洪泛刷满触发器队列。
事件上下文可直接用于条件、富文本和任意支持变量的操作:
{protection.kind}、{protection.scope}、{protection.count}、{protection.threshold}、{protection.excess};{protection.removed}、{protection.action}、{protection.reason};{protection.namespace}、{protection.windowTicks}、{protection.windowSeconds}、{protection.consecutive};{protection.heapUsedBytes}、{protection.heapMaxBytes}、{protection.commandSource};- 适用时还包含
{world.dimension}、{chunk.x}、{chunk.z}和被拒绝实体的类型、UUID、坐标。
例如可为 protection.mod_entity_overflow 设置 namespace=create、threshold=200,然后广播位置、写入日志、执行管理员自定义处置触发器或发送 Web 通知。保护事件本身不具备玩家上下文,不能直接使用传送、踢出、私聊等玩家专用操作。
调整建议
- 先观察正常高峰期的实体、区块和 MSPT,再逐步降低阈值;大型整合包不要直接套用小型原版服的数值。
- 每区块限制应不大于对应每维度限制,掉落物/生物限制也不能超过实体总限制;服务端和 Web 页面都会拒绝不一致配置。
removeExcessItems是唯一会主动移除已有对象的选项。若希望只告警,关闭它,并关闭blockExcessSpawns或提高硬限制。- 对 Create 等模组可用命名空间事件设置更低的告警阈值,而保留较宽松的全局硬上限。
- 对确需高频运行的合法命令方块,应提高每秒上限或关闭命令方块熔断,并用命令策略限制危险的
summon/execute路径。