【MCJE】铜块氧化农场设计(含原理)
易名亦名
编辑于 2023年08月14日 18:21

存档:https://wwnk.lanzouk.com/b01l5ia5g 密码:8kv0

第二章和第三章有具体的农场设计过程和使用说明,最好参考一下

目录

第一章 铜块氧化原理

第二章 活塞推动-高效型铜块氧化农场设计

第三章 基于假人的高效型铜块氧化农场设计

第一章 原理(文案)

原视频在这里:

2021年,我的世界更新了洞穴与山崖的版本,Mojang为玩家添加了一类新的物品——铜,并表达了对玩家的期待,“想要打造随时间不断变化的定居点吗?挖掘铜并用其打造在您眼前慢慢变老的结构”。

然而铜块的存在感可以比肩MC三大废石,正如Mojang所期待,铜块成为了MC中不可多得的建筑方块,但铜块在满足建筑玩家的建造欲的同时,后勤却无法忘记晾晒铜块所支配的恐惧。而生电玩家势必要破除这种恐惧。目前铜块的量产是通过击杀溺尸获得的铜锭合成的,而网上关于铜块氧化的生电机器的研究尚少,不过也有一些玩家设计了一些可行的铜块氧化农场,比如国外大佬cubicmetre系统的研究了铜块的氧化原理,并先后设计的几个铜块氧化农场。

想要设计出一款像cubicmetre这样性能优良的铜块氧化农场,那么就有必要了解一下铜块氧化原理

随机刻原理

在讲解原理之前,我们需要了解一下随机刻原理。在座各位Minecraft玩家或多或少会接触到随机刻,它是我的世界中重要的运行规律之一,今天,让我们从一种全新的视角认识一下随机刻。

在minecraft维基百科中,随机刻是这么解释的,“在Java版中,在每个游戏刻,执行区块刻的区块中,每个区段默认会被随机选出randomTickSpeed个方块给予随机刻。”

其中游戏刻不必多说,但区段有必要解释一下。在Minecraft中,游戏世界是以区块的单位进行加载的,一个区块占据着世界水平方向的16×16的区域,然后我们按照16格的高度对区块进行均匀分割,得到的每个16×16×16的区域均是该区块的一个区段。

对于randomTickSpeed这个参数,修改过随机刻的玩家一定不陌生,它是一个可修改参数,默认为3,接下来的讲解均按照默认进行。

被给予随机刻的方块会执行对应的随机刻事件,比如铜块氧化为斑驳的铜块,农作物生长等等。

重点来了,为了更加容易的理解随机刻,在这里,我们赋予随机刻时间尺度上的意义,和游戏刻一样,用于衡量游戏时间。随机刻与游戏刻之间的关系由随机刻速度(也就是randomTickSpeed)决定。我们可以将一个游戏刻分为randomTickSpeed份,每份可以认为是一个随机刻(这里单位用randt表示)即1游戏刻 = randomTickSpeed 随机刻。

默认情况下,1s = 20gt = 60 randt。

在每个随机刻中,每个区段随机选且仅选一个方块执行随机刻事件。而我们很容易得到在区段中随机选择到任意一个方块的概率:

P_b%20%3D%20%5Cfrac%7B1%7D%7B16%5E3%7D

铜块氧化过程一共分为四种阶段,分别是未锈蚀、斑驳、锈蚀和氧化,我们分别将这四种状态记为ABCD,氧化过程是按照顺序依次进行的,铜块每次执行随机刻事件,最多氧化到下一阶段,不会跳级氧化。

在讲解铜块的氧化原理之前,我们需要了解一种距离测量方式——曼哈顿距离。在Minecraft中,曼哈顿距离可以用两方块坐标在坐标系上的绝对轴距之和表示,例如图示两个方块的曼哈顿距离等于它们在x轴、y轴和z轴轴距的绝对值之和,为2+2+2=6。

当铜块被随机刻选中后,该铜块进行接下来的操作。

1、Pt1=5.688889%的概率继续执行

2、判断该铜块是否已经完全氧化,即处于状态D

3、判断距离该铜块曼哈顿距离小于等于4的方块中是否有小于该铜块的状态的非涂蜡铜块:

如果有,则该铜块不会氧化到下一阶段。

曼哈顿距离小于等于4用Minecraft中常用的术语可以表述为四阶毗邻内。

4、分别统计该铜块的四阶毗邻内的大于和等于自身的状态的非涂蜡方块,分别记为j和k

5、目前为止,该铜块会有Pt的概率氧化到下一个状态,Pt的计算如下所示

P_%7Bt2%7D%20%3D%20(%5Cfrac%7Bk%2B1%7D%7Bj%2Bk%2B1%7D)%5E2%5Ccdot%200.75%5Ei%5C%5C%20i%3D1-%E9%93%9C%E5%9D%97%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%BAA%5C%5C%20i%3D0-%E9%93%9C%E5%9D%97%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%BABC

通过流程图,我们可以看,铜块氧化的概率除了受到随机刻和5.688889%这些固定概率之外,就只与自身状态以及周围铜块的数量和状态这些可变概率有关。

