Inventory Changed Condition (Add / Remove / Total)

基本信息

属性 值
父类 InventoryChangedHandler(抽象)
子类 ID inventory.add, inventory.remove, inventory.total
事件订阅 Forge MinecraftForge.EVENT_BUS(com.gtnewhorizon.gtnhlib.event.InventoryChangedEvent$ItemAdded / ItemRemoved)
触发对象 EntityPlayerMP

依赖 gtnhlib 提供的高频背包变化事件(每次 slot 增删都会触发)。

共享配置字段

字段 类型 默认 含义
item 字符串 必填 注册名 modid:itemname
meta int OreDictionary.WILDCARD_VALUE(32767) damage 值;范围 [0, 32767]
count int 1 触发阈值——stack.stackSize >= count(对 total 比较总计持有数)

meta == WILDCARD_VALUE 与 meta != WILDCARD_VALUE 走不同 ItemStackMap(一张 nbt-insensitive、一张 nbt-sensitive)。

子类差异

子类 ID 监听事件 触发对象 stack.stackSize 来源 触发语义
inventory.add ItemAdded 该次新增的 event.item 本次增量 一次操作新增 ≥ count 即触发
inventory.remove ItemRemoved 该次减少的 event.item 本次减量 一次操作减少 ≥ count 即触发
inventory.total ItemAdded(收到添加事件时查总持有数) 拷贝 event.item 后覆盖 stackSize 为 event.inventoryCount 当前持仓 库存内该物总持有 ≥ count 即触发

inventory.total 的特殊机制:监听的是 Add 事件,但比较栈 stackSize 被改写为 inventoryCount(玩家身上 + 箱子内等所有分支的总数),从而得到"持有总数"语义。

屏蔽列表

只触发 EntityPlayerMP(过滤掉 EntityPlayerMP 之外的本地玩家,避免客机端双重触发)。

JSON 示例

持有 ≥ 64 个钻石:

{
  "id": "diamond_hoarder",
  "x": -3, "y": -1,
  "icon": { "registryName": "minecraft:diamond" },
  "condition": {
    "type": "inventory.total",
    "item": "minecraft:diamond",
    "meta": 0,
    "count": 64
  }
}

相关条目

源码

src/main/java/glowredman/amazingtrophies/condition/InventoryChangedHandler.java