SYS.READ_STREAM | UTF-8
PATH: TreeFarm/01-前置知识与树场的基本结构.md
WORDS:1,814
EST_TIME:7 MIN

#01 前置知识与树场的基本结构

这里是开始树场研究的一些基本内容的简述。出于简化考虑,这部分会包含一些“错误”的内容,关于更详细的说明,请参考GTMC的更新理论时序理论部分。

mc中更新分为NC更新PP更新

NC更新在树场中的主要来源是TT(Tile Tick)原件(一般而言:红石中继器、比较器、侦测器),红石粉动力或激活铁轨以下部分将用“铁轨”指代它们,因为树场中几乎不涉及另外两种铁轨活塞与其推拉的方块、音符盒

一般可以认为以上原件的某些状态(如是否充能、激活,方块的状态)发生变化时,向:

  • 红石粉(能量等级变化),二阶毗邻
  • 中继器、比较器、侦测器,先它们输出端指向的方块,再输出端指向的方块的毗邻,除去自身
  • 平放的铁轨,先自身的毗邻,再下方方块的毗邻;斜放的铁轨,先自身的毗邻,再下方方块的毗邻,最后上方方块的毗邻。
  • 活塞,本身与其受推拉方块原位置的毗邻
  • 音符盒,毗邻

发出NC更新,并可由BUD响应

由于树场的主体结构一般由活塞构成,一般可以认为树场中所有NC更新都同时带有PP更新。侦测器检测的是PP更新

在树场中,纯PP更新(不带有NC更新)一般由:

  • 活版门/栅栏门开关
  • 发射器/投掷器/漏斗激活状态改变
  • 玻璃板/栅栏/铁栅栏/石墙的连接状态改变

提供

在无粉布线阶段,我们会涉及三种很重要的信号传递方式:树电(通过树叶,传递NC和PP更新)、脚电(通过脚手架,传递NC和PP更新)、墙电(通过墙,纵向传递PP更新)。利用好它们的特性,我们能极大地简化树场中的布线。更细节的内容,我们会在无粉布线专题讲述。

mc中时序分为刻间时序刻内时序

mc中,每秒会被分为20gt(这里不阐述其概念),部分原件会带有固定的宏观的延迟,如TT原件:中继器(2-8gt)、比较器和侦测器(2gt)
可以认为除了TT原件以外,其他树场涉及的原件都不带有宏观延迟

每gt会被分成多个阶段,分别执行不同的运算。与树场相关性较强的阶段(按运算顺序)有:

  • Tile Tick(TT),TT原件的运算在这里执行
  • Block Event(BE),活塞与音符盒的运算在这里执行
  • Entity Update(EU),实体(如载具或者生物)的相关计算在这里执行
  • Tile Entity(TE),漏斗与被活塞推拉的方块相关的运算在这里执行
  • Async Task(AT/NU),玩家的相关计算在这里执行

除了以上提到的原件以外,瞬时原件相关运算会在接受更新后立刻执行(无论更新处在以上哪个阶段)。常见的瞬时原件有红石粉和铁轨栅栏门或活版门音符盒投掷器和发射器

TT原件的执行顺序由宏观时序TT优先级子顺序决定,可以认为,TT原件的执行顺序为:
任意中继器>=指向比较器的比较器>一般比较器或侦测器

BE原件(活塞与音符盒)在BE中会按受到更新,确认需要变更状态的顺序执行运算。这个顺序有时被称为深度。音符盒不会增加深度(即延后其更新的对象在BE内的运算顺序)

分析时序时,优先分析宏观时序,其次分析运算所处的阶段,最后分析运算在其阶段内执行的顺序

树场中,可以认为每一个活塞动作(推/拉/0t)的时间都是3gt1gt和2gt的充能导致的活塞动作分别为4gt和5gt

在mc1.15及以上,树场的基本结构有:

  • 催熟
  • 树干处理(有时分为主干处理根部处理
  • 树叶处理
  • 树苗回收
  • 方块流转掉落物

大部分树场还有检测模块,用于检测树苗生长并触发树场,但这不是树场必须的,我们会在下一章接触它

在mc1.15以下,由于从林木和金合欢特殊的生长检测方式,有时候会为树场增加增高模块;由于云杉生长检测要求5x5内不能有原木,需要增加收回墙。本文主要讨论1.15及以上的树场,我们会暂时忽略这些结构

一般而言为发射器对树苗喷骨粉

由于发射器能储存的骨粉很少,一般而言会通过漏斗或者投掷器向发射器输送骨粉,并用卸货器将骨粉由潜影盒转移到漏斗或投掷器链中。

催熟基本结构

主干处理的思路非常简单:将主干从原本的位置移走。基本的实现方式有三次递推伪二次递归;对于白桦和橡树,我们可以采用直接推拉的形式

三次递归:

TPE

伪二次递归:

Pseudo_DPE

蜜绿墙二次递归:

HS_DPE

收回式伪二次递归(通过让二级活塞只执行收回动作(0t)压缩一个活塞动作时序的伪二次递归架构):

0tPseudoDPE

现在使用最多的形式是蜜绿墙二次递归

树根处理一般而言,有与主干一同处理、上推下吸侧吸四种方式

上推:

UP1

UP2

下吸:

Down

侧吸:

Side1

Side2

对于深色橡木,有时会采用上吸的处理方式

DOTF

同样非常简单:用活塞/蜜绿墙将足够数量的树叶推掉,从而获得足够的树苗

蜜绿墙:

HS_Layout

活塞:

Piston_Layout

每个树叶会以固定概率掉落树苗:丛林1/40,其他树种1/20

通过漏斗水流等方式将树叶处理模块中掉落的树苗集中到玩家附近

漏斗:

Hopper

@Scorpio天蝎君 4gt白桦

水流:

Water

@Feng_Bl, Sunflower_Lin 6gt白桦

在处理周期较短,且内部空间较狭窄的树场内,有时会使用漏斗矿车回收树苗

Minecart

@Qonctrol,PUTF sharp

一般而言有凋零TNT两种方式

凋零:

Wither

@Scorpio天蝎君,PUTF flat wither

TNT:

TNT

@Feng_Bl