P_o%20%3D5.688889%5C%25%5Ccdot%20a%20%5Ccdot%200.75%5Ei%5Ccdot(%5Cfrac%7Bk%2B1%7D%7Bj%2Bk%2B1%7D)%5E2%5C%5C%20a%3D0%2F1-%E5%9B%9B%E9%98%B6%E6%AF%97%E9%82%BB%E5%86%85%E6%9C%89%2F%E6%97%A0%E5%B0%8F%E4%BA%8E%E8%87%AA%E8%BA%AB%E7%8A%B6%E6%80%81%E7%9A%84%E9%93%9C%E5%9D%97%5C%5C%20i%3D1%2F0-%E9%93%9C%E5%9D%97%E7%9A%84%E7%8A%B6%E6%80%81%E4%B8%BAA%2FB%E6%88%96C%5C%5C%20j-%E5%9B%9B%E9%98%B6%E6%AF%97%E9%82%BB%E5%86%85%E7%AD%89%E4%BA%8E%E8%87%AA%E8%BA%AB%E7%8A%B6%E6%80%81%E7%9A%84%E9%93%9C%E5%9D%97%E7%9A%84%E6%95%B0%E9%87%8F%5C%5C%20k-%E5%9B%9B%E9%98%B6%E6%AF%97%E9%82%BB%E5%86%85%E5%A4%A7%E4%BA%8E%E8%87%AA%E8%BA%AB%E7%8A%B6%E6%80%81%E7%9A%84%E9%93%9C%E5%9D%97%E7%9A%84%E6%95%B0%E9%87%8F%5C%5C

铜块氧化机器可以分为高效率型和小体积型。

当被随机刻选中的铜块的四阶毗邻内没有未涂蜡的铜块时,铜块的氧化不受其他铜块的影响,氧化速度最快,这种是高效率型。当有未涂蜡的铜块时,铜块的氧化会出现等待效应,即氧化状态高的铜块会等待周围氧化状态低的铜块,同时铜块之间相互影响,进一步降低铜块的氧化速度,但是这种相比高效率型体积会小很多,因此我们称这种为小体积型。

高效率型和小体积型,各有优劣,我们应当根据自己的情况进行选择。本文主要探究一种高效率型的铜块氧化机器。

当铜块的四届毗邻内没有其他的铜块时,铜块氧化为各个阶段的概率是固定的。当这些铜块被随机刻选中时,各个阶段转化为下一阶段的概率分别如下所示:

  • 未锈蚀A -> 斑驳B

    P_%7Bo1%7D%20%3DP_%7Bo%7D%7C_%7Ba%3D1%2Ci%3D1%2Cj%3Dk%3D0%7D%3D0.05688889%5Ctimes%20%200.75%3D%204.267%5C%25

  • 斑驳B -> 锈蚀C 和 锈蚀C->完全氧化D

    P_%7Bo2%7D%20%3DP_%7Bo%7D%7C_%7Ba%3D0%2Ci%3D0%2C%20j%3Dk%3D0%7D%3D%200.05688889%5Ctimes1%20%3D5.689%5C%25

一个随机刻只对每个子区块随机选择一个方块执行随机刻事件,根据Pb,我们可以计算出每个随机刻,铜块转化为下一阶段的概率:

P_%7BAB%7D%20%3D%20P_bP_%7Bo1%7D%20%3D%20%5Cfrac%7B1%7D%7B16%5E3%7D%5Ctimes4.267%5C%25%20%3D1.043%5Ctimes10%5E%7B-5%7D%20(%E9%93%9C%E5%9D%97%E4%B8%BA%E6%9C%AA%E9%94%88%E8%9A%80%E7%8A%B6%E6%80%81)%5C%5C%20P_%7BBC%7D%20%3DP_%7BCD%7D%20%3DP_bP_%7Bo2%7D%3D%20%20%5Cfrac%7B1%7D%7B16%5E3%7D%5Ctimes5.689%5C%25%20%3D1.389%5Ctimes10%5E%7B-5%7D(%E9%93%9C%E5%9D%97%E4%B8%BA%E6%96%91%E9%A9%B3%E6%88%96%E9%94%88%E8%9A%80%E7%8A%B6%E6%80%81)

铜块氧化概率统计

在查阅铜块氧化相关资料时,发现了cubicmetre已经对铜块氧化概率已经有所研究,但他仅仅通过模拟实验获得铜块的氧化概率分布曲线,但作为理论红石玩家,我需要从理论上获得这些曲线。

铜块氧化数学模型建立

对于铜块的氧化过程,我们可以简化为下列数学问题:

已知所有铜块的四阶毗邻内没有未涂蜡铜块,在每个随机刻铜块由未锈蚀转化为下一阶段的概率为PAB=Pbo1=1.043E-5,由斑驳和锈蚀转化到下一个阶段的概率为PBC= PCD=Pbo2 =1.389E-5。

假设世界中有一个未锈蚀的铜块,求经过t个连续的随机刻后,该铜块处于未锈蚀、斑驳、锈蚀和完全氧化四种状态的概率分布。

遗憾的是,它不是一种常见的分布,接下来我们需要对其分析。设随机变量X表示铜块经过t个连续的随机刻后铜块的状态。首先随机刻是离散的,因此随机变量X是离散型随机变量,对于离散型随机变量,我们求出随机变量X所有可能取值的概率即可。

为了了解铜块的氧化过程,这里以4个连续的随机刻为例,对铜块的状态的概率分布进行分析。

如图所示是最终状态为A的氧化路径示意图,我们可以看到,这种情况的氧化路径有且只有这一种,为AAAA,因此每个随机刻,铜块都需要保证不会被氧化到B状态,每个随机刻的概率为(1-P_AB),因此最终状态为A的概率为:

P(X%3DA)%7C_%7Bt%3D4%7D%3D(1-P_%7BAB%7D)%5E4

这个是最终状态为B的氧化路径示意图,我们可以看到,这种情况的氧化路径有这四种,其氧化路径有AAAB、AABB、ABBB、BBBB。比如铜块在第2个随机刻由A氧化为B,在第1个随机刻需要保证为A,概率为(1-P_AB),在第2个随机刻由A氧化为B,概率为P_AB,在后面的随机刻需要保证铜块不会由B氧化为C,因此概率为(1-P_BC)。因此这个路径的概率为:

P(X%3DB_2)%7C_%7Bt%3D4%7D%3D(1-P_%7BAB%7D)P_%7BAB%7D(1-P_%7BBC%7D)%5E2

同理我们也可以算出其他三条路径的概率P(X=B_0)、P(X=B_1)、P(X=B_3)。

