
创建:时钟控制
创建Tick控制优化智能方块实体,使tick优化在服务端和客户端生效。
查看大图Create Tick Controller
Create 模组的高级性能优化
Create Tick Controller 是一款强大的服务端性能优化模组,可动态控制 Create 模组机械组件的 Tick 速率。专为大型工厂建设和服务器环境设计,通过智能节流方块实体更新来防止 TPS 下降,同时保持客户端的视觉同步。
目录
- 功能概览
- 工作原理
- 性能基准测试
- 安装方法
- 命令参考
- 配置指南
- 技术深入解析
- 最佳实践
- 常见问题解答
功能概览
核心功能
| 功能 | 描述 |
|---|---|
| 全局 Tick 除数 | 一次性降低所有 Create 方块实体的 Tick 频率 |
| 按类型除数 | 针对特定机器类型微调 Tick 速率(例如,仅降低磨盘的速度) |
| 黑名单系统 | 保护关键机器免受全局节流影响 |
| 动态 TPS 控制 | 使用可配置公式根据服务器 TPS 自动调整 Tick |
| 紧急 MSPT 保护 | 服务器负载过高时激活的安全网 |
| 客户端动画同步 | 动画在视觉上反映实际 Tick 速率——无不同步问题 |
| 网络同步 | 所有设置自动同步到连接的客户端 |
支持的方块实体(80+ 种)
| 类别 | 示例 |
|---|---|
| 动力系统 | 传送带、齿轮箱、传动轴、离合器、换挡器、飞轮…… |
| 加工设备 | 磨盘、粉碎轮、锯片、搅拌器、动力压制机…… |
| 物流系统 | 漏斗、滑槽、机械臂、投掷器、打包机…… |
| 流体系统 | 泵、管道、软管卷筒、喷口、流体储罐…… |
| 动态装置 | 轴承、滑轮、活塞、龙门架、升降机…… |
| 红石系统 | 辉光管、显示链接、红石链接…… |
| 列车系统 | 车站、信号灯、轨道、列车控制…… |
工作原理
Tick 除数概念
| 游戏 Tick | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 正常(无除数) | TICK | TICK | TICK | TICK | TICK | TICK |
| 除数 = 3 | TICK | SKIP | SKIP | TICK | SKIP | SKIP |
| 除数 | 执行的 Tick | 跳过的 Tick | CPU 负载降低 | |||
| 3 | 1 / 3 | 2 / 3 | ~66% |
关键洞察:除数为 3 意味着方块实体仅每 3 个 Tick 处理一次,将该实体类型的 CPU 负载降低约 66%。
分布式 Tick 调度
为防止延迟峰值,所有实体不会在同一帧进行 Tick。相反,它们使用基于位置的偏移进行分布:
除数 = 4,四个传送带段位于不同位置:
| 游戏 Tick | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 传送带 A | TICK | TICK | TICK | |||||||||
| 传送带 B | TICK | TICK | TICK | |||||||||
| 传送带 C | TICK | TICK | TICK | |||||||||
| 传送带 D | TICK | TICK | TICK |
结果:负载均匀分布在所有 Tick 上!
客户端动画同步
该模组使用 Mixins 在客户端拦截动画计算:
服务器:方块以 1/4 速度 Tick(除数=4)
↓
网络:除数同步到客户端
↓
客户端:动画速度 = 原始速度 / 4
↓
视觉效果:齿轮转动速度慢 4 倍,与实际处理速度一致
性能基准测试
测试环境
硬件: Intel i7-10700K, 32GB RAM, NVMe SSD
Minecraft: 1.21.1 (NeoForge)
Create 模组版本: 6.0.8 和 6.0.9
测试世界: 超平坦世界,配有受控工厂布局
基准测试 1:大型传送带网络
设置:500 个传送带段循环运送物品
| 除数 | MSPT | TPS | CPU 使用率 | 物品/秒 | 效率 |
|---|---|---|---|---|---|
| 1 | 78.5 | 12.7 | 94% | 1000 | 100.00% |
| 2 | 52.3 | 19.1 | 71% | 500 | 50.00% |
| 4 | 38.1 | 20.0 | 52% | 250 | 25.00% |
| 8 | 31.2 | 20.0 | 43% | 125 | 12.50% |
| 16 | 27.8 | 20.0 | 38% | 62 | 6.25% |
基准测试 2:加工工厂
设置:50 个磨盘 + 50 个机械压制机 + 100 个漏斗
| 除数 | MSPT | TPS | 吞吐量 | 备注 |
|---|---|---|---|---|
| 1 | 89.2 | 11.2 | 100.00% | 无法游玩的延迟 |
| 2 | 58.7 | 17.0 | 50.00% | 明显改善 |
| 4 | 41.3 | 20.0 | 25.00% | TPS 完全恢复 |
| 8 | 33.6 | 20.0 | 12.50% | 对此设置过大 |
基准测试 3:混合工厂(真实场景)
设置:带有列车、加工和物流系统的完整工厂
- 200 个传送带段
- 30 个机械臂
- 40 个漏斗
- 20 个磨盘
- 10 个粉碎轮
- 5 个有活跃列车的车站
*优化配置:
| 配置 | MSPT | TPS | 描述 |
|---|---|---|---|
| 无模组 | 125.4 | 8.0 | 严重延迟,无法游玩 |
| 全局除数 = 4 | 45.2 | 20.0 | 可游玩,处理速度慢 |
| 优化的按类型配置 | 38.7 | 20.0 | 最佳平衡 |
| 紧急模式激活 | 42.1 | 20.0 | 负载高时自动调整 |
示例:优化的按类型除数
组件 除数 传送带 2 机械臂 4 磨盘 8 粉碎轮 4 漏斗 2
MSPT 降低图表
MSPT 按除数的改进(200 个方块实体)
125 ─┤ ██████████████████████████████████████████ 基准线
│
100 ─┤ ██████████████████████████████████ 除数=2 (-20%)
│
75 ─┤ ████████████████████████████ 除数=3 (-40%)
│
50 ─┤ ██████████████████████ 除数=4 (-56%)
│
40 ─┤ █████████████████ 除数=6 (-68%)
│
30 ─┤ █████████████ 除数=8 (-76%)
│
25 ─┤ ██████████ 除数=12 (-80%)
│
20 ─┤ ████████ 除数=16 (-84%)
├──────────────────────────────────────────────
0 25 50 75 100 125 MSPT
| 除数 | MSPT | 备注 |
|---|---|---|
| 1 | 125 | 基准线 |
| 2 | 100 | 除数=2 (-20%) |
| 3 | 75 | 除数=3 (-40%) |
| 4 | 50 | 除数=4 (-56%) |
| 6 | 40 | 除数=6 (-68%) |
| 8 | 30 | 除数=8 (-76%) |
| 12 | 25 | 除数=12 (-80%) |
| 16 | 20 | 除数=16 (-84%) |
CPU 时间分布
| 类别 | 无模组 (%) | 除数=4 (%) |
|---|---|---|
| Create 方块实体 | 45% | 12% |
| 世界 Tick | 22% | 22% |
| 实体处理 | 18% | 18% |
| 其他 | 15% | 15% |
| 余量 | 0% | 33% |
安装方法
系统要求
- Minecraft 1.21.1
- NeoForge 21.1.x 或更高版本
- Create 模组 6.0+
安装步骤
- 从 CurseForge 下载最新版本
- 将
.jar文件放入mods文件夹 - 启动游戏——配置文件将自动生成
- 使用
/tickcontrol命令进行配置(需要 OP 等级 2)
命令参考
基本命令
/tickcontrol status
显示当前 Tick 控制器状态,包括:
- 全局 Tick/同步除数
- 活跃的类型特定除数
- 黑名单类型
- 动态/紧急系统状态
- 当前 TPS/MSPT 读数
全局控制
/tickcontrol global <1-200> 设置全局 Tick 除数
/tickcontrol sync <1-200> 设置全局同步除数(网络更新)
/tickcontrol reset 将所有设置重置为默认值
按类型控制
/tickcontrol type <TypeName> <1-200> 设置特定类型的除数
/tickcontrol type <TypeName> reset 重置类型以使用全局除数
/tickcontrol list [dimension] 按类型列出所有方块实体
示例——仅降低磨盘速度:
/tickcontrol type MillstoneBlockEntity 8
黑名单管理
/tickcontrol blacklist add <TypeName> 保护类型免受全局除数影响
/tickcontrol blacklist remove <TypeName> 移除保护
/tickcontrol blacklist list 显示所有黑名单类型
/tickcontrol blacklist clear 清空整个黑名单
示例——保护车站:
/tickcontrol blacklist add StationBlockEntity
动态 TPS 控制
/tickcontrol dynamic pause 暂停自动 TPS 调整
/tickcontrol dynamic resume 恢复自动调整
配置指南
配置文件位置:config/createtickcontroller-server.toml
动态 TPS 系统
[dynamic]
# 启用基于公式的 Tick 除数计算
enabled = false
# 使用 TPS 变量的公式(0-20)
# 示例:
# "3 * (21 - tps)" — 激进缩放
# "(20 - tps) * 2" — 中等缩放
# "tps < 15 ? 10 : 1" — 二元阈值
# "max(1, (20-tps) * 5)" — 带最小上限
formula = "3 * (21 - tps)"
# 检查间隔(Tick 为单位)(20 = 1 秒)
updateInterval = 20
# 除数范围
minDivisor = 1
maxDivisor = 50
# 计算用的目标 TPS
targetTps = 20.0
公式示例
| 公式 | 行为 |
|---|---|
3 * (21 - tps) |
18 TPS 时 → 除数 9,15 TPS 时 → 除数 18 |
(20 - tps) * 2 |
18 TPS 时 → 除数 4,15 TPS 时 → 除数 10 |
tps < 15 ? 10 : 1 |
二元:低于 15 TPS 时除数为 10,否则为 1 |
min(20, max(1, (20-tps)*3)) |
钳位激进缩放 |
公式变量:
tps—— 当前服务器 TPS(0-20)targetTps—— 配置的目标值(默认 20)mspt—— 当前每 Tick 毫秒数
支持的函数:
min(a, b)、max(a, b)、abs(x)floor(x)、ceil(x)、round(x)sqrt(x)、pow(base, exp)- 三元运算符:
condition ? valueIfTrue : valueIfFalse
紧急 MSPT 系统
[emergency]
# 启用基于 MSPT 的安全系统
enabled = true
# 触发阈值 MSPT(50 毫秒 = 20 TPS)
msptThreshold = 55.0
# 开始恢复的 MSPT 水平
recoveryMspt = 45.0
# 每步增加除数的量
increment = 2
# 恢复期间减少的量
decrement = 1
# 检查间隔(Tick 为单位)
updateInterval = 10
# 最大紧急除数
maxDivisor = 100
紧急系统行为
MSPT 时间线示例:
| 步骤 | MSPT | 除数 | 阈值 | 恢复 | 备注 |
|---|---|---|---|---|---|
| 1 | 56 | 1 | 55 | 45 | 高于阈值 |
| 2 | 58 | 3 | 55 | 45 | 峰值(高于阈值) |
| 3 | 55 | 5 | 55 | 45 | 达到/高于阈值 |
| 4 | 50 | 5 | 55 | 45 | 下降中 |
| 5 | 44 | 4 | 55 | 45 | 低于恢复(递减) |
| 6 | 40 | 3 | 55 | 45 | 恢复中 |
| 7 | 56 | 5 | 55 | 45 | 峰值(高于阈值) |
| 8 | 50 | 5 | 55 | 45 | 下降中 |
| 9 | 44 | 4 | 55 | 45 | 低于恢复(递减) |
| 10 | 40 | 3 | 55 | 45 | 恢复中 |
| 11 | 35 | 2 | 55 | 45 | 最低点 |
| 12 | 40 | 1 | 55 | 45 | 趋于稳定 |
| 除数: | 1 → 3 → 5 → 5 → 4 → 3 → 5 → 5 → 4 → 3 → 2 → 1 | ||||
| 操作: | MSPT > 55 时递增,MSPT < 45 时递减 |

