Block Grep

Block Grep

高亮附近所有符合方块样式的出现位置

杂项

高亮显示你附近方块图案的每一次出现。

图案可以是 1D、2D 或 3D 的,你可以搜索不同方块的形状和组合,包括通配符(?)。

使用方法

配置此模组最简单的方法是使用 GUI 设置界面。可以通过命令 /blockgrep config 打开,或者前往 选项 → 控制 → 按键绑定 → Block Grep 为“打开图案设置”分配一个按键。

在 Fabric 上,如果你安装了 Mod Menu,它也会出现在模组菜单列表中。

在设置界面中,你可以创建新的图案并配置它们的渲染设置。

命令

如果你愿意,也可以完全使用命令来配置此模组。

/blockgrep pattern [symmetry] <spec>   添加任意维度的形状
/blockgrep box <x> <y> <z> <blocks>    添加一个均匀的箱体
/blockgrep list                        显示已保存的图案
/blockgrep toggle <n>                  开启或关闭一个图案
/blockgrep only <n>                    启用一个图案,禁用其余图案
/blockgrep all on|off                  一次性开启或关闭所有图案
/blockgrep name <n> <text>             重命名一个图案
/blockgrep remove <n>                  删除一个图案
/blockgrep radius <blocks>             4–128,默认 32
/blockgrep limit <count>               默认 512
/blockgrep config                      打开设置界面
/blockgrep status
/blockgrep off

图案语法

图案由单元谓词组成,每个谓词尝试匹配一个方块:

形式 含义
mud 该方块(命名空间默认为 minecraft)
mud,dirt 泥巴或泥土
mud,dirt,grass_block 泥巴、泥土或草方块
#minecraft:trapdoors 任何带有该标签的方块,例如本例中的任何活板门
? 任何方块,包括空气
!air 任何其他项不匹配的东西

这些谓词通过 、| 和 || 组合成更大的图案。例如:

形式 含义
mud mud 两个相邻的泥巴方块(东西方向)
mud \| mud 两个相邻的泥巴方块(南北方向)
mud mud \| mud mud 四个泥巴方块组成一个 2x2 的正方形
mud,dirt mud,dirt \| mud,dirt mud,dirt 四个泥巴或泥土方块组成一个 2x2 的正方形
stone stone \| stone stone \|\| mud mud \| mud mud 一个 2x2x2 的立方体,底层为石头,顶层为泥巴

示例

  • 一个由泥巴和/或泥土组成的 2x2 正方形:

    • /blockgrep box 2 1 2 mud,dirt,或者
    • /blockgrep pattern mud,dirt mud,dirt | mud,dirt mud,dirt
  • 一个草方块在另一个草方块上方:

    • /blockgrep pattern grass_block || grass_block
  • 一个 2x2 的泥巴,上方有任意方块(或没有方块):

    • /blockgrep pattern mud mud | mud mud || ? ? | ? ?
  • 任意木材种类的 2x2 原木:

    • /blockgrep pattern #logs #logs | #logs #logs

维度形式

图案也可以以显式维度给出,后面跟上 x·y·z 个单元,顺序为 x、z、y:

/blockgrep pattern 2 2 2 mud mud mud mud #logs ? ? #logs

对称性

默认情况下,图案会以所有四个罗盘方向进行匹配。在图案前添加一个可选的对称性说明符可以改变这一点。它最多由三个轴字母组成 —— 小写字母表示允许绕该轴旋转,大写字母或省略表示固定 —— 以及 h 和 v 分别允许水平和垂直镜像。

/blockgrep pattern XYZ   mud ? | ? mud     仅按原样匹配        (1)
/blockgrep pattern y     mud ? | ? mud     四个罗盘方向旋转     (4,默认)
/blockgrep pattern yh    mud ? | ? mud     ...加上水平翻转          (8)
/blockgrep pattern yv    mud ? | ? mud     ...加上自上而下的翻转    (8)
/blockgrep pattern yvh   mud ? | ? mud     两种镜像系列            (16)
/blockgrep pattern xyz   mud ? | ? mud     立方体的所有 24 种旋转
/blockgrep pattern xyzvh mud ? | ? mud     所有 48 种,包括反射

镜像平面也可以单独命名,在 + 后面加上各自的法线轴:+x 是东西翻转,+y 是自上而下的翻转,+z 是南北翻转。 所以 yh 完全等同于 y+xz,而 yv 等同于 y+y。

有三点值得了解:

  • 绕两个不同轴的旋转会产生绕第三个轴的旋转,所以 xy、yz、xz 和 xyz 都表示相同的 24 个方向。
  • 反射不包含在旋转中。一个 L 形及其镜像无论如何旋转都是不同的形状,这就是 h 和 v 存在的原因。
  • 镜像之所以可以互换,仅仅是因为旋转。有了 y 的四种旋转,+x 和 +z 就表示相同的八个方向;如果完全没有旋转,它们就是真正不同的翻转,而 XYZ+xz 会给出四种方向,因为组合两个镜像会产生一个 180° 的转动。

对称的形状会去重,因此无论搜索了多少种方向,每次出现都只会报告一次。

性能

扫描器会遍历区块截面(16x16x16 方块),并使用截面调色板来排除不可能包含任何候选方块的区块,这会跳过其中绝大多数区块。扫描会被缓存,只有在你移动约 8 个方块或每 2 秒时才会重新运行。

区块会按距离优先访问,因此达到匹配限制的扫描会报告你周围的内容,而不是半径内某个角落恰好存在的东西。限制在活动图案之间共享,因此一个非常常见的图案不会排挤掉其他图案。

包含 ! 的图案无法使用区块调色板的早期退出机制,因此相应地会更慢——尽可能明确地命名方块。

只有客户端已加载的区块才会被搜索,因此范围受渲染距离限制,无论 radius 设置如何。

作弊

注意:此模组可以用作矿石探测器,因此应被视为有点作弊。 我们考虑过移除 X-ray 模式以打造一个“精简版”的非作弊版本,但你仍然可以寻找,例如,grass_block 或 stone 下方有价值的矿石,并高亮那个价值较低的方块,所以虽然移除 X-ray 模式会限制大规模作弊,但它并不会使其成为一个公平的非作弊模组。