将所有路径的概率相加就是最终状态为B的概率:

P(X%3DB)%7C_%7Bt%3D4%7D%3D%20%5CSigma%5E%7B4%7D_%7Bi%3D0%7D%20P(X%3DB_i)%7C_%7Bt%3D4%7D

如图所示是最终状态为C的氧化路径示意图,我们可以看到,这种情况的氧化路径有这六种,其氧化路径有AABC、ABBC、ABCC、BBBC、BBCC、BCCC;

如图所示是最终状态为D的氧化路径示意图,我们可以看到,这种情况的氧化路径有这四种,其氧化路径有ABCD、BBCD、BCCD、BCDD;按照B的方法,我们也可以求出C,D的概率。

通过上述的分析,相信各位对4个连续随机刻的铜块的氧化过程有了一定的理解,接下来我们需要将随机刻的数量推广到t。其中最容易计算的就是最终状态是未锈蚀的铜块的概率

P_A(t)%20%3D%20(1-P_%7BAB%7D)%5Et

当t个随机刻后铜块都没有转化,就是未锈蚀的铜块的概率。

最终状态为其他三种状态的概率计算会稍微麻烦。我们可以看到t个随机刻是一个离散量,即是有限的,因此我们只需将这一概型的分布律都计算出来,将最终状态相同的概率加起来就是各个状态的概率,因此

P_%7BB%7D%20(t)%3D%20%5CSigma%5E%7Bt-1%7D_%7Bt_1%3D0%7D(1-P_%7BAB%7D)%5E%7Bt_1%7DP_%7BAB%7D(1-P_%7BBC%7D)%5E%7Bt-t_1-1%7D

解释一下,当铜块在前t1个随机刻没有转化为状态B,在第t1+1个随机刻转化为了状态B,并且在之后的t-t1-1个随机刻没有转化为状态C,因此这些所有情况之和就是最终状态为斑驳的铜块的概率。

我们可以看到,在PB的计算公式中,有求和符号,不好直接计算,根据微积分的思想,当随机刻足够大时,我们便可以将求和近似为积分运算。

P_B(t)%5Capprox%20%5Cint%5E%7Bt-1%7D_%7B0%7D(1-P_%7BAB%7D)%5E%7Bt_1%7DP_%7BAB%7D(1-P_%7BBC%7D)%5E%7Bt-t_1-1%7D%5C%2C%20dt_1%5C%5C%20%3DP_%7BAB%7D%5Ccdot%5Cfrac%7B(1-P_%7BAB%7D)%5E%7Bt-1%7D-(1-P_%7BBC%7D)%5E%7Bt-1%7D%7D%7Bln%7B(1-P_%7BAB%7D)%7D-ln(1-P_%7BBC%7D)%7D

可以看到这个积分是可积的,并且我们可以使用matlab非常便捷的计算积分。

同理我们可以计算出锈蚀的铜块和完全氧化的铜块的概率:

%5Cbegin%7Balign%7D%20P_C(t)%20%26%3D%20%5CSigma%5E%7Bt-2%7D_%7Bt_1%3D0%7D%5CSigma%5E%7Bt-t_1-2%7D_%7Bt_2%3D0%7D(1-P_%7BAB%7D)%5E%7Bt_1%7DP_%7BAB%7D(1-P_%7BBC%7D)%5E%7Bt_2%7DP_%7BBC%7D(1-P_%7BCD%7D)%5E%7Bt-t_1-t_2-2%7D%5C%5C%20%26%5Capprox%20%5Cint%5E%7Bt-2%7D_%7B0%7D%5Cint%5E%7Bt-t_1-2%7D_%7B0%7D(1-P_%7BAB%7D)%5E%7Bt_1%7DP_%7BAB%7D(1-P_%7BBC%7D)%5E%7Bt_2%7DP_%7BBC%7D(1-P_%7BCD%7D)%5E%7Bt-t_1-t_2-2%7D%20dt_2dt_1%5C%5C%20%5Cend%7Balign%7D

%5Cbegin%7Balign%7D%20P_D%20(t)%26%3D%20%5CSigma%5E%7Bt-3%7D_%7Bt_1%3D0%7D%5CSigma%5E%7Bt-t_1-3%7D_%7Bt_2%3D0%7D%5CSigma%5E%7Bt-t_1-t_2-3%7D_%7Bt_3%3D0%7D(1-P_%7BAB%7D)%5E%7Bt_1%7DP_%7BAB%7D(1-P_%7BBC%7D)%5E%7Bt_2%7DP_%7BBC%7D(1-P_%7BCD%7D)%5E%7Bt_3%7DP_%7BCD%7D%5C%5C%20%26%5Capprox%20%5Cint%5E%7Bt-3%7D_%7B0%7D%5Cint%5E%7Bt-t_1-3%7D_%7B0%7D%5Cint%5E%7Bt-t_1-t_2-3%7D_%7B0%7D(1-P_%7BAB%7D)%5E%7Bt_1%7DP_%7BAB%7D(1-P_%7BBC%7D)%5E%7Bt_2%7DP_%7BBC%7D(1-P_%7BCD%7D)%5E%7Bt_3%7DP_%7BCD%7Ddt_3%20dt_2dt_1%5C%5C%20%5Cend%7Balign%7D

通过matlab编程,计算并绘制出下列图像

可以看到,这些曲线与cubicmetre拟合的曲线非常的近似,这些曲线是理论结果。

理论氧化曲线的验证

那么怎么确定我们算出的理论结果是正确的呢?最简单的方法就是通过实验来模拟结果。由于模拟是比较耗费时间,这里仅采样部分随机刻做模拟。

下图中的星点是模拟的实验结果,实线为理论结果,可以看到理论结果与模拟结果吻合,基本验证理论的正确性。

在132000随机刻附近,铜块的占比相对均匀,也就是在37分钟左右进行回收具有较好的综合效益。

