Akashic Tome

基本信息

属性 值
注册名 akashictome:tome
最大堆叠 1
附魔适用 是
Creative Tab tabTools
物品类 ItemTome extends ItemMod extends Item

功能

Akashic Tome 是一本"书之书"(the book of books),玩家将任意"目标物品"(mod 的指南书/知识书/词典/图鉴/手册等可阅读物品)放入其中,可以变形(morph)为该物品并保留所有内部数据;右击打开 GUI(GuiTome)选择要变成的书,左键点击图标发送 MessageMorphTome 到服务器将其变为该书;shift + 在方块上右键可立刻切换到对应 mod 的书;shift + 在已变形的 tome 上左键可丢弃变形(MessageUnmorphTome)回到原态。

内部实现:通过 MorphingHandler 在 NBT 标签 akashictome:data 下按 mod id 分桶存储所有附加的 ItemStack,每次变形生成一个 ItemStack 副本并把目标 mod 的 ItemStack 注入主 NBT、给 stack 打 akashictome:is_morphing=true 标记以及显示名 Akashic Tome (<原书名>)。

摆放要求

N/A —— 物品。

使用方式

使用方式 触发条件 使用效果 条件/限制
右键点击(默认) 物品在主手 打开 GUI(GuiTome)展示已附带的书的图标网格,左键点击图标则发送 MessageMorphTome(modid) 在服务器端将 tome 变成该书 必须持有 ModItems.tome 本身(已变形的状态不会触发)
shift + 右键点击方块 手持 tome,潜行时对一个方块右键 立刻把 tome 变形为该方块所属 mod 的书(MorphingHandler.getShiftStackForMod) 仅当方块 mod 与当前 tome 的 mod 不同才会改变;不是 mod 方块(minecraft / akashictome)则 noop
shift + 左键点击(鼠标) 玩家已变形并手持 tome 时在游戏内 通过 MessageUnmorphTome 移除变形,恢复成原始 Akashic Tome 物品(保留所有已附加的书) 必须手持已变形的 tome,且玩家正在潜行(ClientProxy.onMouseInput)
shift 物品掉落(ItemTossEvent) 玩家潜行且丢弃物品为变形的 tome 在世界中生成一个未变形的 tome 实体,并把原 stack 还原为显示名恢复后的基础 tome 仅服务端(!e.worldObj.isRemote)生成新实体
合成(无序) 工作台放 1 本书 + 1 个书架 产出 ModItems.tome(来自 CommonProxy.preInit 的 addShapelessRecipe) 原版配方

合成配方

配方类型 输入 输出
无序(shapeless) minecraft:book + minecraft:bookshelf akashictome:tome
自定义无序(AttachementRecipe,recipe size 10) 任意 1 个基础 tome + 任意 1 个"目标"物品(受 ConfigHandler.whitelistedItems / whitelistedNames / blacklistedItems / blacklistedMods 控制) 携带目标物品数据 NBT 的 tome(目标物品被存入 TAG_TOME_DATA)

自定义配方仅在 ConfigHandler.allItems = false(默认)且 isTarget(stack) == true 时匹配;目标物品 mod 必须是 minecraft 之外的第三方 mod,且不位于黑名单。

数值

属性 值
TAG_MORPHING akashictome:is_morphing(boolean,标记当前 stack 是否变形)
TAG_TOME_DATA akashictome:data(NBTTagCompound,按 mod id 存所有附加书的 NBT)
TAG_TOME_DISPLAY_NAME akashictome:displayName(string,变形前书原显示名)
TAG_ITEM_DEFINED_MOD akashictome:definedMod(string,被记录的 mod id,允许同名重命名自动加数字后缀 mod1、mod2 …)

GUI 网格参数(GuiTome.drawScreen):

数值 值
每行图标数 6
图标间距 20 px
背景透明度 0x22000000
视角旋转 -100° X + 270° Y + 180° X(围绕 3D 书模型)

耐久与消耗

项目 值
最大耐久 不适用(普通物品)
每次使用消耗 0(不变)
使用后是否消失 否
附魔传递 是 —— 变形时通过 EnchantmentHelper.setEnchantments 把当前 tome 的附魔与 RepairCost 复制到目标书

物品效果(Tooltip 展示)

ItemTome.addInformation 在按下 SHIFT 时按 mod 名分组、字典序排列显示所有附加书的名字(akashictome.sudo_name 风格),未按 SHIFT 时显示 akashictome.misc.shiftForInfo(“Hold SHIFT for more info”)。

HUD 提示(HUDHandler.onDrawScreen):当玩家手持 tome 并指向一个 mod 方块时,屏幕中央略下显示对应书图标 + 书名 + akashictome.clickMorph(“Shift-right click to change”)。

行为规则

  • MorphingHandler.isAkashicTome(stack):物品是 ModItems.tome 或 NBT 含 TAG_MORPHING=true。
  • MorphingHandler.isMorphedTome(stack):是 Akashic Tome 但 stack 当前物品不是 ModItems.tome(即已变形)。
  • AttachementRecipe.isTarget(stack) 黑名单优先级最高,其次是白名单精确匹配 (registryName、registryName:damage),最后是白名单名称子串匹配(如 book、tome、lexicon 等 11 个关键字)。

配置项(ConfigHandler.load)

配置键 默认值 说明
Allow all items to be added false true 时忽略所有白/黑名单,任何非 minecraft / akashictome 的物品都可被附加
Whitelisted Items 见源码 20 行白名单 精确白名单(如 Thaumcraft:ItemEldritchObject:1、DraconicEvolution:infoTablet)
Blacklisted Items 见源码 27 行黑名单 即使白名单通过也会被排除的物品(如 Automagy:blockBookshelfEnchanted、witchery:vampirebook:0..8)
Whitelisted Names book, tome, lexicon, nomicon, manual, knowledge, pedia, compendium, guide, codex, journal 物品注册名子串包含任一关键字即视为可附加
Whitelisted Duplicates Items gregtech:gt.multiitem.books:* 通配符形式允许同名物品被重复附加(普通列表中同名书第二次会拒绝)
Blacklisted Mods 空 直接拒绝整个 mod 的所有物品
Mod Aliases nautralpledge=botania 等 13 对映射 合并同名 mod 的多个 modid 到一个桶(如把 thermalexpansion、thermaldynamics 都视为 thermalfoundation)

相关条目