ItemGuideBook
基本信息
| 属性 | 值 |
|---|---|
| 类名 | amerifrance.guideapi.items.ItemGuideBook |
| 类型 | class extends Item |
| 注册名 | ItemGuideBook |
| 本地化名 | GuideBook(setUnlocalizedName) |
| 堆叠上限 | 1 |
| 启用版本 | Minecraft 1.7.10 |
功能
指南书的物品形态。用 metadata(伤害值)编码书的序号,
右键打开 GUI,潜行右键「被链接」的方块直接跳条目。
核心机制:metadata = 书序号
onItemRightClick:player.openGui(GuideAPI.instance, stack.getItemDamage(), ...), 即把 metadata 当作 GUI id 传给 GuideAPI 的实例。getUnlocalizedName(stack):返回getUnlocalizedName() + "." + metadata, 每本书对应一个本地化条目。getItemStackDisplayName(stack):有效时取GuideRegistry.getBook(metadata).getLocalizedDisplayName()。- 打开前有双重守卫:
!GuideRegistry.isEmpty() && getSize() > metadata。
onItemUse:潜行右键方块跳转
- 先判
player.isSneaking(),不潜行则return false。 - 再判目标方块
instanceof IGuideLinked。 - 调
getLinkedEntryUnlocName(...)得到条目名, 遍历book.categoryList×entryList做entry.unlocEntryName.equals(entryName)线性匹配, 命中后GuideAPI.proxy.openEntry(...)并return true。
图标与着色
registerIcons注册 2 个内置图标:guideapi:book_cover(itemIcon)与guideapi:book_pages(pagesIcon); 再对每本书,若book.itemTexture != null则注册进customIcons(TIntObjectHashMap<IIcon>,trove)。requiresMultipleRenderPasses()恒为true,getRenderPasses因此恒返回 2:第 0 pass 画封面,第 1 pass 画书页。getIcon(stack, pass):有customIcons用之; 否则pass == 0 ? itemIcon : pagesIcon。getColorFromItemStack(stack, pass):当书没有itemTexture时, 第 0 pass 返回book.bookColor.getRGB()着色封面; 有itemTexture则不染色。
创造标签与提示
getSubItems:为每本已注册书生成一个子物品, 并写入 NBTCreativeBook = book.isLostBook。addInformation三条提示:- 书无效 → 红色
text.book.warning; author非空 → 显示translateToLocal(author)(作者字段本身是本地化键);- NBT
CreativeBook为真 → 金色text.book.creative。
- 书无效 → 红色
实现要点
getUnlocalizedName用裸StackTrace-free 的GuideRegistry.getSize()与 metadata 比较,不判 metadata < 0。onItemRightClick里stack.setTagCompound(new NBTTagCompound())在无 NBT 时先建空 NBT再开界面——但空 NBT 里不写任何东西, 该分支实际只保证后续hasTagCompound()返回 true。- 使用
gnu.trove.map.hash.TIntObjectHashMap(trove)而非HashMap, 因为键是int(书序号)。
相关条目
- ItemsRegistry - 注册入口
- GuideRegistry -
metadata↔Book的映射 - GuideAPIItems - 静态引用
- IGuideLinked -
onItemUse依赖的方块接口 - ItemLostPage - 配套的残页物品
- Book -
itemTexture/bookColor/author的定义处 - PageBase - 读取 NBT
CreativeBook判定可见性