最优时间的确定

为了尽可能用少的时间获得目标铜块,有必要确定一个最优时间。假设同时晒100个未锈蚀的铜块,我们可以得到t随机刻后各个铜块的产量,将产量除以对应时间可以得到平均效率vB、vC和vD。

%5Cbegin%7Bbmatrix%7D%20v_%7BB%7D%20%5C%5C%20v_%7BC%7D%20%5C%5C%20v_%7BD%7D%20%5Cend%7Bbmatrix%7D%20%3D%5Cfrac%7B100%7D%7Bt%7D%20%5Cbegin%7Bbmatrix%7D%20P_%7BB%7D(t)%20%5C%5C%20P_%7BC%7D%20(t)%5C%5C%20P_%7BD%7D%20(t)%20%5Cend%7Bbmatrix%7D

图像如上所示,可以看到,斑驳的铜块的平均效率几乎为单调递减变化,挂机时间越长,效率越低,没有最优时间。

锈蚀的铜块和完全氧化的铜块的最优时间分别在75000随机刻和270000随机刻,也就是说将铜块分别晾晒20.8和75分钟时,可以得到最大效率的锈蚀的铜块和完全氧化的铜块。

如果考虑锈蚀的铜块加氧化的铜块的综合效率,其最优时间在150000随机刻,也就是41.67分钟,由于该曲线比较平缓,可以选择40分钟作为最优时间。

第二章 活塞推动-高效型铜块氧化农场设计

想要设计铜块氧化机器,可以分为三步走,第一步,设计出铜块的氧化部分;第二步,设计出电控系统;第三步,设计出仓储、收集和运输系统。

铜块氧化系统设计

设计过程的第一步,首先需要了解设计过程中的原理。根据之前的结论,为了由较好的综合效益,每个铜块需要晾晒40分钟左右,因此我们需要根据这个时间进行设计。

循环系统的设计

任何设计都是由简到繁再化繁为简,对于自动化晒铜,铜块必定会有输入和输出,输入为未氧化的铜块、输出为晾晒40分钟的铜块。如果活塞的力大无穷,可以推动无限多个方块,那么最简单的方法便是将晒铜的通道设计成一条直线,输入端每两个铜块之间放置四个介质方块隔开(这里图中选择的是平滑石头作为介质方块)。

这时活塞推动方块的周期T与这条直线上的方块数n需要满足下列关系,以保证每个铜块在这条线上待的时间在40分钟左右。

nT%5Capprox40min%3D2400s

然而活塞最多只能推动12个方块,因此我们需要最多每隔11个方块添加一个活塞,于是这条直线就变成了蛇形曲线,如图所示。

那么各位觉得这样操作对上述关系的影响大吗?影响并不大,中间活塞的数量仅仅影响启动和停止的时间,当这条线工作稳定后,T和n的关系满足这个关系。

我们简单分析一下每个活塞的推动时间tp。当左侧活塞刚刚推动时,记该游戏刻为第0gt,此刻石墙的状态改变,侦测器接收到来自石墙发出的PP更新,侦测器添加一个2gt的计划刻,在第2gt的NTE事件,侦测器输出信号,在此刻的BE事件,右侧的活塞发现前方为B36方块,无法推动,接着在这一刻的TE事件将这个B36变回原本方块并发出NC更新,右侧活塞接收到该方块发出的NC更新,于是在第3gt的BE事件右侧活塞推出,整个过程共记3gt,即tp=3gt =0.15s。

这时,我们会发现这条线的空间利用率较低,并且输入与输出之间的距离较大,不利于我们收集,因此我们可以适当调整方块之间的间距,并让线路从中间对折,这时的输入与输出相距较近,方便我们进行设计。调整后,每个活塞平均每次推动的方块数量约为

n_e%3D%5Cfrac%7B15%7D%7B2%7D%3D7.5%E4%B8%AA

如果直接这样来应用的话,我们会发现,输入部分每个两个铜块之间需要放置四个介质方块,输出部分也是需要回收介质方块,可以说是非常的麻烦。细心的小伙伴可能发现了,如果我们将输入与输出相连接,整个晒铜系统便形成了一个循环,而介质方块会自动进入下轮循环中,我们只需要输入并分离出铜块即可,这便直接跳过了介质方块的回收。至此,我们遇到第一个技术性机器——铜块替换装置,也就是输入新的铜块同时将晒好的铜块替换出来。

假设我们解决了介质回收的问题,但是这个循环的启动和停止无法完成,这便是我们遇到了第二个技术性机器——启停装置。我们先看一下下面这个简化的循环系统。

左侧的活塞不管怎么工作,系统中的方块都不会移动,但是如果我们在右上方放置一个方块并且触发右上方的活塞工作,那么这个循环就会一直工作。

那么这时活塞的推动周期就是整个循环的工作周期Tc,它等于遍历所有活塞所用的时间即

T_c%3Dn_pt_p

如果我们想让活塞在每个循环周期内多推动几次,那就在启动时增加填入循环系统的方块即可,填入系统的方块数量我们记为nq。

在设计这两个装置之前,我们还需要确定该循环系统的一些参数。计划这条循环系统输出铜块的速度vc=300个/h,由于每两个铜块之间需要四个介质方块,因此每个活塞的推动速度va=5vc=1500个/h=25个/min。

我们可以得到活塞每次推动的周期

T%3D%5Cfrac%7B1%7D%7Bv_a%7D%3D%5Cfrac%7B1%7D%7B25%7Dmin%3D2.4s

根据活塞推动方块的周期T与方块总数n的关系,可以得

n%3D%5Cfrac%7B40min%7D%7BT%7D%3D1000%E4%B8%AA

整个循环用到的活塞数量np为

n_p%3D%5Cfrac%7Bn%7D%7Bn_e%7D%3D%5Cfrac%7B1000%7D%7B7.5%7D%3D133.3%E4%B8%AA

