介绍
DoesPotatoTick — 概览
DoesPotatoTick 通过暂停(“冻结”)不需要每个 tick 都更新的远处实体来提升性能。借助可配置的规则和安全检查,它可以降低服务器 CPU 负载,并且还可能提高客户端 FPS,同时保持正常的游戏行为。
1. 用途
Minecraft 每秒会更新每个实体 20 次,这可能会让拥有大型世界、众多玩家或大型整合包的服务器负载过高。原版设置无法区分重要实体和无关实体。
DoesPotatoTick 引入了一个受控系统,只更新必要的内容。
2. 核心机制
每个实体都会被分配一个 可更新 状态。服务器会根据位置、类别和上下文在每个 tick 评估该状态;客户端则可以选择跳过不可更新实体的渲染。
2.1 基于距离的激活
- 玩家会定义一个活跃区域(可配置的区块半径)。
- 位于该区域之外的实体会成为暂停候选对象。
- 只有当玩家在区块之间移动、登录或切换维度时,区域才会更新。
2.2 维度与领地支持
- 可以将优化限制在选定的维度中。
- 已声明区域(FTB Chunks、OpenPartiesAndClaims)中的实体始终会更新。
- 如果未安装领地模组,玩家会收到通知。
2.3 实体例外
某些实体永远不会被冻结:
- 玩家、下落中的方块、原版 Boss
- 大量模组 Boss 和机械系统
- 整个模组都可以加入白名单
配置发生变化时,列表会自动重新加载。
2.4 筛选规则
可配置的规则允许忽略或包含以下对象:
- 敌对生物、动物、灾厄
- 掉落物
- 投射物(可选逻辑会强制命中目标进行更新)
正在死亡的实体可以完成其死亡过程。
2.5 刷怪塔检测
系统会定期扫描区块中的实体密度;如果检测到类似刷怪塔的模式,就会强制相关实体进行更新,以确保刷怪塔继续正常运行。
2.6 袭击处理
在进行中的袭击期间,可以根据配置禁用或调整优化。
3. 客户端功能
3.1 跳过渲染
不可更新的实体可能会被隐藏,以提高 FPS。
拉弓时会临时重新启用渲染,从而避免瞄准问题。
3.2 Embeddium 集成
安装 Embeddium 后,会添加一个专用的配置界面。
3.3 同步
轻量级数据包会告知客户端哪些实体应该显示。
4. 配置
- doespotatotick-common.toml:服务器核心行为
- doespotatotick-client.toml:渲染控制
- 默认设置优先考虑安全性和兼容性。
- 所有逻辑都在服务器线程上运行;更改会在各个 tick 和重新加载过程中保持一致地生效。
5. 让 DPT 变得更好
如果你:
- 觉得某种特定的实体类型不应该停止更新
- 有配置选项方面的需求
- 因实体更新被冻结而遇到意外情况
欢迎通过 GitHub Issues 或电子邮件 [email protected] 联系我
6. 设计考量
该模组旨在:
- 降低服务器负载,同时不改变游戏玩法
- 保留 Boss 战、农场和模组机制
- 继续兼容现有的模组生态
它的行为更像是一套受控且具备上下文感知能力的调度系统,而不是简单的“禁用远处实体”开关。
7. 一点历史与演变
DoesPotatoTick 并不是一开始就拥有如今这样完善的表现。
它最初是 Txni 的 DoesItTick 的一个分支,纯粹是为了给锂/RoadRunner 生态提供临时兼容性修复。最初的版本说实话相当粗糙:只有少数几个配置选项,而且每一个实体在每一次 tick 中,都会遍历所有在线玩家,检查“有没有人在足够近的地方?”
这意味着每 tick 都要执行 O(实体数量 × 玩家数量) 次操作——在一台拥有 2 万个实体和 50 名玩家的服务器上,仅这一项每秒就会额外增加数百万次不必要的迭代。简直是纯粹的暴力。
旧版的 dpt$checkAlwaysTick() 同样令人头疼:它每 tick 都会对每个实体执行开销很高的配置和标签检查,而且完全没有缓存。
客户端也没有任何渲染修复——被冻结的实体只会在原地卡顿并“鬼影”般闪烁,看起来就像坏掉了一样。
当我们更新这个模组后,一切都发生了改变:
- 用现在的 PlayerTracker 替换了天真的玩家遍历逻辑:它使用维度 → 区块 → Y 范围的空间映射,并且只在玩家移动时延迟更新。复杂度从 O(n×m) 降低到了每次更新基本为 O(玩家数量)。
- 现在,
alwaysTick标志会在实体类型注册时计算一次,并永久缓存。 - 加入了完善的网络数据包和客户端实体剔除机制(以及拉弓保护机制),因此被冻结的实体会干净利落地消失,而不是出现故障。
- 生物农场检测、袭击感知、领地模组集成、Embeddium GUI……这些功能在当时全都不存在。
如今的 DoesPotatoTick 已经不再只是“又一个实体剔除模组”。它经历了多次完整重构,凝聚了我们对正确实现这一目标的执着——同时绝不破坏你的 Boss、农场或机械动力装置。
感谢 Txni 带来的最初灵感,也感谢每一位测试者和贡献者,以及帮助我设计、编写和润色这篇介绍的 Grok 和 ChatGPT(我一个人写 README 的时候真的已经累得不行了,哈哈)。
享受黄油般顺滑的 tick 吧(或者说,享受没有 tick 的顺滑感)!
_nArUTo_ 的其他作品
查看全部 →Redirector [Modern]
重定向代码中 Enum#values() 的内存分配,提升游戏性能。
Dimensional Sync Fixes
修复玩家切换维度时药水/经验同步问题。
Sparse Structures Reforged
让所有结构分布得更分散(本质上就是让它们更稀有),使探索更具挑战性、减少重复感。
DespawnTweaker
更好的 Let Me Despawn 优化 | 不允许刷怪笼生成的生物消失
评论
登录后评论和评分