材质包抽屉(Material Packs)
StorageDrawers 用 5 个独立 @Mod 实体(材质包 / pack)把同一套抽屉方块换成本家木纹外观。每个 pack 只注册同样 6 个方块规格,数量完全由该 pack 的 DataResolver 提供的木种决定。
基本信息
| 属性 | 值 |
|---|---|
| pack 数 | 5(Natura / Biomes O’ Plenty / Erebus / Forestry / Misc) |
| 每个 pack 的方块规格 | 6(fullDrawers1 / fullDrawers2 / fullDrawers4 / halfDrawers2 / halfDrawers4 / trim) |
| pack 声明位置 | 各 pack 的 packs/<name>/StorageDrawersPack.java 的 @Mod(modid = ..., dependencies = "required-after:StorageDrawers;") |
| 加载判定 | preInit 中:若 packsConfig().autoEnablePacks() 为真则只检查 Loader.isModLoaded(<来源 mod>),否则只检查 packsConfig().isXxxPackEnabled();任一不满足则 LOAD = false 并跳过全部注册 |
| 方块实现 | BlockDrawersPack / BlockTrimPack(PackFactory.createBlock(BlockConfiguration, resolver)) |
| TileEntity | TileEntityDrawersStandard(由 pack 侧 addAlternativeTileEntityMappings 反射写入 TileEntity.nameToClassMap) |
| ItemBlock | ItemDrawersPack / ItemTrimPack(PackFactory.registerBlock) |
5 个 pack 的 modid 与来源
| pack 显示名 | modid | StorageDrawersPack.MOD_ID |
依赖探测的 modid | resolver 数 |
|---|---|---|---|---|
| Storage Drawers: Natura Pack | StorageDrawersNatura |
packs/natura/StorageDrawersPack.java:24 |
Natura |
1 |
| Storage Drawers: Biomes O’ Plenty Pack | StorageDrawersBop |
packs/bop/StorageDrawersPack.java:24 |
BiomesOPlenty |
1 |
| Storage Drawers: Erebus Pack | StorageDrawersErebus |
packs/erebus/StorageDrawersPack.java:24 |
erebus |
1 |
| Storage Drawers: Forestry Pack | StorageDrawersForestry |
packs/forestry/StorageDrawersPack.java:25 |
Forestry |
2 |
| Storage Drawers: Misc Pack | StorageDrawersMisc |
packs/misc/StorageDrawersPack.java:24 |
无(靠手动开关) | 2 |
⚠️ Forestry / Misc 是双 resolver,块数翻倍。两者都用
IPackDataResolver[] resolvers = { new DataResolver(MOD_ID, 0), new DataResolver(MOD_ID, 1) }(packs/forestry/StorageDrawersPack.java:29、packs/misc/StorageDrawersPack.java:28),ModBlocks.init()按for (int i = 0; i < resolvers.length; i++)各注册一遍 ⇒ 每个 12 个方块。 所以 5 个 pack 的方块总数是 6 + 6 + 6 + 12 + 12 = 42,不是 36。
各 pack 注册名
单 resolver 的三个 pack(Natura / Bop / Erebus)注册名不带后缀:
<modid>:fullDrawers1 <modid>:fullDrawers2 <modid>:fullDrawers4
<modid>:halfDrawers2 <modid>:halfDrawers4 <modid>:trim
双 resolver 的两个 pack 后缀规则不同:
| pack | 后缀 | 源码 |
|---|---|---|
| Forestry | A / B(char[] tail = {'A','B'},拼在名字尾部,无下划线) |
packs/forestry/core/ModBlocks.java:51,56,59,62,65,68,71 |
| Misc | _0 / _1("fullDrawers1_" + i) |
packs/misc/core/ModBlocks.java:54,57,60,63,66,69 |
即 Forestry 是 StorageDrawersForestry:fullDrawers1A / …1B,Misc 是 StorageDrawersMisc:fullDrawers1_0 / …1_1。
木种来源
| pack | 木种数 | 取材方块 | 源码 |
|---|---|---|---|
| Natura | 13 | Natura:planks + Natura:plankSlab1/2 |
packs/natura/core/DataResolver.java:14-15,58-68 |
| Biomes O’ Plenty | 14(第 11 项 null = 缺号) |
BiomesOPlenty:planks + woodenSingleSlab1/2 |
packs/bop/core/DataResolver.java:14-15,58-76 |
| Erebus | 16(7/11/12/13 为 null;14 用 planks_scorched,15 用 planks_varnished) |
erebus:planks / planks_scorched / planks_varnished |
packs/erebus/core/DataResolver.java:16-17,66-82 |
| Forestry | 16 + 13 = 29 | Forestry:planks + Forestry:slabs |
packs/forestry/core/DataResolver.java:14-18,73-85 |
| Misc | 9 + 12 = 21 | EBXL / Highlands / Thaumcraft / Witchery / Immersive Engineering / Botania | packs/misc/core/DataResolver.java:14-17,76-127 |
Natura 木种:eucalyptus, sakura, ghostwood, redwood, bloodwood, hopseed, maple, silverbell, purpleheart, tigerwood, willow, darkwood, fusewood
Bop 木种:sacredoak, cherry, dark, fir, ethereal, magic, mangrove, palm, redwood, willow, (null), pine, hellbark, jacaranda, mahogany
Erebus 木种:baobab, eucalyptus, mahogany, mossbark, asper, cypress, (null), white, bamboo, rotten, marshwood, (null), (null), (null), scorched, varnished
Forestry bank0:larch, teak, acacia, lime, chestnut, wenge, baobab, sequoia, kapok, ebony, mahogany, balsa, willow, walnut, greenheart, cherry
Forestry bank1:mahoe, poplar, palm, papaya, pine, plum, maple, citrus, giganteum, ipe, padauk, cocobolo, zebrawood
Misc bank0:ebxl_redwood, ebxl_fir, ebxl_acacia, ebxl_cypress, ebxl_japanesemaple, ebxl_rainboweucalyptus, ebxl_autumn, ebxl_baldcypress, ebxl_sakura(取自 ExtrabiomesXL)
Misc bank1:hl_yellow, hl_white, hl_red, hl_grey, tc_greatwood, tc_silverwood, witchery_rowan, witchery_alder, witchery_hawthorn, immeng_treated, botania_livingwood, botania_dreamwood(分别取自 Highlands / Thaumcraft / witchery / ImmersiveEngineering / Botania)
每个抽屉方块实例 = 1 个规格 × 1 个 resolver × 1 个木种 metadata。所以 Natura 有 13 种木色的
fullDrawers1,Forestry bank0 有 16 种,Misc 两个 bank 合计 21 种。
数值
| 属性 | 值 | 来源 |
|---|---|---|
| 槽位数 | 与主 mod 相同:1 / 2 / 4 槽 | BlockConfiguration.BasicFull1/2/4、BasicHalf2/4 |
| 基础容量 | 各 pack 独立的 blockConfig,默认与主 mod 同源 |
ModBlocks.init() 读 config.blockConfig() |
| OreDictionary | drawerBasic(WILDCARD_VALUE,只对 BlockDrawersPack 实例注册) |
PackFactory.java:66 |
| 升级槽 | 5 个,与主 mod 一致 | TileEntityDrawers.java:83 |
| 逐方块开关 | 每个规格都单独 if (blockConfig.isBlockEnabled(...)) 才注册 |
packs/*/core/ModBlocks.java |
交互
| 触发 | 行为 | 来源 |
|---|---|---|
| 潜行右键换材质 | 拿 Trim 右击抽屉走 BlockDrawers.retrimBlock(block/BlockDrawers.java:166-175):先按 retrimType() 反查目标 BlockConfiguration,再由 StorageDrawers.blockRegistry.getPlankBlock/getPlankMeta 解析出实际木种方块与 metadata。BlockDrawersPack extends BlockDrawers 且未覆写 retrimType(),所以走默认值 BlockType.Drawers |
block/pack/BlockDrawersPack.java:25 |
| 拿到升级 | 与主 mod 完全一致(存储 / 状态 / 虚空 / 创造 / 红石 / 降级) | TileEntityDrawers.java:83 |
| NEI 隐藏 | 当 addonConfig().showAddonItemsNEI() 为假时,6 个方块全部 factory.hideBlock(...) 从 NEI 隐藏 |
packs/*/core/ModBlocks.java if (!config.addonConfig().showAddonItemsNEI()) 段 |
与 Chisel 的关系
PackFactory.registerBlock 的最后一行调用 ChiselIntegrationModule.registerPackBlock(block)(core/api/PackFactory.java:73)。该静态方法在 Chisel 模块初始化前把方块攒进 pendingRegistration,Chisel 模块 init() 时统一 FMLInterModComms.sendMessage("chisel", "variation:add", groupName, 名称, 0, meta)。
- 变体组名:
basicFull1/2/4、basicHalf2/4、sortingFull1/2/4、sortingHalf2/4、trim(integration/ChiselIntegrationModule.java:64-80) - 注册的是 Chisel 变体,不是新方块
- 整个模块受配置项
isChiselEnabled()控制;未启用时pendingRegistration不会被清空,pack 方块只是静静留在列表里
主 mod 的 6 个方块另走一条路径:按
BlockWood.field_150096_a的每个 meta 调registerBlock(块, meta, "basicFull1")(integration/ChiselIntegrationModule.java:40-45)。
相关条目
- Full Drawers 1x1 - 1 槽满深抽屉(pack 版同规格)
- Half Drawers 2x1 - 2 槽半深抽屉(pack 版同规格)
- Trim - 装饰条(pack 版同规格)
- Upgrade - pack 抽屉同样支持全部升级
- Drawer Network - pack 抽屉可接入控制器网络