取np=134。则整个循环的工作周期Tc为

T_c%3Dn_pt_p%3D134%5Ctimes0.15%3D20.1s

为了使每个活塞推动的平均速度满足要求,启动时插入循环系统中的方块数量nq为

n_q%3D%5Cfrac%7BT_c%7D%7BT%7D%3D%5Cfrac%7B20.1%7D%7B2.4%7D%3D8.375%E4%B8%AA

取8和9均可,这里取nq=9。

启停装置的设计

接着继续设计启停装置,根据之前的分析,启停装置需要满足下列两个条件

1、启停装置需要有缓存,能够存储nq个方块,即本设计为9个方块;

2、启停装置需要能够按照顺序存储和推出缓存中的方块。

根据上述两个条件,设计出了下列的启停装置,其工作如下所示:

当启动时,启停装置按照顺序依次推出存储在缓存中的方块,当接收到停止信号时,左侧的一列活塞会将方块同时推入缓存中,空余出的位置用于卸载剩余活塞的推力,从而使整个循环系统停止工作。在整个工作过程中,方块之间的相对顺序均为改变,保证整个晒铜系统效率的稳定性。

此外,在启停装置接收到停止信号时,避免左侧一列的活塞和下面的活塞的推出发生干涉,这里会等待下方的活塞推出方块后,左侧的活塞才会推出,从而避免整个循环系统出现错误。

在启动过程中,启停装置每接收到1个启动信号,推缓存的活塞仅仅会工作一次,因此启动时需要配备一个启动信号发生器。这个信号发生器按下开关后,会按照一定周期输出9个脉冲信号,供启停装置启动。

铜块替换装置的设计

接着需要设计铜块替换装置。如图所示是铜块替换装置,图片中能够看到的就是装置用到的所有元件。该机器的设计受到了@星野琳子w​的点拨,石头在音符盒的下方会改变音符盒类型改变为底鼓,而铜块、B36方块和空气一样,在音符盒的下方时是音符盒原本的类型竖琴,利用这种差异来判断铜块的位置。

虽然这个铜块替换装置较为简单,但是其底层原理相对复杂,需要用到微时序来分析,感兴趣的可以独自分析一下它的工作原理,如果能够分析明白,说明你对红石底层原理的认识已经比较深入了。该装置的工作情况分为下列四种:

  • 0->1:

    如下图所示为这一情况的工作过程。细心的朋友可能发现了红石粉整整亮了4个gt,但是红石比较器为什么会没有输出呢?我们从微观方面分析就能明白其原因。

  1. 第0gt

    BE事件

    从左侧的活塞开始推动的游戏刻记为第0gt,此刻,右侧和左侧的音符盒下方的方块依次分别变成B36方块,右侧和左侧的音符盒的种类先后变成竖琴,并分别发出PP更新。侦测器3首先检测到PP更新,并给自己一个2gt的计划刻,记为T3,接着侦测器1检测到下方音符盒发出的PP更新,并给自己添加一个2gt的计划刻,记为T1,第0gt结束。

  2. 第1gt,没有标志事件

  3. 第2gt

    NTE事件

    侦测器1和3有相同的优先级,优先级相同,看添加计划刻的顺序,侦测器3先添加的计划刻,侦测器3首先执行NTE3事件,侦测器3亮起,并且给自己添加一个2gt的计划刻T3,红石粉被激活,红石粉发出NC更新,比较器接收到NC更新,给自己添加一个2gt的计划刻记Tc。

    接着侦测器1执行NTE1给自己添加一个2gt的计划刻T1,侦测器2检测到侦测器1发出的PP更新,给自己添加一个2gt的计划刻T2。

    TE事件

    活塞将方块推到位,右侧和左侧的音符盒的种类先后变成底鼓,并分别发出PP更新,侦测器3和1接收到PP更新后,想要给自己添加计划刻,但是,在一个gt内,方块最多添加一个计划刻,侦测器3和1已经添加了计划刻T3和T1,于是这些计划刻请求被忽略。

  4. 第3gt,没有标志性事件

  5. 第4gt

    NTE事件

    侦测器1、3和没有指向二极管元件(比较器和中继器)的比较器具有相同的优先级,应按照添加计划刻的顺序依次进行。

    侦测器3先执行NTE3事件,侦测器3停止输出,红石粉熄灭,发出NC更新。比较器和中继器如果在这一刻需要执行NTE事件,那么在执行完它的NTE事件之前,是不会添加计划刻的。因此比较器接收到红石粉的NC更新,并不会添加计划刻。

    比较器执行NTEc事件,比较器计算出输入为0,因此输出信号为0。

    侦测器1执行NTE1事件,侦测器1停止输出。侦测器2检测到侦测器1发出PP更新,给自己添加2gt的计划刻T2。

    侦测器2执行NTE2事件,侦测器2亮起,侦测器2要给自己添加的计划刻T2被忽略。红石粉亮起,并发出NC更新,比较器接收到红石粉发出的NC更新,并给自己2gt的计划刻Tc。

  6. 第5gt,没有标志性事件

  7. 第6gt

    NTE事件

    侦测器2先执行NTE2,侦测器2停止输出,红石粉熄灭,发出NC更新,比较器忽略更新。

    比较器执行NTEc,比较器计算输入为0,输出信号为0。

工作过程如下图所示,其中第一行表示时间,第二行表示事件,剩余的表示对应事件产生的计划刻。

  • 以上就是图中0->1过程的所有标志性事件,其结果是红石粉表面上亮了4gt,但是实际上在第4gt产生了一个0gt的反脉冲,导致红石比较器输出为0,活塞没有推出。

  • 1->2和2->3过程原理与0->1相同,细节方面有所差别,这里不再赘述。

    1->2:

        2->3:

