地图与制图物品(高度地图 / 空白地图 / 制图师 / 金眼石)与经验桶
基本信息
| 物品 | 注册名 | 类 | 声明位置 |
|---|---|---|---|
| 高度地图 | OpenBlocks:heightMap |
ItemHeightMap |
OpenBlocks.java:458(unlocalizedName = "height_map") |
| 空白地图 | OpenBlocks:emptyMap |
ItemEmptyMap |
OpenBlocks.java:461(unlocalizedName = "empty_map") |
| 制图师 | OpenBlocks:cartographer |
ItemCartographer |
OpenBlocks.java:464(textureName = RegisterItem.NONE) |
| 金眼石 | OpenBlocks:goldenEye |
ItemGoldenEye |
OpenBlocks.java:470(unlocalizedName = "golden_eye") |
| 经验桶 | OpenBlocks:filledbucket |
ItemFilledBucket |
OpenBlocks.java:443(textureName = RegisterItem.NONE) |
「地图系统」是 OpenBlocks 里体量最大但文档最少的子系统:MapDataManager、MapDataBuilder、HeightMapData 三个类加上 openblocks.client.renderer.tileentity.guide 下的 7 个渲染器,共同实现真实高度图(把地形高度数据编码进物品 NBT)与缩放地图。
功能
高度地图与空白地图
ItemHeightMap 与 ItemEmptyMap 是这一对的核心。ItemEmptyMap 的 NBT 键:
| 常量 | 值 | 含义 |
|---|---|---|
TAG_SCALE |
"Scale" |
地图缩放级别 |
MAX_SCALE |
4 | 最大缩放 4(ItemEmptyMap.java:22-23) |
配套的自定义配方有两个(common/recipe/):
MapCloneRecipe—— 复制已填充的地图MapResizeRecipe—— 改变地图缩放CrayonMixingRecipe—— 与彩笔眼镜配方同属地图/绘图体系- 其余 4 个配方:
CrayonGlassesRecipe、EpicEraserRecipe、GoldenEyeRechargeRecipe、TorchBowRecipe(common/recipe/目录共 7 个文件)
制图师
ItemCartographer 堆叠为 1(ItemCartographer.java:50)。它是地图系统的放置端——MetasGeneric.assistantBase 的 isEnabled() 判据就是 OpenBlocks.Items.cartographer != null(MetasGeneric.java:252-254),即关掉制图师会连带隐藏助手基地。
金眼石
可充能的结构指示器。
| 常量 | 值 | 位置 |
|---|---|---|
MAX_DAMAGE |
100 | ItemGoldenEye.java:31、:35 |
TAG_STRUCTURE |
"Structure" |
ItemGoldenEye.java:32 |
| 堆叠 | 1 | ItemGoldenEye.java:37 |
Config.eyeDebug 打开后会在聊天栏输出调试信息(ItemGoldenEye.java:62、:103)。GoldenEyeRechargeRecipe 负责为它充能(common/recipe/GoldenEyeRechargeRecipe.java)。
经验桶
ItemFilledBucket 只有一个 meta xpbucket(MetasBucket.java:14),装的是 OpenBlocks:xpjuice 液体——与经验瓶机 / 喷经验浴 / 真空漏斗 输出的是同一种液体。
地图数据管理
MapDataManager 以单例注册在 Forge 事件总线上(OpenBlocks.java:702),并注册 3 个网络事件:MapDataRequestEvent、MapDataResponseEvent、MapUpdatesEvent(OpenBlocks.java:614-615,经 NetworkEventManager.INSTANCE.startRegistration())。其 catch (Throwable) 处理见游戏规则与指令的容错一节。
数值
| 数值名 | 来源 | 值 |
|---|---|---|
| 空白地图最大缩放 | MAX_SCALE |
4(ItemEmptyMap.java:23) |
| 金眼石耐久 | MAX_DAMAGE |
100(ItemGoldenEye.java:31) |
| 金眼石堆叠 | 硬编码 | 1(ItemGoldenEye.java:37) |
| 制图师堆叠 | 硬编码 | 1(ItemCartographer.java:50) |
| 经验桶 meta 数 | MetasBucket 枚举 |
1(MetasBucket.java:14) |
| 液体↔XP 换算 | Config.xpToLiquidRatio |
20 mB / 点(Config.java:539) |
交互
| 触发 | 行为 |
|---|---|
| 空白地图 + 制图师 | 生成带高度数据的地图 |
| 复制已填充地图 | MapCloneRecipe 生效 |
| 缩放地图 | MapResizeRecipe 生效,上限 MAX_SCALE = 4 |
| 金眼石耗尽 | 耐久 100 用完后损坏 |
| 金眼石充能 | GoldenEyeRechargeRecipe |
| 经验桶倒出 | 得到经验液;LiquidXpUtils.liquidToXpRatio 向下取整 |
合成配方
制图师与高度地图的具体配方在 Config.java 物品段(Config.java:1210 之后),本次未逐条核对字符表。经验桶的配方定义在 ItemFilledBucket 内部(MetasBucket 体系),而非 Config.java。
与其它 3 组地图/绘图配方一样,
MapCloneRecipe/MapResizeRecipe/CrayonMixingRecipe都不是IRecipe标准实现路径里的普通ShapedOreRecipe——它们是自定义IRecipe实现,注册位置在Config.register()里MetasGeneric.registerItems()附近(Config.java:608-612)。
相关条目
- 方块 / 经验类方块 - 经验液的来源
- 方块 / 自动化设备 - 真空漏斗的经验液输出
- 通用 meta 物品 -
mapController/mapMemory/assistantBase - 配置项全表 -
eyeDebug等