黄鹂

在专用服务器上进行了实时测试,有3名活跃玩家在线,运行包含200多个模组的自定义Forge模组包,以及BlazeandCave的进度包, 该包添加了超过950个进度。使用Spark工具收集了一小时的数据。

资源介绍

库存变更触发器优化 摘要 优化了获取物品时触发进度(advancement)的机制; 可能会破坏与原版的一致性,但不影响原版进度,也不应影响绝大多数模组/数据包; 即使确实影响了某些内容,玩家仍然可以通过丢弃并重新拾取所需物品之一来获得进度; 目前已知没有不兼容或问题; 所有对原版代码的注入都可在配置文件中禁用。 所有更改均为服务器端。 结果 在专用服务器上进行了实时测试,有3名活跃玩家在线,运行包含200多个模组的自定义Forge模组包,以及 BlazeandCave的进度包 , 该包添加了超过950个进度。使用Spark工具收集了一小时的数据。 启用Icterine后,InventoryChangeTrigger的执行速度几乎快 2.5倍 (截至1.1.0版本),每次刻占用约7.5%的时间,而原版占用20%。 Icterine 1.0.0 的统计数据对比(约快2倍): 原版 InventoryChangeTrigger 的工作原理 1. 当游戏检测到玩家背包中的物品堆栈发生变化时,会调用 InventoryChangeTrigger。这包括拾取物品、丢弃物品、丢弃整个堆栈以及在背包内移动物品。 此外,当你打开容器(箱子、熔炉等)时,游戏会认为你背包中的所有槽位都发生了变化,并为所有槽位(包括空槽位)调用触发器。 2. InventoryChangeTrigger 会统计你背包中为空、非空和完全填满的槽位数量。这些信息 可用于进度触发条件 , 但在原版中并未使用。 3. InventoryChangeTrigger 会遍历已注册的进度标准。 4. 如果标准有槽位数量要求且不匹配第 2 步中的值,或者标准没有物品要求,则该标准将被跳过。 5. 如果标准只有一个物品要求,则检查更改后的堆栈是否符合此要求。 6. 如果标准有多个物品要求(例如,“用碎片覆盖我”要求拥有全套下界合金盔甲), 每个 库存中的物品堆栈会与每一项需求进行比对(但已满足的需求会被移除,不再参与后续比对)。 7. 物品匹配,尤其是针对标签的匹配,计算开销非常大。但游戏会先检查玩家物品的类型是否与需求中指定的类型一致,然后再检查数量、附魔和其他 NBT 数据等其他参数。 Icterine 优化机制的工作原理 1. 在第 1 步中,当丢弃物品堆栈或将其移出背包(例如放入箱子)时,不要调用 InventoryChangeTrigger。这由配置文件中的 ignore_triggers_for_emptied_stacks 参数控制。 2. 同样地,如果物品堆栈的变化是由于堆栈数量减少但未完全清空引起的(例如玩家从满堆物品中丢弃单个物品),也不要调用 InventoryChangeTrigger。由 ignore_triggers_for_decreased_stacks . 3. 此外,如果堆叠数量增加但未达到任何进度的阈值,则不要调用 InventoryChangeTrigger。例如,泥土堆叠数量从 52 增加到 53,但在你的模组包中没有获得 53 个泥土的进度。由 optimize_triggers_for_increased_stacks . 4. 修改游戏在玩家打开容器界面时检查物品变化的方式,这样在你打开任何物品时,它不会将所有的堆叠视为已更改。由 initialize_inventory_last_slots . 5. 在第 6 步中,首先检查变化的槽位是否匹配任何要求,然后再检查背包中的其他堆叠。由 optimize_multiple_predicate_trigger . 6. 在第 7 步中,首先比较堆叠数量以避免不必要的标签匹配。还使用之前的堆叠数量以避免更多的不必要匹配。由 check_count_before_item_predicate_match . 支持的版本 Icterine v1.2.0 适用于 Minecraft Fabric/Quilt 1.18.2 至 1.19.4,以及 Forge 1.18.2 至 1.19.2 (锻造时刻) . Icterine v1.3.0 拥有与 v1.2.0 相同的功能,并适用于 Fabric/Quilt 1.20 - 1.20.4、Forge 1.19.3 - 1.20.4 以及 NeoForge 1.20.1 - 1.20.4。 在 文件页面 选择正确的文件。 如果您需要任何其他版本的端口,请提交问题或在 Discord 服务器上提问。

在鱼乐云资源中心浏览该资源,登录后可一键安装到你的游戏服务器。

返回资源中心