3->4:活塞推出的推演

  • 第0gt

    1. BE事件

      从左侧的活塞开始推动的游戏刻记为第0gt,此刻,左侧音符盒的种类由底鼓变成竖琴,并发出PP更新。侦测器1检测到PP更新,并给自己一个2gt的计划刻,记为T1,第0gt结束。

    2. 第1gt,没有标志性事件

    3. 第2gt

      NTE事件

      侦测器1执行NTE1,侦测器1亮起并给自己添加一个2gt的计划刻T1,侦测器2接收到侦测器1发出的PP更新,侦测器2给自己添加一个2gt的计划刻T2。

      TE事件

      右侧和左侧音符盒的种类依次由竖琴变成底鼓,侦测器3先接收到右侧音符盒发出的PP更新,给自己添加一个2gt的计划刻T3。侦测器1会忽略左侧音符盒发出的PP更新。

    4. 第3gt,没有标志性事件

    5. 第4gt

      NTE事件

      侦测器1执行NTE1,侦测器1熄灭,侦测器2接收到侦测器1发出的PP更新,侦测器2给自己添加一个2gt的计划刻T2。

      侦测器2执行NTE2,侦测器2亮起,侦测器2被拒绝给自己再添加一个2gt的计划刻T2,红石粉被激活,并发出NC更新,比较器接收到NC更新并给自己添加一个2gt的计划刻Tc。

      侦测器3执行NTE3,侦测器3亮起,并给自己添加一个2gt的计划刻T3。

    6. 第5gt,没有标志性事件

    7. 第6gt

      NTE事件

      侦测器2执行NTE2,侦测器2熄灭,红石粉仍然由侦测器3激活。

      比较器执行NTEc,比较器计算输入为15,比较器输出强度为15的红石信号。

      侦测器3执行NTE3,侦测器3熄灭,红石粉熄灭,比较器接收到红石粉发出的NC更新,给自己添加一个2gt的计划刻Tc。

      BE事件

      活塞被比较器激活并推出。

    8. 第7gt,没有标志性事件

    9. 第8gt

      NTE事件

      比较器执行NTEc,比较器计算输入为0,比较器熄灭。

      BE事件

      活塞接收到比较器的NC更新并开始缩回。

      TE事件

      铜块替换完成。

工作流程见下图:

另外,铜块替换装置可以将输入输出与循环系统隔离,当输入缺少铜块时,会跳过此处的铜块替换。当输出由于某种原因发生堵塞时,铜块也无法完成替换,因此输入输出不会影响循环系统。

设计总结

设计出的每个晒铜系统的实际推动方块数量为1020个,活塞的数量为138个,该晒铜系统的循环周期为Tc'= 138×0.15=20.7s,铜块在该系统中实际的晾晒时间为39.1min,折合为随机刻为140760randt。

根据不同状态概率计算公式可以得到各个状态的理论概率:

未锈蚀的铜块    斑驳的铜块    锈蚀的铜块    氧化的铜块

        23.1%           26.8%             26.1%          24.0%       

实际情况是铜块的输入和收集部分也会有部分铜块氧化,会与理论结果有一定的偏差,但是这种偏差不会太大。

电控系统设计

铜块晾晒农场设计的第二步——电控系统的设计。电控系统的设计目的是为了方便玩家操作,尽可能的减小玩家错误操作对机器工作的影响。晒铜机的主要电控结构图如图所示。

其中时序控制器是电控系统的核心,它的首要功能就是保证铜块晾晒系统的正常工作。晒铜系统在接收到启动信号后,并且在启停装置未将缓存中的方块完全推出前,晒铜系统不能接收到停止信号,同理正常工作的晒铜系统在接收到停止信号后,并且在活塞的推力未完全回收前,也不能接收到下一次的启动信号,否则会引起系统损坏。

时序控制器需要优先保证上述时序,在它给晒铜系统发出启动或停止信号后,需要至少冷却Tc'=20.7s,这里选择30s作为时序控制器的冷却时间,图中的AB和CD段就是启动和停止的冷却。在这两个时间段,也就是绿色区域,时序控制器会滤除玩家多余的开关操作,并且在结束冷却时间后才会读取开关状态并作出响应。

简单来说,时序控制器可以将晒铜系统的启停和玩家的开关操作隔离开来,避免机器因玩家的误操作而损坏。

晒铜系统有大量的活塞工作,如果由于某种原因而导致区块卸载,那么正常工作的铜块晾晒系统必定损坏。区块加载器能够避免由于玩家离开引起的区块卸载。很显然,在开机的那一刻,区块加载器就要开启,直到所有铜块晾晒系统停止工作后在关闭,它的时序图如图所示。区块加载器也并非万能的,如果服务器和单人存档发生了崩溃或者单人存档直接保存并退出,正常工作的铜块晾晒系统也会发生损坏。

铜块输入部分和TNT复制部分分别连接铜块晾晒系统的输入和输出,为了铜块能够及时输入和输出,这两个部分的时序与区块加载器保持一致,覆盖整个工作时间段。

除此之外还有一些人性化提示,在挂机点左侧的红石灯显示农场是否工作,挂机点背后有关闭提示音,它提示玩家机器正在关闭,请等待提示音停止后离开。此外,还有空潜影盒满缺提示和杂物提示,它们并不受时序控制器的控制。这些人性化提示不是重点,就不详细介绍了。

另外,控制开关的还有两个装置,分别是输入检测器和收集满检装置。输入检测器可以检测到一定时间内玩家是否放置铜块,如果没有,它会关闭铜块晾晒农场,这适用于长时间挂机的自动关机。收集满检装置检测箱子是否装满,如果装满,则会自动关闭并锁定农场开关,同时亮起对应的指示灯并发出警报提示。此时玩家无法再次开机,只有玩家清理箱子中的潜影盒后,才能农场继续开机工作。

仓储、收集和运输系统的设计

