• 注册
  • MOD模组 MOD模组 关注:35 内容:16399

    Icterine (Icterine)

  • 查看作者
  • 打赏作者
  • 当前位置: SodaMC > MOD模组 > 正文
  • 潮涌核心
    反派

    Icterine (Icterine)


    优化进度 (特别是InventoryChangeTrigger)



    摘要

    • 优化了获取物品的进度触发;
    • 可能与原版不兼容,但不会影响原版进度,也不应影响绝大多数模组/数据包;
    • 即使影响了某些内容,进度仍应可通过仅放下并拾起所需物品之一来获得;
    • 目前没有已知的不兼容性或问题;
    • 所有对原版代码的注入都可以在配置文件中禁用。
    • 所有更改均在服务器端进行。

    结果

    在具有3名活跃玩家在线的专用服务器上进行了现场测试,运行自定义Forge模组包,包含超过200个模组和[BlazeandCave's Advancements Pack]( 链接),该数据包添加了超过950个进度。 使用Spark收集了一个小时的统计数据。

    使用Icterine,InventoryChangeTrigger执行速度几乎快了 2.5倍(截至版本1.1.0),花费约7.5%的刻度时间,而不是20%。

    Icterine 1.0.0的统计数据比较(约快了2倍):

    Icterine (Icterine)

    原版InventoryChangeTrigger的工作方式

    1. 当游戏检测到玩家物品栏中的堆栈发生更改时,将调用InventoryChangeTrigger。这包括拾取物品,放下物品,放下整个堆栈,移动物品到你的物品栏中。
      1. 此外,当您打开容器(箱子,熔炉等)时,游戏会认为您的物品栏中的所有插槽都发生了更改,并为所有插槽调用触发器,包括空插槽。
    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 (forge moment) 兼容。

    Icterine v1.3.0与Fabric/Quilt 1.20至1.20.4,Forge 1.19.3至1.20.4,以及NeoForge 1.20.1至1.20.4兼容,并具有与v1.2.0相同的功能。

    在[版本页面]( 链接)上使用筛选器选择正确的文件。

    如果您需要将其移植到其他版本,请在[Discord]( 链接)服务器上提出问题或询问。

    截图:

    Icterine (Icterine)

    来自Modrinth

    Icterine 1.3.0 NeoForge 1.20.3 - 1.20.4

    Icterine-neoforge-1.20.3-4-1.3.0.jar下载1.3.0#Release
    展开
    版本: 1.3.0
    支持游戏: 1.20.3, 1.20.4
    类型: NeoForge
    Release
    下载次数: 816

    Icterine 1.3.0 NeoForge 1.20.2

    Icterine-neoforge-1.20.2-1.3.0.jar下载1.3.0#Release
    展开
    版本: 1.3.0
    支持游戏: 1.20.2
    类型: NeoForge
    Release
    下载次数: 89

    Icterine 1.3.0 Fabric 1.20.3 - 1.20.4

    Icterine-fabric-1.20.3-4-1.3.0.jar下载1.3.0#Release
    展开
    版本: 1.3.0
    支持游戏: 1.20.3, 1.20.4
    类型: Fabric Quilt
    Release
    下载次数: 44,135

  • 收录

  • 请登录之后再进行评论

    登录
  • Soda任务 图片
  • 偏好设置
  • 主题
  • 帖子间隔 侧栏位置: