/oredistribution
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | oredistribution(CommandOreDistribution.scala:25) |
| 权限等级 | 2(CommandOreDistribution.scala:26) |
| 用法 | /oredistribution <radius> [<min height>] [<max height>] [--file](en_US.lang) |
| 位置基准 | 玩家当前坐标;控制台执行时为 (0, 0) |
| 输出文件 | <Minecraft 主目录>/ore_distribution.txt(仅 --file) |
| 扫描对象 | 矿物字典中以 ore / denseore 开头的条目 |
功能
/oredistribution 统计玩家周围指定区域内的矿物分布,用于平衡检查与整合包矿物配比调优。
参数解析
指令把以 -- 开头的参数归入 flags(:41),其余归入 params,并要求 params.length 在 1 到 3 之间,否则抛 WrongUsageException(:43-44)。
| 位置参数 | 含义 | 默认值 |
|---|---|---|
| 第 1 个 | 半径 radius(水平方向,按 X/Z 双向展开) |
必填 |
| 第 2 个 | 最低高度 minY |
0(:53) |
| 第 3 个 | 最高高度 maxY |
world.getHeight - 1(:54-55) |
唯一的标志是 --file(:60),控制是否把结果写入文件而非仅打印到聊天栏。
参数经 safeInt 转换,转换失败抛 WrongUsageException。校验条件为 minY < 0 || radius <= 0 || minY > maxY || maxY > world.getHeight - 1,任一成立即报用法错误(:57)。
矿石名称归一化
指令遍历 OreDictionary.getOreNames,只取以 ore 或 denseore 开头的条目,并去掉前缀作为显示名:ore 前缀直接截去 3 字符,denseore 前缀截去 8 字符并加 Dense 前缀(:86-91)。这使得 oreIron、denseoreGold 之类的条目统一显示为 Iron、Dense Gold。
随后对每个条目取其所有变体,构成 (Item, meta) -> 显示名 的映射表(:82-93)。
统计与告警
主循环遍历 startX ± radius × minY..maxY × startZ ± radius 的方块,跳过空气块,取 (Item.getItemFromBlock, blockMetadata) 查映射表累加计数(:97-114)。最后计算 total = distribution.values.sum,并筛出 kinds 中变体数 > 1 的条目作为生成变体告警(:115-116),对应本地化键 bdlib.oredistribution.warn(%s Warning: %s has multiple variants generated:)。
数值
| 数值名 | 值 |
|---|---|
| 位置参数个数 | 1(必填)~ 3(可选) |
| 支持的标志数 | 1(--file) |
| 扫描体积 | (2r+1)² × (maxY - minY + 1) 个方块坐标 |
默认 minY |
0 |
默认 maxY |
world.getHeight - 1 |
| 识别的前缀 | ore、denseore |
| 输出百分比精度 | 整数百分比(bdlib.oredistribution.entry = %s %s - %s (%s%%)) |
交互
| 触发 | 行为 |
|---|---|
玩家输入 /oredistribution 50 |
扫描玩家周围 101×101×世界高度 的方块,聊天栏输出各矿石占比 |
玩家输入 /oredistribution 30 0 64 |
限定 Y 0–64 扫描 |
追加 --file |
结果额外写入 ore_distribution.txt,聊天栏提示 Ore distribution dumped to %s |
| 从控制台执行 | 以 (0, 0) 为中心扫描当前世界 |
| 某矿石名对应多个实际变体 | 额外输出黄色告警行 |
| 权限等级不足 2 | 指令被拒绝 |
执行前会先输出 Checking ore distribution in ... dim ... 与 Server may lag for a while(bdlib.oredistribution.start1 / start2)——这是一个阻塞式扫描,大半径会导致服务器明显卡顿。
本地化覆盖情况
en_US.lang 提供了全部 6 个 bdlib.oredistribution.* 键;但 zh_CN.lang 中不存在任何 bdlib.oredistribution.* 条目(对比 zh_CN.lang 仅含 multiblock 与 rsmode 相关键),因此中文环境下该指令的所有提示均显示为原始键名。
相关条目
- /dumpregistry - 同一注册者提供的注册表导出指令
- BD lib 库本体 - 两条指令的注册时机