寻矿魔杖配置
基本信息
| 属性 | 值 |
|---|---|
| 配置文件 | <config>/ifu.cfg |
| 分类 | 全部 9 项都在 Configuration.CATEGORY_GENERAL(同一段 general) |
| 读取时机 | preInit → ConfigHandler.init(event.getModConfigurationDirectory().toString());cfg == null 时才 new Configuration(path) 并 loadConfiguration() |
| 热重载 | @SubscribeEvent onConfigChangeEvent(ConfigHandler 注册在 FMLCommonHandler.instance().bus())—— 仅当 event.modID.equalsIgnoreCase("ifu") 时重载全部项 |
| 写回 | loadConfiguration() 结尾 if (cfg.hasChanged()) cfg.save(); |
配置项
| 配置键 | 类型 | 默认值 | 取值范围 | 内部字段 | 作用 |
|---|---|---|---|---|---|
X Z Area radius |
int | 5 | 1 ~ 16 | xzAreaRadius |
面积扫描的水平(X/Z)半径 |
Y Area radius |
int | 60 | 1 ~ 60 | yAreaRadius |
面积扫描的垂直(Y)上下半径 |
Ore vein discovery range |
int | 24 | xzAreaRadius ~ 64 |
oreVeinDiscoveryRange |
矿脉揭示半径(方形,以玩家为中心) |
Enable Everywhere |
boolean | false | — | enableEverywhere |
为 false 时只在主世界 / 下界 / 暮色森林生效 |
Sounds |
boolean | true | — | wandSound |
命中 ≥ 5 格时是否播放音效 |
Blocklist |
String[] | {} |
— | blocklist |
永不允许搜索的方块(按方块 Item ID) |
Material Blocklist |
String[] | {} |
— | materialBlocklist |
永不允许搜索的矿石材质名(大小写不敏感) |
Allowlist |
String[] | {} |
— | allowlist |
允许搜索的额外非矿石方块 |
Debug block info |
boolean | false | — | debugBlockInfo |
不潜行右键方块时在聊天栏打印调试信息 |
Blocklist/Material Blocklist/Allowlist三项在源码里的默认值是空数组{},即默认不过滤任何方块或材质。
三个列表项的语法
OreFinderSearch.listMatch(String[] entries, Block block, int meta) 统一解析允许表与阻止表,返回命中的 metadata(通配为 ANY_META = -1),未命中返回 NO_MATCH = -2。
解析规则:
- 物品名自带一个冒号(
modid:block),所以第二个冒号起才是 metadata 后缀 minecraft:cobblestone→ 名称minecraft:cobblestone+ 通配 metadata,匹配该方块任意 metadatagregtech:gt.blockores2:307→ 名称gregtech:gt.blockores2+ metadata307,只匹配该 metadata- 最后一个冒号后不是数字 → 整条当作名称,metadata 回退为通配(源码里捕获
NumberFormatException后这样处理) - 每条先
trim();null与空串直接跳过 - 名称比较用
Block.getBlockFromName(name) != block
materialBlocklist 的比较方式不同:遍历条目,对每个非 null 条目做 entry.trim().equalsIgnoreCase(material.getInternalName()),因此填 Gold、MeteoricIron 这类材质内部名即可(源码注释也这么建议)。
取值之间的相互影响
Ore vein discovery range的下界绑定当前xzAreaRadius:每次loadConfiguration都拿当次的xzAreaRadius作为minValue传入。因此把 X/Z 半径调大后,矿脉半径的合法下限会随之抬高。Enable Everywhere为 false 时,魔杖的物品提示会追加 2 行警告(IFU.disableAtSomewhereWarning1/2,“无法在地球之外使用” / “只可在主世界、下界与暮色森林使用”),见ItemOreFinderTool.addInformation。Debug block info打开后,每次不潜行右键方块都会经GTUtility.sendChatComp输出 1~2 行聊天信息:方块注册名 + metadata;若OreManager.getOreInfo认得出矿石,再补一行材质内部名、stoneType、isNatural、isSmall;认不出则输出 “Not a recognised ore block”。此外还会输出筛选格当前解析出的MatchTarget内部名,可直接抄进Material Blocklist/Allowlist。- 三个半径都是每 tick 实时读取的静态字段,改配置并重载后立刻生效,不需要重启。