通用 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 铁锭 |
相关条目
- 模板与颜料刷 -
stencil物品与 15 种模板 - 物品 / 地图与制图 - 地图控制器 / 存储器 / 制图师的实际用途
- 实体 / 磁铁 - 起重机磁铁生成的
EntityMagnet