跳到正文
烈焰甘蔗Wiki

材质包抽屉(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)。

相关条目

浏览全部模组