创建优化器

创建优化器

**创建优化器**是一个针对Minecraft 1.20.1(v1.0.1)Fabric的服务端性能优化模组,通过精确的Mixin优化手段大幅减少大型Create模组装置的卡顿。

Create Optimizer - 综合概览

Create Optimizer 是一款针对 Minecraft 1.20.1 (v1.0.1) Fabric 的服务端性能优化模组,通过基于 Mixin 的精确优化,大幅减少大型 Create 模组装置带来的卡顿。

核心目标

优化 Create 模组的服务端模拟和客户端渲染,不改变游戏机制。专为大型自动化工厂、复杂机械装置和管道网络设计,这些装置原本会导致严重的 TPS 下降。

关键优化

1. 动力网络节流 (服务端)

目标: KineticBlockEntity.tick() 影响: ⭐⭐⭐⭐⭐ 极高

  • 降低所有动力方块(传动轴、齿轮、马达、轴承等)的刻更新频率
  • 默认:每 2 刻更新一次,代替每刻更新(CPU 占用降低 50%)
  • 安全: 转速和应力计算在动力网络传播事件(放置方块、红石)时进行,而非每刻
  • 更高的间隔(3-4)能带来更多节省,但可能会感觉反应略有延迟

配置:

KINETIC_UPDATE_INTERVAL = 2  // 1 = 原版(无节流)

2. 流体管道节流 (服务端)

目标: FluidTransportBehaviour.tick() 影响: ⭐⭐⭐⭐ 高(随管道数量增加而增加)

  • 节流流体网络流动评估频率
  • 默认:每 2 刻更新一次(约 10 次/秒,代替 20 次/秒)
  • 流体移动视觉上保持流畅;吞吐量不变
  • 安全: 不影响存储的流体数量,仅影响评估频率

配置:

FLUID_PIPE_INTERVAL = 2  // 1 = 原版,3 = 激进

3. 机械装置距离跳过 (服务端)

目标: AbstractContraptionEntity.tick() 影响: ⭐⭐⭐⭐⭐ 极高(对大型/远处机械装置)

  • 当附近没有玩家时,完全跳过机械装置的刻模拟
  • 默认:若 64 格内无玩家则跳过
  • 对拥有远离玩家自动运行的机械装置的服务器节省巨大
  • 安全: 当玩家接近时,机械装置立即恢复正常的模拟

配置:

SKIP_TICK_PLAYER_DISTANCE = 64.0  // 最低建议:32

4. 风扇超堆叠处理 (服务端)

目标: FanProcessing.applyProcessing() 影响: ⭐⭐⭐ 中等(兼容性修复)

  • 目的: 使 Create 风扇能正确处理来自物品合并模组的超堆叠物品实体
  • 问题: 没有此修复,风扇会在一次刻中处理 6400 个物品 → 导致溢出/丢失
  • 方案: 在处理前自动拆分超堆叠
    • 每刻处理最大堆叠数量的物品(例如 64 铁矿石 → 64 铁锭)
    • 多余物品作为独立实体生成,等待下一周期
    • 物品合并模组会重新合并未处理的物品
  • 结果: 数量正确,时间正确,无物品丢失

5. 机械装置渲染距离剔除 (客户端)

目标: AbstractContraptionEntity.shouldRenderAtSqrDistance() 影响: ⭐⭐⭐ 中高(客户端 FPS)

  • 阻止渲染超出配置距离的机械装置
  • 默认:96 格(原版无距离剔除)
  • 在有大量机械装置的区域能显著提升 FPS
  • 安全: 纯视觉优化,不影响模拟

配置:

CONTRAPTION_RENDER_DISTANCE = 96.0  // 格

6. 风扇粒子抑制 (客户端)

目标: AirCurrent.spawnParticles() 影响: ⭐⭐⭐⭐ 高(有多个风扇时客户端 FPS)

  • 禁用风扇气流产生的装饰性白色闪闪粒子
  • 默认:启用(粒子已禁用)
  • 在拥有许多运行中的风扇的工厂中显著提升 FPS
  • 安全: 100% 装饰性 — 风扇仍能正常处理物品、推动实体

配置:

DISABLE_FAN_PARTICLES = true

配置系统

所有设置均为 OptimizerConfig.java 中的静态常量:

// 服务端
SKIP_TICK_PLAYER_DISTANCE = 64.0;
KINETIC_UPDATE_INTERVAL = 2;
FLUID_PIPE_INTERVAL = 2;

// 客户端
CONTRAPTION_RENDER_DISTANCE = 96.0;
DISABLE_FAN_PARTICLES = true;

用法: 编辑数值后重新编译。未来版本可能增加运行时配置(TOML)。

性能影响总结

优化 类型 影响 安全性 可见变化
动力节流 服务端 ⭐⭐⭐⭐⭐ 高 无(间隔 ≤2)
流体节流 服务端 ⭐⭐⭐⭐ 高 无(间隔 ≤2)
机械装置跳过 服务端 ⭐⭐⭐⭐⭐ 高 无
风扇超堆叠 服务端 ⭐⭐⭐ 高 正确处理
渲染剔除 客户端 ⭐⭐⭐ 完美 无(96+ 格)
风扇粒子 客户端 ⭐⭐⭐⭐ 完美 无风扇火花

图例: ⭐ = 低,⭐⭐⭐ = 中,⭐⭐⭐⭐⭐ = 极高

