Lock and Key API
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | net.mcft.betterstorage.api.lock |
| 类数量 | 4 |
| 核心接口 | IKey、ILock、ILockable、EnumLockInteraction |
来源:src/main/java/net/mcft/betterstorage/api/lock/。
功能
这组接口定义了本 mod 锁系统的完整契约。第三方模组的自定义容器可以实现 ILockable,从而直接获得钥匙/锁功能,无需自己实现开锁逻辑。
接口清单
ILockable
可上锁的容器。实现后自动支持:
- 装锁 / 开锁
- 锁的附着物(
LockAttachment)与 3D 摇晃动画 - 破坏进度显示
本 mod 内的实现:TileEntityContainer(箱子与储物柜体系)。
IKey
钥匙。ItemKey、ItemKeyring、ItemMasterKey 均实现本接口。
关键方法(由 ItemKey.canUnlock 的实现推断,src/main/java/net/mcft/betterstorage/item/locking/ItemKey.java:110-131):
canApplyEnchantment(ItemStack, Enchantment)— 控制哪些附魔可应用unlock(ILock, boolean)— 尝试解锁
ItemKeyring 对内部 9 把钥匙逐个调用 keyType.unlock(key, lock, false)(src/main/java/net/mcft/betterstorage/item/locking/ItemKeyring.java:67)。
ILock
锁。ItemLock 实现本接口,getLockType() 返回 "normal"(src/main/java/net/mcft/betterstorage/item/locking/ItemLock.java:105-107),这是钥匙过滤的依据(ItemKey.java:112:非 "normal" 的锁会被跳过)。
ItemMasterKey 作为特例覆写判定为恒真,从而能开所有普通锁。
EnumLockInteraction
交互类型枚举,定义玩家与锁的交互方式(用于 LockAttachment.interact,src/main/java/net/mcft/betterstorage/attachment/LockAttachment.java:68)。
锁附着物系统
net.mcft.betterstorage.attachment 包提供了附着物渲染框架:
| 类 | 作用 |
|---|---|
Attachment |
附着物基类 |
ItemAttachment |
附着于 TileEntity 的物品附着物 |
LockAttachment |
锁附着物,含 hit / breakProgress / wiggle / wiggleStrength |
Attachments |
附着物注册表 |
IAttachmentRenderer |
渲染接口 |
ItemAttachmentRenderer |
物品附着物渲染器 |
LockAttachmentRenderer |
锁的专用渲染器 |
IHasAttachments |
支持附着物的 TileEntity 标记接口 |
EnumAttachmentInteraction |
附着物交互枚举 |
LockAttachment 维护锁被攻击的状态(LockAttachment.java:34-38):
public int hit = 0;
public int breakProgress = 0;
public float wiggle = 0;
public float wiggleStrength = 0.0F;
pick()(LockAttachment.java:74)在锁被破坏时返回掉落物,hit(boolean damage)(:136)累积破坏进度。
附魔挂接
附魔通过 IKey.canApplyEnchantment 与 ILock.canApplyEnchantment 挂接到物品上,判定代码见 src/main/java/net/mcft/betterstorage/item/EnchantmentBetterStorage.java:164, 167。