地图与制图物品(高度地图 / 空白地图 / 制图师 / 金眼石)与经验桶

基本信息

物品 注册名 类 声明位置
高度地图 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)。

相关条目