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) |
相关条目
- Attachement Recipe 配方行为说明 - 自定义无序配方,控制哪些物品可被附加
- 配置文件白/黑名单 - ConfigHandler 详细默认值与别名映射
- Morphing Handler 变形核心 - 变形 / 还原 / modid 别名解析 / 显示名注入逻辑