矿石判定
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 判定辅助类 |
| 源码 | 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)(含大写)。三个规则的宽严并不一致。
相关条目
- WAILA 采集选项 -
harvestability.oresonly开关(默认false) - WailaHandler 插件与提示栏组装 - 过滤在判定链中的位置
- 兼容代理 -
ProxyGregTech提供的 GT 矿石方块类型