矿石判定

基本信息

属性 值
类型 判定辅助类
源码 squeek.wailaharvestability.helpers.OreHelper(32 行)
职责 判断某方块是否算"矿",供 harvestability.oresonly 开关使用
唯一调用点 WailaHandler.getHarvestability 第 3 步

概述

OreHelper 没有配置项,也没有初始化,只提供静态判定。它服务于 harvestability.oresonly(默认 false)——开启后,非矿方块一行采集信息都不输出。

判定分三级,任一级命中即为矿。

三级规则

级 依据 条件 说明
1 矿物词典 OreDictionary.getOreName(oreID).startsWith("ore") 对 OreDictionary.getOreIDs(itemStack) 返回的每个 ID 取名,要求以小写 ore 开头(大小写敏感)。oreGold、oreIron 等命中;denseGold 不命中
2 显示名 `itemStack.getDisplayName().matches(".*(^ \s)([oO]re)($
3 非本地化名 itemStack.getUnlocalizedName().startsWith("ore") 非本地化名以小写 ore 开头

重载

方法 行为
isBlockAnOre(Block) 等价于 isBlockAnOre(block, 0)
isBlockAnOre(Block, int metadata) isItemAnOre(new ItemStack(block, 1, metadata))
isItemAnOre(ItemStack) 上述三级规则本体

与 metadata 的关系

调用点传入的是经过 getWailaBody 修正后的 meta:

  • 若 WAILA 显示的是 ItemBlock 且 GT 方块类型既不是 Casing 也不是 Machine,meta 会被换成 itemStack.getItemDamage();
  • GT 矿石(GTBlockType.Ore)会关闭 capMeta,meta >= 16 时不截断为 0。

因此同一个 GT 矿石方块在这里用的是真实 metadata,不会被 meta >= 16 → 0 的保护逻辑误伤。

源码现状提示

  • 判定完全依赖词典名、显示名与非本地化名,没有任何矿物方块类白名单。因此未被矿物词典收录(没有 ore* 条目)且命名不含 ore 的矿——例如某些 mod 命名为 MineralFoo、RawDeposit 的方块——会被判为非矿,在 oresonly 下不显示任何信息。
  • 第 1 级与第 3 级用 startsWith("ore")(小写),第 2 级用 ([oO]re)(含大写)。三个规则的宽严并不一致。

相关条目