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