铜块晾晒农场设计的第三步是仓储、收集和运输系统的设计。其系统框图如下图所示,接下来我会逐一介绍。

绿色模块代表外部输入的掉落物物品,蓝色模块代表终端存储单元,橙色部分表示掉落物物品处理装置,蓝色箭头代表水道,表示不同模块之间的运输关系。

首先,散装或者盒装铜块通过输入通道输入,经水道流至如左图所示的潜影盒筛选器,潜影盒筛选器负责分离潜影盒和非潜影盒类物品,它是利用投掷器不能向潜影盒内投掷潜影盒的原理将潜影盒与普通物品分离。

分离出的潜影盒会存放在右图的存储仓库,存储仓库改自@_instow​设计的盒子仓库,如果觉得使用盒子仓库太浪费,可以自行改为其他简单的仓库即可。存储仓库可以至少存储大约1600盒铜块,如果仓库存满,多余的潜影盒会运输到杂物箱中。

潜影盒筛选器分离出的非潜影盒类物品会输送至下图的铜块筛选器,它是整个运输系统的核心。可能有玩家担心如果不小心将其他物品或者装有其他物品的潜影盒扔进了输入通道那么怎么办?铜块筛选器就是为了解决这一问题而设计的,从本质上讲,铜块筛选器就是一个漏斗分类机,它会筛选来自潜影盒筛选机、四倍速解包机和分类打包机等输送过来的物品,将非铜块的物品统统扔到杂物箱中。

当杂物箱中有物品时,农场会发出警报,玩家听到警报后,尽量清理完杂物箱中的杂物,再继续挂机,避免杂物过多,导致不必要的损失。

铜块筛选器筛选出的铜块会暂时存储在铜块分配器中,铜块分配器会按照一定的速度给玩家分配铜块,保证玩家铜块的充足供应。玩家多余的铜块会再次通过铜块筛选器暂存在铜块分配器中。

存储仓库中存储的盒装铜块会通过下图所示的四倍速解包机进行解包,解包后的物品会输送给铜块筛选器。解完包得到的空潜影盒会送至分类打包机进行重复利用。

晾晒40分钟的铜块会被TNT炸成掉落物,并输送到下图所示的分类打包机,它采用的是二倍速分类打包机,从左到右依次对氧化的铜块、锈蚀的铜块和斑驳的铜块进行分类打包,未锈蚀的铜块会输送到铜块筛选器。分类打包机会将打包好的盒子存储在收集箱中。

一般来说,分类打包机不需要补充空潜影盒,但如果缺少空潜影盒,农场会发出警报,提醒玩家补充空潜影盒。

使用说明

  1. 从铜块输入通道输入盒装或者少量散装未锈蚀的铜块;

  2. 打开铜块氧化农场的开关,坐进矿车,手持铜块一直右键即可。这里推荐将挂机者的背包仅仅保存一个槽位放置铜块,用其他的物品填满剩余的背包空间。

  3. 中途不想挂机,点击开关,待关机警报停止后,离开即可。

  4. 特殊情况,如果挂机过程中,出现警报,请第一时间处理:

    杂物警报:表明扔进去的盒子中含有非铜块的物品,清理完杂物,避免杂物溢出,引起不必要的损失。

    满箱警报:收集仓库满箱时,农场发出警报并自动关机。

    缺盒警报:如果打包机缺少空潜影盒,会发出警报,请及时补充潜影盒。

  5. 效率:斑驳的铜块——2915/h 锈蚀的铜块——2328/h 氧化的铜块——2492/h。

第三章 基于地毯模组的高效型铜块氧化农场设计

之前讲的活塞推动的高效型铜块氧化农场,有三个比较明显的缺点,首先使用活塞递推,抗卸载能力就比较差,其次农场工作时,推动的方块数量很多,卡顿也很明显,最后农场建设过程中需要预先使用一些铜块,这些铜块我们是无法利用的。

那么除了使用活塞推铜块进行晾晒,就只剩下玩家自己摆铜块了。如果玩家能够直接将铜块放置到晾晒位置,就能够解决上述的问题。

铜块氧化农场主要分为两大部分,分别是铜块的氧化系统和电控和输送系统。

铜块氧化系统设计

铜块放置系统设计

既能够让玩家脱手挂机,又能够让玩家直接将铜块放置到指定位置,首先能够想到的就是轨道系统。我也知道玩家的时间是十分珍贵地,挂机方铜的重任就交给假人去做,但是这个农场的挂机任务能且仅能交给假人去做,待会儿会解释原因。

如图所示,假人手持铜块且处于持续右键状态,当假人移动时,假人会在玻璃前仅放置一个铜块。有的观众可能会疑惑,为什么假人每次只放一个方块而不是两个或更多方块。当玩家持续右键放置方块后,会有一个较短冷却时间,冷却时间过后才会放置下一个方块,而假人在玻璃方块停留的时间小于这个冷却时间,因此假人经过时仅会放置一个铜块。

如果是玩家放铜,我们很难保证玩家在放铜过程中视角不发生改变,一旦视角在水平方向有点偏转,铜块就会放在错误的位置,如图所示,因此在假人挂机时务必将假人的视角调正,可以使用 /player 假人 look 方向 指令调整假人的视角。

铜块的回收系统设计

在设计铜块回收系统时,我的思路一直集中在如何让放置好的铜块聚集并回收,导致回收装置非常复杂,正在我一筹莫展时,突然有个想法突袭而来,为什么必须将铜块集中后再用TNT炸掉,不如直接从根源解决问题,让TNT轰炸每一个晒铜的位置,铜块的掉落物就要好收集许多。

但这对铜块的晾晒空间提出了两点非常苛刻的要求,其一是铜块成为掉落物后需要毫无遮挡的掉落到水道中收集,其二,晒铜的空间需要是一个防爆空间,避免TNT爆炸损坏附近的轨道系统以及其他设施。

