欢迎光临散文网 会员登陆 & 注册

MCJE 低版本的红石粉表现

2023-02-23 23:28 作者:Void0  | 我要投稿

本文的所有实验都在 Minecraft Java 版的一个 1.12.2 服务器上运行,服务器使用的是 carpet 端,默认不影响原版特性,没有打开影响原版特性的设置。本文所有的代码分析取自 1.12.2 carpet mod 的一个分支,源码是 MCP 生成的,使用限度在相关条款规定的限度之内。本文的结论应当适用于 Minecraft Java 版 1.8 - 1.15 的版本。1.16 之后红石线被改动了,变成了今天我们熟知的样子。本文的图片的材质包使用了 XK 红石显示资源包,和一个在低版本显示高版本材质的资源包。

最近在 MCJE 1.12 实验的时候,发觉低版本的红石粉特性不仅和高版本的很不一样,而且很怪异。这种怪异体现在何处?首先上一张图:

这张图里你看到的方块就是所有方块了,没有你看不到的电路结构。现在假设我们把所有拉杆都打开,请回答,图中的七个活塞哪些会伸出,哪些会收回?

奇特的实验结果

好,答案已经在上一张图给出来了,实验结果非常反直觉。低版本的红石粉是这样的,它的表现确实很反直觉,现在我们将要给出低版本红石粉的运作规律。下面描述的规律是直接看代码得到的,并且经过了实验测试,测试结果均与理论相符,因此应当是准确的。

好,控制红石粉对某个方向的方块充能的方法就在这里了。这个方法的参数中的 pos 是红石粉的位置,side 是计算的要充能的位置相对于红石粉的相反的方向。我们看一下这个逻辑:

  1. 红石粉始终可以对自己下方的方块充能,始终不可以对自己上方的方块充能。

  2. 如果测试的方向是水平的方向,那么对全部四个水平方向判断一个条件 T,代码中是 isPowerSourceAt(...) 这个方法,将符合条件的方向添加到一个列表里面。

  3. 如果所有四个水平方向都不符合条件 T,那么红石粉可以对目标位置充能。

  4. 否则,红石粉可以对目标位置充能,当且仅当目标方向的相反方向满足条件 T,但是垂直于目标方向的两个水平方向都不满足。

我们看到,决定红石粉对水平方向充能的关键是这个条件 T 也就是 isPowerSourceAt(...) 这个判定,我们来看一下它的内容:

这里面连着的 if - else if - else 中的第三个块是没有存在的必要的

我们经过代码阅读,可以得到下面的逻辑:取位置 P,方向 D,红石粉对是否应该对方向 D 供能的判定如下:


对水平的方向 E,记 Q 为 P 向 E 移动一格的位置,我们按照下面的条件判定是否认为方向 E 是满足条件 T 的:
1) 如果 P 上面的方块不是完整固体,Q 是完整固体,Q 上面是红石粉,则认为 E 满足条件 T (对应红石线爬过一个完整方块连到高一格的红石线)
2) 如果 P 的红石粉可以连到 Q 的方块,则认为 E 满足条件 T (对应红石线被一个中继器、侦测器、探测铁轨或者红石粉等等转向)
3) 如果 Q 位置的方块不是完整固体,Q 下面是红石粉,那么认为 E 满足条件 T (对应红石线连到低一格的红石线)
4) 否则认为 E 不是满足条件 T 的

我们看到,条件 T 的判定大概的意思是,P 处的红石粉可以沿着方向 E 连到某个别的红石粉或者可以引导红石粉朝向的元件。因此,我们称这个条件 T 为可连接的。我们对上面的逻辑有如下可视化:

其中,红色混凝土表示红石粉的位置,绿色混凝土表示红石粉认为可以连接的方向,灰色混凝土表示红石粉认为不可以连接的方向。如果用文字描述可连接的判定的话:红石粉有三种方式在某个方向可连接:连到高一格、同一高度 或者 低一格的元件。

  1. 红石粉可以连接到目标方向上的高一格的置于普通方块上的红石粉(注意,半砖之类的方块不行),并且要求没被压线

  2. 红石粉可以连接到目标方向上的同一格高的别的红石粉或者可以引导红石线朝向的元件上

  3. 红石粉可以连接到目标方向上的低一格的红石粉(与第一条不同,没有要求普通方块),并且要求没被压线

如果上述三条都不满足,就不认为在这个方向上是可连接的。请读者自行验证,上面的文字描述与可视化是相符的。那么一开始我们写的关于可以充能的方向的判定,可以变成下面一张图的可视化的规律总结——注意下图在旋转和翻转的意义下已经涵盖了所有方向的所有可能的连接判定的情况:

其中,红色混凝土代表红石粉的位置,绿色混凝土代表红石粉认为在这个方向上可以连接,灰色混凝土代表认为在这个方向上不可以连接,一个方向上的红石灯亮起/熄灭代表红石粉会/不会对这个方向充能。注意到第一种情况代表点状红石,第二、三种情况是我们通常的红石线。


那么理论部分完毕了,我们解释开头的现象也是容易的了。开头的那几个装置的下方的混凝土,分别代表了连接判定情况。请读者自行验证这与理论相符,作者只描述两个装置:


左:连接到了低一格的红石粉;右:连接到同高度的红石粉,前:没有东西连接,后:连接到同高度的探测铁轨
作者认为最反直觉的装置,这个红石粉可以对四个方向供能,虽然它视觉上是直的,但是游戏认为它是点状红石!左、前、后:没有东西连接;右:虽然高一格的地方有红石粉,但是那个红石粉下面的萤石不是普通方块,所以连接不了。

其它的现象留给读者作为练习。

MCJE 低版本的红石粉表现的评论 (共 条)

分享到微博请遵守国家法律