/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 相关键),因此中文环境下该指令的所有提示均显示为原始键名。

相关条目