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。

相关条目