截图
介绍
概述
- 优化获取物品时触发进度的过程;
- 可能会破坏与原版的一致性,但不会影响原版进度,也不应影响绝大多数模组/数据包;
- 即使确实影响了某些内容,仍然应该只需丢下并捡起一个所需物品即可获得对应进度;
- 目前没有已知的不兼容或问题;
- 所有注入原版代码的功能都可以在配置文件中禁用。
- 所有改动均在服务端运行。
测试结果
在专用服务器上进行了实际测试,服务器中有 3 名玩家在线,运行着一个包含 200 多个模组的自定义 Forge 整合包,以及会新增超过 950 项进度的 BlazeandCave’s Advancements Pack。使用 Spark 收集了持续一小时的统计数据。
使用 Icterine 后,InventoryChangeTrigger 的执行速度几乎提升至原来的 2.5 倍(截至 1.1.0 版本),占用约 7.5% 的刻时间,而不是 20%。
Icterine 1.0.0 的统计对比(速度约提升 2 倍):

原版 InventoryChangeTrigger 的工作方式
- 当游戏检测到玩家物品栏中的物品堆发生变化时,就会为该物品堆调用 InventoryChangeTrigger。这包括捡起物品、丢弃物品、丢弃整组物品,以及在物品栏中移动物品。
- 此外,当你打开容器(箱子、熔炉等)时,游戏会认为你物品栏中的所有槽位都发生了变化,并为所有槽位调用触发器,包括空槽位。
- InventoryChangeTrigger 会统计你物品栏中的空槽位、非空槽位以及已完全填满的槽位数量。这些信息可以用于进度触发条件,但原版并未使用。
- InventoryChangeTrigger 会遍历已注册的进度条件。
- 如果某个条件有槽位数量要求,且这些要求与第 2 步中的数值不匹配,或者该条件没有物品要求,则跳过该条件。
- 如果某个条件只有一个物品要求,则会将发生变化的物品堆与该要求进行比对。
- 如果某个条件有多个物品要求(例如,“用残骸包裹我”要求拥有一整套下界合金盔甲),则会将物品栏中的每一个物品堆与每一项要求进行比对(但已满足的要求会被移除,不再继续检查)。
- 物品匹配过程,尤其是针对标签进行匹配时,开销非常大。不过,游戏会先检查玩家的物品类型是否与要求中的类型匹配,之后才会检查数量、附魔以及其他 NBT 数据等参数。
Icterine 的优化方式
- 在步骤 1 中,当你丢弃整组物品或将它们移出背包(例如放入箱子)时,不会调用 InventoryChangeTrigger。此功能由配置文件中的
ignore_triggers_for_emptied_stacks参数控制。 - 同样地,如果物品堆数量减少但没有被清空(例如玩家从一组完整的物品中丢出单个物品),也不会调用 InventoryChangeTrigger。此功能由
ignore_triggers_for_decreased_stacks参数控制。 - 此外,如果物品堆数量增加,但尚未达到任何进度的阈值,也不会调用 InventoryChangeTrigger。例如,泥土数量从 52 增加到 53,但你的整合包中没有要求获得 53 个泥土的进度。此功能由
optimize_triggers_for_increased_stacks参数控制。 - 修改玩家打开容器界面时检查物品变化的方式,避免在你打开任何容器后将整组物品都视为已发生变化。此功能由
initialize_inventory_last_slots参数控制。 - 在步骤 6 中,首先检查发生变化的槽位是否符合任意要求,只有在此之后才检查背包中的其他物品堆。此功能由
optimize_multiple_predicate_trigger参数控制。 - 在步骤 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 (Forge 的情况就是这样)。
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。
请在版本页面使用筛选器选择正确的文件。
如果你需要适配其他版本,请提交 issue,或在 Discord 服务器中提出请求。
常见问题
Icterine 支持哪些 Minecraft 版本?
Icterine 支持 Minecraft Java 版 1.18.2–1.20.4,共 11 个版本,可用的加载器:Fabric / Forge / NeoForge / Quilt。下载时注意选择和你游戏版本一致的文件。
Icterine 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / Forge / NeoForge / Quilt,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:仅服务端。
Mephodio 的其他作品
查看全部 →EMI Enchants
用于查看附魔信息和附魔描述的 EMI 附属模组
Sophisticated Injections
Addon for Sophisticated Backpacks that adds an upgrade to quickly apply potions from tanks
Iotic Spellbooks
Hex Casting & Iron's Spells 'n Spellbooks interop
评论
登录后评论和评分