StorageDrawers
[!INFO] Git Commit:
b8c869a4| Updated: 2026-09-24
Minecraft 储物抽屉模组,提供多种规格的方块储物容器,支持锁定、密封、标签显示和自定义材质。
[!IMPORTANT] 本次审计订正(回源码核对)
- modid =
StorageDrawers(大写 S / 大写 D),来自StorageDrawers.java:47public static final String MOD_ID = "StorageDrawers";与@Mod(modid = StorageDrawers.MOD_ID, ...)。原 15 条目全部误写为小写storagedrawers:。注意ModItems.makeName()里的MOD_ID.toLowerCase()只影响未本地化名(storagedrawers.xxx)与贴图路径,不是注册名。- 本 mod 实为 6 个
@Mod实体(主 mod + 5 个材质包),modid 分别为StorageDrawers、StorageDrawersNatura、StorageDrawersBop、StorageDrawersForestry、StorageDrawersErebus、StorageDrawersMisc。- 全仓库从未调用过
setResistance,"爆炸抗性"一栏的所有"随矿石/木材变化"说法均无源码依据。- 不存在红石比较器支持(无
IComparator/getComparatorOutput)。
方块列表
- Full Drawers 1x1 - 单槽满深抽屉
- Full Drawers 2x2 - 双槽满深抽屉
- Full Drawers 4x4 - 四槽满深抽屉
- Half Drawers 2x1 - 双槽半深抽屉
- Half Drawers 4x2 - 四槽半深抽屉
- Comp Drawers - 压缩抽屉,自动将物品压缩为更高级形态
- Custom Drawers - 可使用任意木板材质自定义外观
- Controller - 抽屉控制器,连接多个抽屉方块形成网络
- Controller Slave - 从属控制器,扩展控制器覆盖范围
- Framing Table - 镶框桌,用于给抽屉添加自定义材质
- Trim - 装饰条,用于填充抽屉间的缝隙
- Trim Custom - 自定义材质装饰条
- 材质包抽屉 - 5 个材质包(
StorageDrawersNatura/Bop/Erebus/Forestry/Misc)注册的 42 个换色抽屉 - 分类抽屉 - Refined Relocation 集成注册的 7 个分类方块 +
upgradeSorting
架构
TileEntity 对应关系
来源:ModBlocks.java:120-146(共注册 6 个 TileEntity 类)
| 方块 | TileEntity | 注册方式 |
|---|---|---|
fullDrawers1/2/4, halfDrawers2/4 |
TileEntityDrawersStandard |
registerTileEntityWithAlternatives(5 个名字) |
compDrawers |
TileEntityDrawersComp |
registerTileEntityWithAlternatives |
controller |
TileEntityController |
registerTileEntityWithAlternatives |
controllerSlave |
TileEntitySlave |
registerTileEntityWithAlternatives |
framingTable |
TileEntityFramingTable |
registerTileEntity |
trim |
⚠️ 无 TileEntity | ⚠️ 订正:ModBlocks.java:146 虽执行了 registerTileEntity(TileEntityTrim.class, "StorageDrawers:trim"),但 BlockTrim 未实现 ITileEntityProvider,也没有 createNewTileEntity,实际永远不会生成 TE。该注册只是分配了 TE 类 ID |
trimCustom |
TileEntityTrim |
由 BlockTrimCustom implements ITileEntityProvider 提供(isBlockContainer = true) |
fullCustom1/2/4, halfCustom2/4 |
TileEntityDrawersStandard |
⚠️ 订正:这两个类未出现在 ModBlocks.java:120-146 的 registerTileEntityWithAlternatives 名单里;它们靠 BlockDrawers.createNewTileEntity 覆写与 pack 侧 addAlternativeTileEntityMappings(反射写 nameToClassMap)生效 |
| 5 个 pack 的全部方块 | TileEntityDrawersStandard(Natura 显式调用 addAlternativeTileEntityMappings) |
pack 各自 core/ModBlocks.java |
核心属性
- 满深(Full Depth):
halfDepth = false,碰撞盒占满 1 格 - 半深(Half Depth):
halfDepth = true,碰撞盒按setBlockBoundsBasedOnState缩到depth = 0.5,朝向哪面就贴哪面 - 压缩抽屉(Comp Drawers):⚠️ 订正——原文"9 个物品压缩为 1 个,最多 4 级压缩"源码中完全不存在。压缩能力来自
CompTierRegistry的 8 条成对记录(clay→clay_ball、snow→snowball、glowstone→glowstone_dust、brick_block→brick、nether_brick→netherbrick、quartz_block→quartz、melon_block→melon、sandstone→sand),每条带一个convRate(除 melon 为 9 外均为 4)。只有一级压缩,没有 4 级、没有 9⁴ - 锁定 / 密封:⚠️ 原文把二者混为一谈。锁定(
upgradeLock)控制ILockable的存取属性LOCK_POPULATED/LOCK_EMPTY;密封(tape)由ISealable.setIsSealed(true)实现,密封后BlockDrawers.onBlockActivated在存取分支直接return false。两者是独立属性 - 升级槽位:每个抽屉有 5 个升级槽(
TileEntityDrawers.java:83),可混装存储 / 状态 / 虚空 / 创造 / 红石 / 降级升级 - 标签显示:显示抽屉内物品图标和数量,可由
shroudKey(遮蔽)与quantifyKey(量化)切换
物品列表
ModItems.java:52-67 共注册 12 个物品,现有 2 条目仅覆盖 7 个。
- Upgrade - 存储容量升级(
StorageDrawers:upgrade,metadata 2–8 共 7 种;默认倍率 2/3/5/8/13/21/34,斐波那契数列) - Key Items -
shroudKey/quantifyKey/personalKey/tape/upgradeLock - 功能升级 -
upgradeTemplate/upgradeStatus/upgradeVoid/upgradeCreative/upgradeRedstone/upgradeDowngrade
6 个非存储升级物品
已建条目:功能升级。下表为注册对照(数据以源码为准):
| 注册名 | 类 | 说明 |
|---|---|---|
StorageDrawers:upgradeTemplate |
Item(裸 new Item()) |
升级模板,所有升级的共同材料;8 木棍围 1 抽屉 → 2 个 |
StorageDrawers:upgradeStatus |
ItemUpgradeStatus |
指示器升级,iconNames = {null, "level1", "level2"} → 2 个子类型(meta 1/2) |
StorageDrawers:upgradeVoid |
ItemUpgradeVoid |
虚空升级(1 种) |
StorageDrawers:upgradeCreative |
ItemUpgradeCreative |
创造模式升级,iconNames = {"store", "vend"} → 2 个子类型(meta 0/1) |
StorageDrawers:upgradeRedstone |
ItemUpgradeRedstone |
红石升级,iconNames = {"combined", "max", "min"} → 3 个子类型(meta 0/1/2) |
StorageDrawers:upgradeDowngrade |
ItemUpgradeDowngrade |
降级升级(1 种,4 燧石 + 4 木棍 + 1 模板) |
⚠️ 订正:
upgradeCreative原文写"3 个子类型(配方 meta 0/1/2)"。源码里ItemUpgradeCreative.iconNames只有{"store", "vend"}2 项,且全仓库没有任何addRecipe涉及它——默认配置下无法合成。详见条目。
多方块结构
- Drawer Network - Controller + Slave 抽屉网络系统
⚠️ 订正:这不是"几×几×几"的刚性多方块。真实机制是
TileEntityController.populateNodes的 BFS 洪泛填充:沿 6 个正交邻面遍历所有INetworked方块,距离以切比雪夫距离计且≤ range(配置controller.range,默认 12)。原文的"5 格半径"“16 槽”“10 控制器”"160 总槽位"均无源码依据。
第三方集成(IntegrationRegistry.java:29-39)
实际注册了 11 个集成模块,原条目的第三方表格遗漏 4 个:
| 探测的 modid | 模块 |
|---|---|
appliedenergistics2 |
AppliedEnergistics |
Waila |
Waila |
Thaumcraft |
Thaumcraft |
MineTweaker3 |
MineTweaker |
RefinedRelocation |
RefinedRelocation(同时注册 7 个"分类"方块 + upgradeSorting 物品) |
NotEnoughItems |
NotEnoughItems |
ThermalExpansion |
ThermalExpansion |
ThermalFoundation |
ThermalFoundation |
chisel |
ChiselIntegrationModule |
dreamcraft |
GTNHIntegrationModule(注意探测的是 dreamcraft,不是 GTNH) |
backhand |
BackhandIntegrationModule |
Chisel 走
FMLInterModComms的variation:add(ChiselIntegrationModule.java:20-52),为 6 种基础方块 ×BlockWood的每个 meta 注册材质变体,不是注册新方块。
覆盖率实测(250 个 java 文件 / 现有 18 条目)
初版为只审计;本轮已把「材质包」「分类抽屉」「6 个功能升级」三块空白补成条目。
实际注册量
| 维度 | 实测总数 | 来源 |
|---|---|---|
@Mod 实体 |
6 | 主 mod + 5 个材质包 |
| 方块 | 65 | 见下方拆分 |
| 物品 | 13 | ModItems.java:52-67 12 个 + RefinedRelocation.java:105 的 upgradeSorting |
| TileEntity 类 | 6 | ModBlocks.java:120-146 |
| 升级/钥匙物品种类 | 13 | 7 种存储升级 + 1 状态(2 子型) + 1 虚空 + 1 创造(2 子型) + 1 红石(3 子型) + 1 降级 + 1 模板 + 3 钥匙 + 1 锁 + 1 胶带 + 1 upgradeSorting |
| GUI ID | 2 | drawersGuiID=0、framingGuiID=1(GuiHandler.java:22-23) |
方块 65 个的拆分:
| 来源 | 数量 | 模组 id |
|---|---|---|
主 mod ModBlocks |
16(ModBlocks.java 共 16 处 registerBlock:fullDrawers1/2/4、halfDrawers2/4、compDrawers、controller、controllerSlave、trim、trimCustom、framingTable、fullCustom1/2/4、halfCustom2/4) |
StorageDrawers |
| Natura pack | 6 | StorageDrawersNatura |
| Bop pack | 6 | StorageDrawersBop |
| Erebus pack | 6 | StorageDrawersErebus |
| Misc pack | 12(2 个 resolver × 6 种,注册名带 _0 / _1 后缀) |
StorageDrawersMisc |
| Forestry pack | 12(2 个 resolver × 6 种,注册名带 A / B 后缀,无下划线) |
StorageDrawersForestry |
| RefinedRelocation 集成 | 7(fullDrawersSort1/2/4、halfDrawersSort2/4、compDrawersSort、trimSort) |
挂在 StorageDrawers 下 |
⚠️ 订正:原文写 “5 个 pack 的 36 个方块”,并把 Misc 记为 6、Forestry 后缀记为
_0/_1。实际packs/misc/StorageDrawersPack.java:28与packs/forestry/StorageDrawersPack.java:29都是 2 个 resolver({ DataResolver(MOD_ID,0), DataResolver(MOD_ID,1) }),所以两个 pack 各 12 个方块,pack 方块合计 42。Forestry 的后缀来自char[] tail = {'A','B'}(packs/forestry/core/ModBlocks.java:51),拼出fullDrawers1A/fullDrawers1B;只有 Misc 才是fullDrawers1_0/fullDrawers1_1。
现有 18 条目的覆盖
| 维度 | 已覆盖 | 覆盖率 | 缺口 |
|---|---|---|---|
| 方块 | 14(主 mod 11 个中覆盖 11;compDrawers 记为 1 条) |
11 / 65 ≈ 17% | 5 个 pack 的 42 个方块 + RefinedRelocation 的 7 个 sorting 方块 已各建 1 条汇总页(见 材质包抽屉、分类抽屉) |
| 物品 | 8(upgrade 1 种 + 5 把钥匙/工具 + 6 个功能升级汇总 1 条 + upgradeSorting 计入分类抽屉页) |
8 / 13 ≈ 62% | 仅 upgradeSorting 无独立条目(在分类抽屉页内说明) |
| TileEntity | 5 | 5 / 6 ≈ 83% | TileEntityTrim 只在 trim-custom 顺带提到,无独立说明 |
| 升级种类 | 6(存储 1 + 状态/虚空/创造/红石/降级/模板 汇总 1 条) | 6 / 7 类 | — |
| 多方块 | 1 | 100%(仅 1 个网络系统) | — |
| 设置 / 配置项 | 0 | 0% | StorageDrawers.cfg 有 20+ 个开关(enableDrawerUI / enableSidedInput / enableSidedOutput / enableFramedDrawers / enableTape / invertShift / itemRenderType / breakDrawerDropMode …)+ 6 个升级类开关 + 12 个 levelNMult,setting/ 目录为空 |
| AE2 集成 | 0 | 0% | integration/ae2 有独立包,无条目 |
结论:主 mod 本体(16 方块 / 12 物品)覆盖良好;材质包、分类抽屉、功能升级三块空白已用 3 条汇总页补齐。仍未覆盖的是整个配置维度与 AE2 集成包。