应用斩击

应用斩击

AE2存储元件,适用于类型密集型工作负载——数千把独特的SlashBlades,或任何不可堆叠的物品。

应用能源学 2

Applied Slash — SlashBlade 与不可堆叠存储元件

专为类型密集型负载打造的存储方案。 AE2 自带的存储元件被硬性限制在 63 种类型。但 SlashBlade、附魔装备和带有磨损的工具每一个都是独立的存储键——63 远远不够。Applied Slash 添加了两个 ME 存储元件,配备自定义元件库存,将类型上限提升至数千,并将数据负载迁移到世界侧的碎片化存储中。


两种元件

SlashBlade 存储元件

  • 仅接受 SlashBlade——双重检测(物品标签 slashblade:swords + ItemSlashBlade 类检查),因此附加模组的刀也能被覆盖
  • 默认上限:5000 种类型(可配置 64 – 20000)
  • 始终优先询问此元件。 传入的刀会落入此处,不受任何其他存储全局优先级的影响
  • 插入时会剥离运行时状态,因此同一把刀无论处于何种战斗状态都算作同一个键——这是降低每 tick 网络开销最有效的方法

不可堆叠物品存储元件

  • 仅接受不可堆叠物品(getMaxStackSize() == 1)
  • 排除 SlashBlade(它们始终进入刀元件——归属由规则决定,绝不由遍历顺序决定)
  • 排除存储元件(不允许元件嵌套)
  • 默认上限:2000 种类型(可配置 64 – 20000)
  • 不剥离任何内容。 工具的耐久度、附魔和自定义名称就是它的身份——因此每一件磨损不同的工具都会占用一个类型槽位

兼容性

组件 版本
Minecraft 1.21.1
NeoForge 21.1.250+
Applied Energistics 2 19.2.17+ (使用元件所必需)
SlashBlade: Resharpened 2.0.7+ (可选——仅刀元件需要)
环境 客户端和专用服务器

没有 AE2 时不会注册任何内容(会输出一行日志说明)。没有 SlashBlade 时元件仍然存在,但不接受任何物品——工具提示会明确说明这一点,而不是假装元件是空的。


性能(实测,非估算)

真正关键的是每 tick 的网络缓存重建,其开销与整个网络中可见的不同键的数量成正比。在专用服务器上实测,单个元件:

类型数量 最佳情况每 tick 开销
200 0.011 ms
1000 0.090 ms
2000 0.292 ms
5000 0.959 ms

其中大部分开销发生在 AE2 自身的 KeyCounter 内部,而非本模组——因此唯一真正可控的杠杆是你在网络中保留了多少个不同的键。这正是类型上限存在的原因,也是它们可配置的原因。

其他实测数据:

  • 元件物品的 NBT:恒定 1089 字节,无论存储了多少内容
  • 数据负载存放于 16 个世界侧碎片中——单次更改只重写脏的 1/16
  • 插入:5000 种类型时每次操作 约 4.1 µs
  • 5000 个键同步到客户端约 108 KB

致整合包开发者

配置项 默认值 备注
maxTypes 5000 刀元件类型上限。请根据你的服务器规模调整
unstackableMaxTypes 2000 不可堆叠元件类型上限
stripRuntimeState true 保持开启——它会将同一把刀在不同战斗状态下合并
acceptBeyondMaxTypes false 保持关闭。开启会移除唯一的性能防线

建议: 在繁忙的整合包中,将 maxTypes 设置为 1000–2000(0.09–0.29 ms/tick)。当你的 tick 预算有余量时,5000 也可以。


已知限制(请阅读)

  1. 元件无法预填充,其数据负载也无法通过复制物品来迁移。 刀的数据存储在世界侧;元件物品只是一个键。将元件复制到另一个存档会得到一个空壳,世界侧会报告“此存档中未找到刀数据”——工具提示中已如实说明。
  2. 不支持元件工作台分区,也不支持升级卡(模糊 / 反相 / 均分 / 虚空)。这是有意为之:对于一个只接受特定物品的元件,分区毫无意义,而一个不起作用的白名单只会是虚假功能。
  3. 不包含捆绑依赖——请单独安装 AE2(以及 SlashBlade,如果你需要刀元件)。