背包变更事件
基本信息
| 属性 | 值 |
|---|---|
| 事件基类 | com.gtnewhorizon.gtnhlib.event.InventoryChangedEvent(extends PlayerEvent) |
| 具体子类 | InventoryChangedEvent.ItemAdded、InventoryChangedEvent.ItemRemoved |
| 源码 | src/main/java/com/gtnewhorizon/gtnhlib/event/InventoryChangedEvent.java |
| 扫描间隔配置 | GTNHLibConfig.inventoryScanInterval(默认 5 tick,范围 1–200) |
| 调试开关 | GTNHLibConfig.debugInventoryEvents(默认 false) |
功能
玩家背包中某物品的持有总量发生变化时触发。README 的描述(README.md Events 节):
Fires
InventoryChangedEventwhen a player’s net item holdings change. Subscribe toItemAddedorItemRemoved, which carry the changedItemStack, a signed delta, andinventoryCount, the player’s total of that item after the change.
匹配规则(README 同节):
Items are matched by type and metadata ignoring NBT, so sorting an inventory fires nothing. Scans run every few ticks (configurable).
即比较 Item 引用与 meta,忽略 NBT(附魔、耐久、自定义数据都不参与),因此整理背包不会误触发。
字段与方法
InventoryChangedEvent 是抽象基类:
| 成员 | 类型 | 说明 |
|---|---|---|
item |
ItemStack |
发生变化的物品 |
inventoryCount |
int |
变化之后玩家持有的该物品总量 |
getCount() |
int |
返回 inventoryCount |
getDelta() |
int |
抽象,子类返回带符号变化量 |
两个子类的 getDelta() 分别为 +1(ItemAdded)与 -1(ItemRemoved)。
为何拆成两个子类(InventoryChangedEvent.java:9-10 注释):
ItemAdded / ItemRemoved subclasses (1.7.10 Forge cannot register against abstract base without no-arg constructor)
即 1.7.10 的 Forge 事件总线无法在抽象基类上注册(缺无参构造),故拆分为两个可实例化的具体类。
数值
| 数值名 | 值 |
|---|---|
| 事件类数 | 3(1 抽象基类 + 2 具体子类) |
| 公开字段 | 2(item、inventoryCount) |
getDelta() 绝对值 |
恒为 1 |
| 默认扫描间隔 | 5 tick(= 每 0.25 秒) |
| 扫描间隔范围 | 1–200 tick |
inventoryScanInterval 越高越省 CPU 但时间粒度越粗(GTNHLibConfig.java:99-100 注释):
Higher = less CPU but coarser timing. 1 = every tick.
交互
订阅方式(经 自动事件总线):
@EventBusSubscriber
public class MyHandler {
@SubscribeEvent
public static void onAdd(InventoryChangedEvent.ItemAdded e) { ...; }
}
debugInventoryEvents = true 时额外注册 InventoryEventDebugHandler 到 MinecraftForge.EVENT_BUS(CommonProxy.java:116-118),把每次增删打到控制台。GTNHLib 自身通过 inventoryScanInterval 读取该配置(eventhandlers/PlayerInventoryEventHandler.java:53)。
相关条目
- 自动事件总线 - 事件的自动注册机制
- GTNHLib 主配置 -
inventoryScanInterval与debugInventoryEvents