通用 meta 物品(OpenBlocks:generic)与不可堆叠 meta 物品(OpenBlocks:genericUnstackable)

基本信息

OpenBlocks 把大量功能各异的物品压进一个注册物品 + 若干 meta 值里。MetasGeneric 枚举定义了 12 个 meta,其中 11 个实际注册。

注册名 类 声明位置
OpenBlocks:generic openblocks.common.item.ItemOBGeneric OpenBlocks.java:410(isConfigurable = false,textureName = RegisterItem.NONE)
OpenBlocks:genericUnstackable openblocks.common.item.ItemOBGenericUnstackable OpenBlocks.java:473(同样 textureName = NONE、isConfigurable = false)
OpenBlocks:filledbucket openblocks.common.item.ItemFilledBucket OpenBlocks.java:443(textureName = NONE)
OpenBlocks:stencil openblocks.common.item.ItemStencil OpenBlocks.java:452

三者都用 IMetaItem 工厂模式:registerItem(ordinal, metaItem) 逐个注册子物品(MetasGeneric.java:315、MetasGenericUnstackable.java:49、MetasBucket.java:52),物品栈构造统一走 new ItemStack(OpenBlocks.Items.generic, size, ordinal())(MetasGeneric.java:296-300)。

generic 与 genericUnstackable 都标了 isConfigurable = false——不能在配置中关闭,而 MetasGeneric 里每一个具体子物品另有自己的 isEnabled() 开关。

功能:11 个已注册子物品

MetasGeneric 共 12 个枚举常量(MetasGeneric.java:18、:34、:70、:95、:134、:171、:186、:201、:220、:232、:256、:271),registerItems() 只注册 isEnabled() 为真的(MetasGeneric.java:315)。

# meta 常量 行 中文名 功能
0 gliderWing :18 滑翔翼 滑翔鸟游戏的可脱落翅膀
1 beam :34 光束 MetaPointer 系列,用指针选中方块后可取回整段方块序列
2 craneEngine :70 起重机引擎 起重机动力部件
3 craneMagnet :95 起重机磁铁 EntityMagnet 磁铁,可吸方块/实体
4 miracleMagnet :134 奇迹磁铁 更强的磁铁
5 line :171 线 连接起重机的绳线
6 mapController :186 地图控制器 地图系统的控制端
7 mapMemory :201 地图存储器 地图系统的存储端
8 assistantBase :232 助手基地 助理实体的放置基座
9 unpreparedStencil :256 未加工模板坯 绘图桌的输入材料
10 sketchingPencil :271 素描铅笔 绘图桌的另一个输入材料

第 11 个常量 cursor 是死的:isEnabled() 返回 false(MetasGeneric.java:223-225)且 createMetaItem() 返回 null(:228-230)。源码注释给出了明确理由:

Deprecated. Moved to ItemCursor Can't remove it from here because it'll re-index everyones items.. I guess the next time we add a meta, replace this one. —— MetasGeneric.java:216-219

即故意保留空位以免打乱所有已发放物品的 meta 索引。这一条注释就是仓库内确立该意图的证据,因此不作为缺陷报告。游标功能已迁到独立物品 OpenBlocks:cursor(OpenBlocks.java:476)。

逐项开关

meta isEnabled() 判据 行
sketchingPencil OpenBlocks.Blocks.drawingTable != null MetasGeneric.java:290-292
unpreparedStencil OpenBlocks.Blocks.drawingTable != null MetasGeneric.java:267-269
assistantBase OpenBlocks.Items.cartographer != null MetasGeneric.java:252-254
其余 8 项 恒 true —

这意味着:

  • 在配置中关掉绘图桌,sketchingPencil 与 unpreparedStencil 自动消失;而绘图桌的合成配方(Config.java:1085、:1087)恰好消费这两个子物品,于是配方永远无法匹配——isEnabled 判据与配方条件同源,两者自洽
  • 在配置中关掉制图师,assistantBase 自动消失

MetasGenericUnstackable(1 个)

# meta 常量 行 物品
0 pointer MetasGenericUnstackable.java:14 指针,createMetaItem 在 :17-22,isEnabled 在 :24

MetasBucket(1 个)

# meta 常量 行 物品
0 xpbucket MetasBucket.java:14 装满经验液的桶,createMetaItem 在 :17-21

数值

数值名 来源 值
MetasGeneric 常量总数 枚举 12(MetasGeneric.java:18–:271)
MetasGeneric 实际注册数 registerItems() 过滤 11(MetasGeneric.java:315)
MetasGenericUnstackable 常量数 枚举 1(MetasGenericUnstackable.java:14)
MetasBucket 常量数 枚举 1(MetasBucket.java:14)
素描铅笔合成 MetasGeneric.java:278-286 c=煤(任意 meta)、s=木棍,斜向排布

交互

触发 行为
打开配置 generic / genericUnstackable 不可单独禁用(isConfigurable = false)
移除绘图桌配置项 sketchingPencil / unpreparedStencil 自动注销
使用光束 MetaPointer 记录指针选中的方块序列
使用起重机磁铁 生成 EntityMagnet(CraneRegistry.java:57 调 new EntityMagnet.PlayerBound(...))

合成配方

素描铅笔(MetasGeneric.java:278-286):

c
 s
  s
字符 物品
c Items.coal,meta 为 OreDictionary.WILDCARD_VALUE(任意 coal)
s stickWood 木棍

未加工模板坯 unpreparedStencil(MetasGeneric.java:263):

 p
pip
 p
字符 物品
p Items.paper 纸
i ingotIron 铁锭

相关条目