对于第一个要求,可以将晒铜空间设计为两面平行的防爆墙,铜块均匀合理的在其中进行晾晒。在收集时,TNT需要从自下向上炸铜,即可避免上方的掉落物掉落到下方的铜块上造成损失。

接着需要满足第二个防爆要求,mc中最常见的防爆方块就是黑曜石和含水方块,黑曜石造价相当昂贵且施工也很不方便,于是就只剩下含水方块了,经过许多尝试,最终发现了1.19新加的含水树叶和黑曜石一样的具有良好抗爆性,且每个含水树叶仅占一个空间,完美符合要求。

到这里,我们还差最后一个重要的环节,如何将铜块放置到防爆空间。于是我在轨道系统的那一侧防爆墙设计的下面这种结构。

含水楼梯2和上方的流动的水替代原来的含水树叶,保证抗爆性,含水楼梯2能够使其上方流动的水向下流动,而不是继续向外流动,而假人刚好可以通过含水楼梯1的缝隙,也就是青色部分放置铜块。另外这种设计也有另一种好处,由于铜块炸掉后,掉落物可能会掉落到含水楼梯2的边缘,而上方的流动的水可以将掉落物冲掉,尽可能的减少掉落物的损失。

铜块的二维最密堆积

为了在二维平面上放置更多的铜块,铜块尽可能的采用最密堆积。

如图所示为铜块的二维最密堆积,相邻两个铜块之间的最小曼哈顿距离均为5。根据这个堆叠方式,设计出下列的轨道系统。

TNT复制系统设计

不难发现,TNT复制系统需要能够火力完全覆盖到整个矩形区域,为了达到这个目的,干脆直接安装一排TNT复制机。在正对复制TNT的下方均放置一个活板门,这样复制的TNT会先掉落到活板门上,通过控制复制TNT和活板门的开关之间的时间差来控制TNT的下降高度,从而实现TNT火力的完全覆盖。

其问题的关键转化为了改变时间差的装置,这个装置也是非常的简单的,它由主要由上方的投掷器链和下方的中继器延时链组成,初始状态,B侧的投掷器会有一个物品,A侧的活塞推动,发出信号,经过上方的中继器链会使投掷器链中的物品向左移一位。

比较器会侦测到投掷器中的物品,输出信号使得活塞推出。下面才是重点,当上方的中继器链最终激活充能铁轨,首先输出TNT复制信号,接着当信号传递到中继器延时链,侦测器首次侦测到中继器的变化,并通过活塞推出的方块输出到充能铁轨上,最终输出活板门开启信号。A侧发出每发出一个信号,活塞就会向A侧移动一位,TNT复制和活板门开启的时间差就会逐渐增加,从而实现TNT自下而上的爆炸。

接着我们只需在A侧添加合适的时钟和计数装置即可实现自动输出,效果如下图所示。

将上述装置直接连接到所有TNT复制机就可以了吗?答案是否定的,因为我们遇到了一个棘手的问题,相邻两个TNT连续爆炸会炸毁刚刚生成的铜块掉落物。因此我们需要将TNT复制机进行分组分时爆炸,将TNT复制机分成下列四组,相邻两个TNT的爆炸范围不会相交,保证掉落物不会被炸损。

最终的效果如图所示,这种方案的铜块回收率为99.5%。

电控和输送系统设计

如图所示是该铜块氧化农场的电控盒输送系统框图,其中红色代表红石电路信号、蓝色表示物品的流动、橙色表示整个农场的轨道工程。

顺序单选器

顺序单选器是改自单选器,当发车处有假人挂机且仓库中有铜块(假人和仓检Flag均有效),顺序单选器会优先选择位置靠前且空闲的铜块晾晒单元,并使放铜指示灯闪烁,如果所有的铜块晾晒单元均在晾晒铜块,则不会有响应。

顺序单选器选中后会输出控制信号,控制轨道开关和水道开关,使假人和铜块能够通向对应的铜块晾晒单元。接着向铜块分配器发出工作信号。

铜块分配器

此时铜块分配器会首先补充假人身上的铜块,待假人身上的铜块补充完成后,发出发车信号,假人出发,接着铜块分配器向铜块晾晒单元的铜块补给系统补充剩余的铜块。

铜块补给系统

假人在挂机时,手中的铜块是不会自动补充的,在假人将手中铜块放完之前,我们需要给假人补充合适数量的铜块。假人放置一层铜块需要平均消耗14.5个铜块,因此每四层至少需要给假人补给一次铜块。

当假人刚进入对应的轨道系统时,会启动铜块补给系统。铜块补给系统能够将铜块分配器补给的铜块分四次依次供给到第4、8、12、16层,当假人经过时会将铜块捡起。

超长计时器

假人放置完该单元的铜块后,会启动超长计时器,该计时器能够计时40分钟,计时结束时会触发TNT复制系统,并复位铜块补给系统。

假人在返回发车处时,会清除放铜指示灯,并对应的晒铜指示灯。

在TNT复制系统将轰炸完后,它会发出红石信号,清除对应的晒铜指示灯。

使用说明

  1. 召唤假人,坐上矿车,持续右键并将假人面向正东方向,代码如下player Alex use continuous,player Alex look east,打开开关即可开始挂机。

  2. “假人正在放铜”指示灯闪烁,表示假人正在此单片进行放铜任务,放完铜块后,会将对应的“正在晒铜”指示灯点亮,表明当前的晒铜状态。

  3. 挂机完后,点击打包机潜影盒回收按钮可以回收打包机中晾晒好的铜块。

  4. 每个单片会晾晒铜块40min。

  5. 效率:斑驳的铜块:601.8/h 锈蚀的铜块:523.2/h 氧化的铜块:533.4/h

存档地址:

https://wwnk.lanzouk.com/b01l5ia5g 密码:8kv0