创造标签与知识书
基本信息
| 属性 | 值 |
|---|---|
| 标签类 | ModCreativeTab(system/creativetab/ModCreativeTab.java) |
| 标签数量 | 2 个:tabMain / tabCharms |
| 知识书分类 | 9 个(KnowledgeCategories) |
| 知识书条目类 | 6 个(KnowledgeFragment 系列 + KnowledgeObject) |
| 资源域 | hardcoreenderexpansion(+ 1 张跨域贴图在 baubles) |
| 语言文件 | lang/ 下 19 个 .lang + lang/compendium/ 独立语言包 |
功能
2 个创造标签(ModCreativeTab.java:16-43)
registerTabs() 创建两个实例(:18-21),type 字段为 0 / 1:
| 标签 | type |
翻译名(正常) | 图标物品 |
|---|---|---|---|
tabMain |
0 | Hardcore Ender Expansion |
ItemList.essence |
tabCharms |
1 | Hardcore Ender Expansion - Charms |
ItemList.charm_pouch |
愚人节模式:ModCommonProxy.hardcoreEnderbacon 为真时,标签名整体替换为 Hardcore Bacon Expansion / Hardcore Bacon Expansion - Charms(:34-36)。该标志由配置项 hardcoreEnderbaconMode 驱动(0 = 仅 4 月 1 日 / 1 = 始终 / 2 = 从不),见 配置项。
⚠️
getTranslatedTabLabel()返回的是硬编码英文字面量,不是 lang key(:33-37)。也就是说这两个标签名不参与本地化。仓库无测试、无注释、无 commit 提及这一点,故仅记录事实,不断言为缺陷。
displayAllReleventItems(:45-54)遍历 list.getBlocks() 调 block.getSubBlocks(...)、再遍历 list.getItems() 调 item.getSubItems(...) —— 走原版标准路径,因此 ItemBlockWithSubtypes 类物品的多个 meta 会自动展开成多个条目。
跨域资源(check #3 实例)
本模组附带 1 张 属于另一个 mod 资源域的贴图:
src/main/resources/assets/baubles/textures/items/empty_bauble_slot_charm_pouch.png
用于替换 Baubles 的空护符槽位图标(配合 item/ItemCharmPouch.java:36-37 的 @Optional.Interface)。assets/baubles/ 目录下只有这一张贴图,无 lang、无 model。
资源域总览
| 域 | 内容 |
|---|---|
hardcoreenderexpansion |
blockstates/、lang/、models/、textures/、sounds/ + 根目录 hee_logo.png |
baubles |
仅 textures/items/empty_bauble_slot_charm_pouch.png(1 个文件) |
src/main/resources/soundmeta/ |
durations.json(声音时长表,GTNH 音效打包需要) |
src/main/resources/META-INF/ |
mixin refmap / coremod 声明 |
| 根目录 | hee_logo.png(供 mcmod.info 的 logoFile 引用,mcmod.info:8) |
语言:19 个 .lang(cs_CZ、da_DK、de_DE、en_US、es_ES …),知识书另有独立的 lang/compendium/ 语言包(en_US.lang / ru_RU.lang / zh_CN.lang / cs_CZ.lang / da_DK.lang …),与主 lang 分开维护。
数值
9 个知识书分类(mechanics/compendium/KnowledgeCategories.java:15-32)
| 分类常量 | 显示名 | 图标物品 | 行 |
|---|---|---|---|
OVERWORLD |
Overworld | Blocks.stonebrick |
16 |
DRAGON_LAIR |
Dragon Lair | Blocks.dragon_egg |
17 |
ENDSTONE_BLOBS |
Endstone Blob | Blocks.end_stone |
18 |
DUNGEON_TOWER |
Dungeon Tower | BlockList.obsidian_special meta 1 |
19 |
METEOROIDS |
Meteoroid | BlockList.sphalerite |
20 |
BIOME_ISLANDS |
Biome Islands | BlockList.special_effects meta BlockSpecialEffects.metaBiomeIslandIcon |
21-23 |
BIOME_ISLAND_FOREST |
Biome Island - Infested Forest | BlockList.end_terrain meta 0 |
24-26 |
BIOME_ISLAND_MOUNTAINS |
Biome Island - Burning Mountains | BlockList.end_terrain meta 1 |
27-29 |
BIOME_ISLAND_ENCHISLAND |
Biome Island - Enchanted Island | BlockList.end_terrain meta 2 |
30-32 |
分类顺序与源码无关(categoryList 数组按声明顺序),但 9 个分类正好覆盖生态岛的 3 种生态 + 世界生成的 6 个生成器(WorldGenObsidianSpike / WorldGenBlob / WorldGenEnergyCluster / WorldGenEndiumOre / WorldGenMeteoroid / MapGenTower),另加 Dragon Lair(末影龙)与 Overworld(主世界生态岛)。
知识书对象类型(mechanics/compendium/,25 个文件)
| 类别 | 文件 |
|---|---|
| 条目类型 | KnowledgeFragment(基类)、KnowledgeFragmentCharm、KnowledgeFragmentCrafting、KnowledgeFragmentEnhancement、KnowledgeFragmentItemConversion、KnowledgeFragmentText(6 个) |
| 对象载体 | KnowledgeObject、IKnowledgeObjectInstance、ObjectBlock、ObjectDummy、ObjectItem、ObjectMob(6 个) |
| 展示元件 | CategoryDisplayElement、ObjectDisplayElement、PurchaseDisplayElement、IGuiItemStackRenderer(4 个) |
| 玩家数据 | PlayerCompendiumData、PlayerDiscoveryList、KnowledgeObservation(3 个) |
| 事件 / 工具 | CompendiumEvents、CompendiumEventsClient、KnowledgeUtils、KnowledgeRegistrations、KnowledgeCategory(5 个) |
KnowledgeRegistrations 在 Loader.isModLoaded("NotEnoughItems") 时额外注册 NEI 相关内容(mechanics/compendium/KnowledgeRegistrations.java:271)。
交互
| 触发 | 行为 |
|---|---|
| 打开知识书 | 快捷键(CompendiumEventsClient.getCompendiumKeyCode(),客户端可配置) |
| NEI 物品列表中按快捷键 | NotEnoughItemsIntegration 的 IContainerInputHandler.lastKeyTyped 直接打开对应条目(见 第三方模组集成) |
| 获得新知识 | 触发成就时发 C03KnowledgeNotification(见 网络包) |
| 同步 | C19CompendiumData 下发条目数据;S02CompendiumPurchase 上行购买 |
| 购买 | 知识书条目可用精华购买(PurchaseDisplayElement) |
| 愚人节 | hardcoreEnderbaconMode 控制标签名与 ItemHardcoreEnderbacon.mode |