远物停载:土豆版

远物停载:土豆版

实体远离玩家时不允许其刻运行的性能模组

DoesPotatoTick — 概述

DoesPotatoTick 通过暂停(“冻结”)无需每刻更新的遥远实体来提升性能。通过可配置的规则和安全检查,它能降低服务器 CPU 负载,并可能在保留正常游戏行为的同时提高客户端 FPS。


1. 目标

Minecraft 每秒更新每个实体 20 次,这在大型世界、众多玩家或大型模组包中可能使服务器超载。原版设置无法区分重要实体与无关实体。 DoesPotatoTick 引入了一个受控系统,仅更新必要的实体。


2. 核心机制

每个实体被分配一个可 tick 状态。服务器每刻根据位置、类别和上下文评估该状态;客户端可选择跳过渲染不可 tick 的实体。

2.1 基于距离的激活

  • 玩家定义一个活动区域(可配置的区块半径)。
  • 此区域外的实体成为暂停候选。
  • 区域仅在玩家移动至不同区块、登录或切换维度时更新。

2.2 维度和领地支持

  • 优化可限制在特定维度。
  • 领地内(FTB Chunks、OpenPartiesAndClaims)的实体始终保持 tick。
  • 若未安装领地模组,玩家将收到通知。

2.3 实体例外

以下实体永不被冻结:

  • 玩家、掉落方块、原版 Boss
  • 大量模组 Boss 和机械系统
  • 整个模组可被列入白名单 配置更改后列表会自动重载。

2.4 过滤规则

可配置规则允许忽略或包含:

  • 敌对生物、动物、袭击者
  • 掉落物品
  • 投射物(可选择强制命中目标进行 tick) 濒死实体允许完成其死亡序列。

2.5 刷怪塔检测

定期扫描区块密度;若检测到类似刷怪塔的模式,受影响的实体将被强制 tick 以确保刷怪塔继续运作。

2.6 袭击处理

在活跃袭击期间,可根据配置禁用或调整优化。


3. 客户端功能

3.1 跳过渲染

不可 tick 的实体可能被隐藏以提升 FPS。 拉弓时会暂时重新启用渲染以避免瞄准问题。

3.2 Embeddium 集成

当安装 Embeddium 时,会添加一个专门的配置界面。

3.3 同步

一个轻量级数据包告知客户端哪些实体应被显示。


4. 配置

  • doespotatotick-common.toml:核心服务器行为
  • doespotatotick-client.toml:渲染控制
  • 默认值优先考虑安全性和兼容性。
  • 所有逻辑在服务器线程上运行;更改在刻和重载间一致应用。

5. 让 DPT 更好

当您:

  • 认为某个实体类型永远不应停止 tick
  • 有配置选项请求
  • 遇到因实体 tick 冻结导致的意外情况

请随时通过 GitHub Issues 或邮件 670067575@qq.com 联系我。


6. 设计考虑

该模组旨在:

  • 减少服务器负载而不改变游戏玩法
  • 保留 Boss 战、刷怪塔和模组机制
  • 与现有模组生态系统保持兼容

其行为类似于一个受控的、上下文感知的调度系统,而非简单的“禁用遥远实体”开关。


7. 一点历史与演变

DoesPotatoTick 并非以今天看到的精良模组起步。

它最初是 Txni 的 DoesItTick 的一个分支,纯粹作为锂/路跑者生态系统的临时兼容性修复而创建。原版坦率地说相当简陋:只有少数几个配置选项,并且每个实体在每个 tick 都会遍历所有在线玩家以检查“是否有人足够近?” 这在每刻产生 O(实体 × 玩家) 的计算量——在一个拥有 20,000 个实体和 50 名玩家的服务器上,这本身就每秒增加了数百万次不必要的迭代。纯属野蛮操作。

旧的 dpt$checkAlwaysTick() 同样痛苦:它每刻对每个实体执行昂贵的配置和标签检查,且无任何缓存。 也没有客户端渲染修复——冻结的实体只会卡顿并在原地“鬼影”,看起来像坏掉了。

当我们更新模组时,一切发生了变化:

  • 将简单的玩家循环替换为当前的 PlayerTracker:一个维度 → 区块 → Y 范围的空间映射,仅在移动时惰性更新。复杂度从 O(n×m) 降至几乎 O(玩家) 每次更新。
  • alwaysTick 标志现在在实体类型注册时计算一次并永久缓存。
  • 添加了合适的网络数据包和客户端剔除(加上拉弓安全阀),使冻结实体干净消失而非闪烁。
  • 刷怪塔检测、袭击感知、领地模组集成、Embeddium GUI……这些当初都不存在。

今天的 DoesPotatoTick 不再是“又一个实体剔除模组”。它是多次全面重构和痴迷于正确做事的结果——而绝不会破坏您的 Boss、刷怪塔或 Create 机械。

感谢 Txni 最初的灵感,感谢每一位测试者和贡献者,以及 Grok 和 ChatGPT 帮助我设计、撰写和润色这份描述(我自己写 Readme 时简直要死了 lol)。


享受丝滑般的 tick(或者说,丝滑般的无 tick)!