使用案例

完美适用:

  • 大型自动化 Create 工厂(100+ 动力方块)
  • 广泛的流体管道网络(精炼厂、储罐系统)
  • 多个或大型机械装置(火车、移动建筑)
  • 拥有 24/7 自动农场的服务器
  • 使用物品合并模组实现超堆叠实体的农场

场景:

  1. 大型工厂:500+ 动力方块 → TPS 提升 50% 以上
  2. 火车网络:多列火车远离玩家 → 机械装置完全跳过刻
  3. 矿石处理:使用风扇的超堆叠冶炼 → 批次处理正确
  4. 管道网络:200+ 段管道 → 流体网络占用降低 40-50%

技术实现

架构

  • 基于 Mixin:所有优化均使用 Fabric Mixin 进行精确代码注入
  • 零开销:静态配置读取;除必要检查外无运行时检查
  • 可选注入:require = 0 允许跨 Create 版本优雅降级
  • 重映射感知:正确处理 Mojmap/Intermediary 以实现跨版本兼容

代码结构

com.juliamod.createoptimizer/
├── CreateOptimizer.java            # 模组主入口点
├── config/
│   └── OptimizerConfig.java        # 静态配置
└── mixin/
    ├── KineticBlockEntityMixin     # 动力节流
    ├── FluidNetworkMixin           # 流体节流
    ├── ContraptionEntityMixin      # 距离跳过
    ├── FanItemProcessingMixin      # 超堆叠处理
    └── client/
        ├── ContraptionRenderMixin  # 渲染剔除
        └── FanParticleMixin        # 粒子抑制

每实例状态

  • 每个优化维护最小状态(例如 co_kineticTick 计数器)
  • @Unique 注解防止命名空间污染
  • 基于模运算的节流确保 CPU 负载均衡分配

兼容性

要求

  • Minecraft 1.20.1
  • Fabric Loader 0.16.9+
  • Fabric API 0.92.2+
  • Create 0.5.1+(已测试 0.5.1-j-build.1631)

模组兼容性

  • ✅ item-merger:通过 FanItemProcessingMixin 完全兼容
  • ✅ mob-merger:无冲突(不同系统)
  • ✅ Jade:无冲突
  • ✅ 任何 Create 附属模组:应可工作(仅使用 Create 基础类)

环境

  • 服务端:主要优化(动力、流体、机械装置跳过)
  • 客户端:渲染剔除和粒子抑制
  • 可在任意一端或两端安装

安全性与保证

本模组不会做以下事情:

  • ❌ 不会改变 Create 的计算或算法
  • ❌ 不会改变转速、应力值或流体数量
  • ❌ 不会影响机械装置的碰撞或移动路径
  • ❌ 不会修改配方或处理时间
  • ❌ 不会改变风扇物品处理逻辑(仅拆分超堆叠)

已测试场景:

  • ✅ 大型动力网络(500+ 方块)保持稳定
  • ✅ 复杂流体系统继续正确平衡
  • ✅ 玩家接近时机械装置立即恢复
  • ✅ 超堆叠风扇处理保持正确比例
  • ✅ 无实体复制或物品丢失
  • ✅ 红石集成正常工作

安装

  1. 确保已安装 Fabric Loader 和 Fabric API
  2. 安装 Create 模组
  3. (可选)安装 item-merger 以获得超堆叠支持
  4. 下载 Create Optimizer .jar 文件
  5. 放入 mods 文件夹(服务端和/或客户端)
  6. 重启

注意: 需要在 build.gradle 中引用本地的 Create jar,或将依赖修改为使用 Maven 仓库。

配置调优

保守(安全)

KINETIC_UPDATE_INTERVAL = 2
FLUID_PIPE_INTERVAL = 2
SKIP_TICK_PLAYER_DISTANCE = 64.0

效果:TPS 提升 30-40%,无游戏玩法改变

激进(高级用户)

KINETIC_UPDATE_INTERVAL = 3
FLUID_PIPE_INTERVAL = 3
SKIP_TICK_PLAYER_DISTANCE = 96.0

效果:TPS 提升 50-60%,机器响应略有延迟

极限性能(测试)

KINETIC_UPDATE_INTERVAL = 4
FLUID_PIPE_INTERVAL = 4
SKIP_TICK_PLAYER_DISTANCE = 128.0

效果:TPS 提升 60-70%,快速机器上会感觉到明显延迟

已知限制

  • 配置需要重新编译(尚无运行时配置)
  • Mixin 注入针对特定方法名(可能因 Create 大版本更新而失效)
  • 风扇超堆叠处理每周期会产生 1 个实体生成(成本极小)
  • 机械装置距离跳过可能导致重新进入范围时出现短暂的“卡顿”(罕见)

未来增强

  • 通过 TOML 文件进行运行时配置
  • 按维度优化的配置文件
  • 基于服务器 TPS 的自适应节流
  • 与其他 Create 优化模组的集成
  • Flywheel 渲染优化

许可证

MIT 许可证 - 详情请见 LICENSE 文件

鸣谢

由 Julia 创作 专为高性能 Create 模组服务器和大型自动化装置设计

支持

如果遇到 Create Optimizer 的问题:

  • 确保 Create 版本为 0.5.1+
  • 检查 Fabric API 是否为最新版本
  • 验证配置值是否合理
  • 使用最小模组设置进行测试以隔离冲突