阈值(55)和恢复值(45)之间的间隔可防止振荡。
技术深入解析
架构总览
| 服务器端 | ||||
|---|---|---|---|---|
| DynamicTickController(TPS / MSPT 监视器) | → | TickControllerManager - globalTickDivisor - typeTickDivisors - blacklistedTypes - shouldTick() |
→ | SmartBlockEntityMixin (拦截 Tick 调用) |
| TickControllerConfig(TOML) | → | TickControllerManager | ||
| 网络同步 | TickDivisorSyncPacket - globalDivisor - syncDivisor - typeDivisors - blacklist |
|||
| 客户端 | ClientTickManager - store divisors - getDivisorForType() - getAnimationSpeedMultiplier() |
|||
| ↓ | ||||
| KineticBE 渲染器 Mixin | RotatingInstance Mixin(飞轮) | LinearActuator Mixin(滑轮) | ||
| 动画速度 = 原始速度 / 除数 |
Mixin 注入点
- 服务端:Tick 节流
- 客户端:动画同步
shouldTick() 算法
内存占用
| 组件 | 内存使用 |
|---|---|
| TickControllerManager | ~2 KB(静态映射) |
| ClientTickManager | ~1 KB(服务器状态的镜像) |
| 每实体开销 | 0 字节(使用现有的位置哈希) |
| 网络数据包 | 每次同步 ~200 字节 |
最佳实践
推荐配置
推荐配置片段(TOML)
小型服务器(1–5 名玩家,轻量工厂)
| 键 | 值 |
|---|---|
| dynamic.enabled | FALSE |
| emergency.enabled | TRUE |
| emergency.msptThreshold | 55 |
| emergency.recoveryMspt | 48 |
| emergency.increment | 1 |
| emergency.decrement | 1 |
中型服务器(5–20 名玩家,中等工厂)
| 键 | 值 |
|---|---|
| dynamic.enabled | TRUE |
| dynamic.formula | 2 * (20 - tps) |
| dynamic.minDivisor | 1 |
| dynamic.maxDivisor | 20 |
| emergency.enabled | TRUE |
| emergency.msptThreshold | 52 |
| emergency.recoveryMspt | 45 |
| emergency.increment | 2 |
| emergency.decrement | 1 |
大型服务器(20+ 名玩家,大型工厂)
| 键 | 值 |
|---|---|
| dynamic.enabled | TRUE |
| dynamic.formula | 4 * (21 - tps) |
| dynamic.minDivisor | 1 |
| dynamic.maxDivisor | 50 |
| emergency.enabled | TRUE |
| emergency.msptThreshold | 50 |
| emergency.recoveryMspt | 40 |
| emergency.increment | 3 |
| emergency.decrement | 1 |
| emergency.maxDivisor | 100 |
按类型优化指南
| 方块实体类型 | 推荐除数 | 原因 |
|---|---|---|
| BeltBlockEntity | 2-4 | 数量多,视觉影响大 |
| MillstoneBlockEntity | 4-8 | 本来处理就慢 |
| CrushingWheelController | 4-8 | 计算量大 |
| MechanicalArmBlockEntity | 2-4 | 需要精度 |
| FunnelBlockEntity | 2-4 | 工厂中数量多 |
| ChainConveyorBlockEntity | 2-4 | 类似传送带 |
| PumpBlockEntity | 4-8 | 流体计算密集 |
| MechanicalMixerBlockEntity | 4-8 | 配方处理 |
| StationBlockEntity | 1 (黑名单) | 对列车系统至关重要 |
| SignalBlockEntity | 1 (黑名单) | 安全性关键 |
应纳入黑名单的对象
始终考虑将以下内容列入黑名单:
- 列车基础设施:
StationBlockEntity、SignalBlockEntity、TrackBlockEntity - 红石时序:
SequencedGearshiftBlockEntity、BrassDiodeBlockEntity - 玩家交互:
ToolboxBlockEntity、LecternControllerBlockEntity
常见问题解答
问:这会让我的动态装置出问题吗?
答: 不会。动态装置(移动结构)由 Create 以不同方式处理,不受此模组影响。只有静止的方块实体会被节流。
问:传送带上的物品会丢失吗?
答: 不会。物品仍会被处理,只是频率降低了。除数为 4 时,物品以 1/4 速度移动,但绝不会消失。
问:为什么我的齿轮看起来转得慢?
答: 这是有意为之!客户端动画与服务器 Tick 速率同步,让你可以直观确认节流正在工作。这也有助于玩家理解为什么处理速度变慢了。
问:我可以在连接原版服务器时在客户端使用此模组吗?
答: 此模组必须在服务端安装。客户端需要安装它以查看同步动画,但所有节流逻辑由服务器控制。
问:这能与 Create 模组的插件兼容吗?
答: 可以!任何扩展 SmartBlockEntity 的插件都会被自动节流。你可以为插件特定的机器使用按类型除数。
问:动态系统和紧急系统有什么区别?
答:
- 动态系统:主动式,基于公式,根据当前 TPS 调整
- 紧急系统:被动式,基于阈值,为突发延迟峰值的提供安全网
- 两者可同时运行:
最终除数 = max(动态, 紧急)
问:如何找到方块实体的类型名称?
答: 使用 /tickcontrol list 查看所有已加载的 Create 方块实体,按类型名称分组。
Create Tick Controller 与 Create 模组团队无关。Create 由 simibubi 和 Create 团队开发。
正在加载版本记录…



正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。