SYS.READ_STREAM | UTF-8
PATH: SlimeTech/Molforte/01-预备篇:环境配置和基础知识.md
WORDS:4,005
EST_TIME:14 MIN

#1° 概述

本篇将一步步教你配置绿萌使用环境,并简单地讲解相关的基础知识。

以下是涉及到的模组汇总:Carpet mod、WorldEdit(创世神)、Tweakeroo、pistorder(或Tweakmore,本篇用pistorder演示。)、Replay mod(可选)。


#2° 环境配置

你大可以跳过本节,但是我依旧建议你阅读本节内容,使用较为先进的工具总归对你的学习和设计有好处的。

打开单人游戏,选择创造模式,创建一个虚空存档

创建新的世界→世界→世界类型:超平坦→自定义→预设→虚空

![[图01 一片虚空平台.png]]

如果你出生在一片石头平台上,证明你成功了。

它日后会变成这样子:

![[图02 被绿萌填满的虚空截图.png]]

当然,鉴于玩家对破基岩科技树的研究,我们可以将预设改为:minecraft:bedrock;minecraft:the_void

如果你想要多层,只要在方块名称后面加上x*x即可(其中0<x<=324,xN其中0<x<=324,且x\in N^{*})如:minecraft:bedrock*5;minecraft:the_void 便可以模拟五层破基岩环境。

![[图03 虚空大陆.png]]

当然,为保证生存实装的稳定性,最终都要创建一个正常的世界进行实地测试,一切不进行实地测试就发布的机器,都是对自己和他人不负责任的表现。

在自己的作品经历了一次次炸膛、解体、粘连后,我们找到了比备份更为简单的局部存档利器:结构方块。我们主要使用两个模式:保存模式加载模式

![[图05 结构方块加载模式界面.png]]

![[图04 结构方块保存模式界面.png]]

  • 结构名称不能使用中文命名。
  • 相对位置和结构大小都有三个框,该三个框从左到右分别对应x轴,y轴,z轴,可通过按下键盘上的“F3”,屏幕中间的指针来对照。
  • 保存模式仅能保存 对应加载模式中角度为0°的结构框
  • 包括实体:在保存模式中,为保存结构框内的实体;在加载模式中,为加载保存模式已保存过的实体。

我们可以对迭代中的结构多次留档,便于以后回退和debug,以下是示例:

![[图06 结构方块留档示例.png]]

在上面保存模式和加载模式的示意图中,保存模式负责留档:上图留档示意的图中,结构方块都是完全一致的保存模式的结构方块 文件名bedrock_breakers也可以看出来,是一系列的基岩机,以此作为留档区,工作区仅有一个加载模式的结构方块(图中未显示)。

以上仅是对我来说比较舒服的方式,读者可创新思路

下面会简述Carpet的配置,如需更多选择,请参考其他章节,或观看Carpet使用教程。

打开你的测试存档,在对话框中输入指令。本小节内容的一经设置,基本不会再更改。

/carpet tntDoNotUpdate true:放置TNT时,TNT不会被红石激活。这使得我们在制作TNT复制机时,省去推矿车,或者其他的”上弹“方式。

/carpet fillUpdates false:使用 fill、clone、setblock指令和结构方块时不会造成更新。尤其是解决加载结构后,造成的机器”乱动“的困扰。

/carpet creativeNoClip true:创造模式无碰撞,便于我们愉快地穿梭在各种机器结构中,同时解决被粘液块弹走的麻烦。

/carpet structureBlockLimit 48/96/192/256:其中,数值选项用“/”隔开。当你需要的结构范围大于结构方块默认的框选范围时,可以考虑此选项。需要注意的是,在实际使用过程中,过大的结构框会造成一定的渲染问题和卡顿,如非必要,默认选项为48即可

/carpet explosionNoBlockDamage true:当你设计和TNT有关的结构时,可以把该调试打开, 这使得TNT爆炸不会炸坏任何方块;当你需要测试TNT是否会破坏预期的范围时,可以设置为false。

  • /tick freeze:冻结游戏刻,通常结合下面的/tick step x指令,来观察设计的结构是否按照预期运作。类似于编程中打的调试断点。
  • /tick step x:冻结游戏刻后,该指令可以使游戏前进x游戏刻,其中x是要前进的游戏刻数。
  • /tick sprint x:类似于/tick warp通常用来长时间测试机器稳定性,或者加速飞行器的到位(便于调试)。
  • /tick unfreeze:解除冻结游戏刻,部分版本使用/tick freeze同时兼顾开关冻结游戏刻。吐槽一下,不知道为什么要把一条指令分开,每次打指令都麻烦得要死。
  • /log tnt:使用此指令可以订阅TNT有关的选项。
  • /log tnt full/log tnt brief:当TNT爆炸的时候,告诉你TNT的生成位置和爆点位置,在控制TNT的爆点时非常有用,我们将在实战篇讲到。
  • /log tnt clear:取消订阅TNT有关的选项。
  • /player <Name> spawn:利用假人的第一步,最基本的是测试机器时用来强加载区块。如使用/player yu_xian520 spawn召唤一个名为余弦的假人。哔哩哔哩关注叁日余音喵~
  • /player <name> use:可以让假人使用物品、放置方块或与方块互动,相当于鼠标右键。相同的指令还有/player <name> use once。将假人对准音符盒/栅栏门,可以实现远程开机/步进效果。如使用/player Twisuki use可让Twisuki点击一下音符盒/栅栏门。
  • player <name> use continous:可以让假人持续使用物品、放置方块或与方块互动。通常用来放基岩机的活塞。使用/player <name> use可以结束放置。

本节内容主要涉及//set,//undo,//redo,//stack,//move等指令的使用,提前掌握了的玩家可以跳到下一节。
本小节只讲绿萌设计中最常用的部分

  1. //set、//undo、//redo
    //set 是很基础的指令了对吧?使用小木斧,和投影mod一样,左右键框选一定的范围,输入//set 0

不出意外的话,你框选的这片区域已经被替换成了空气。那么,如何恢复这个平台呢?

  • 使用//undo便可以撤销这一步操作;
  • 使用//redo便可以复原刚刚撤销的操作。
  1. //move <Num>
    这个也是很基础的指令,在我们框选区域后,对着某一方向(或者用//set <Num> <direction>便可让移动该区域的方块,如使用//move 1 up来向上移动一格,不使用方向便默认玩家朝向为移动方向。使用//move <Num> -e可以保留实体。

可以使用这个指令来将制作的模块移动到合适的位置。

  1. //stack <Num>
    在框选区域后,你可以对区域向着某一方向批量复制,非常方便拓绿萌单元。
    这条指令用法与//move基本类似,只是由”移动多少格“的功能转变为”复制多少次“。便不再过多赘述。

受限于我的笔力,以上内容肯定有点抽象,你可以框选后输入相关的指令试一试,或者搜索相关的WE教程

  1. 禁用侦测器选项
    在游戏界面中,同时按下x+c,在禁用类选项中,可以找到禁用侦测器选项,我建议你在键盘的右侧设置一个快捷键,方便我们在debug时随时打开。

打开此选项后,侦测器就变成了“石头”,不再响应更新。当我们使用WE或者其他工具,对绿萌结构进行操作时,可避免侦测器激活造成的不可预知的结果。也可以防止我们手残对侦测器造成更新。

  1. Flyspeed飞行速度控制 飞行速度预设
    挖沟机,矿机等往往都有超过200格的高度,我们游走在机器各处是非常麻烦的,使用Flyspeed功能可以大幅提高玩家的飞行速度,在各个部分之间快速通勤。

这是设计绿萌的必备模组之一,前面的章节也讲过pistorder和活塞到位的相关规律,这里只对绿萌相关的做相关简述。

空手右击普通活塞,活塞上会显示 能否推动(如图上的 推动√,不能推动则显示 推动×),而被推动的方块,则从小到大显示方块到位的先后顺序。有助于我们压缩机器和快速debug。

  • 对于普通活塞:空手右击一次为直接推动(活塞臂直接接触),右击两次为隔一个方块推动(如下图)。
  • 对于黏性活塞:空手右击一次为直接推动,右击两次为隔一个方块拉回。
    ![[图07 pistorder模组示例.png]]

Replay mod对于主播或者录过mc视频的玩家而言并不罕见 骂谁罕见!,它能够记录所加载区块,在录制所在的时间段内发生的事。

正是因为Replay mod的情景复现功能,我们可以通过回放后拉取进度条的方式debug。通常在问题复现时间太长,或使用/tick freeze debug比较困难的情况下使用这个小妙招。

#3° 基础知识

前面的章节我们已经了解了游戏刻的基本内容,本节更倾向于介绍游戏刻在绿萌中的应用。

为了照顾未学习过时序章节的读者,这里简述下比较重要的基本内容:

  • Minecraft时间的基本单位是游戏刻(简称gt)。
  • 不同红石原件有不同的游戏刻延迟,比如侦测器延时2gt,中继器每档分别延迟2gt(故中继器延时2~8gt)。

本章所有内容都将抛弃红石刻(RedTick,简称rt,1rt = 2gt) 的使用, 因为我们后面将涉及到一定的奇数刻的时序关系,使用游戏刻方便计算。

对于绿萌来说,游戏刻可以用来指示各个布线的先后运动关系。对于大部分情况来讲,我们仅仅知道它们运动的先后顺序即可。如下,是我复现的我的第一台绿萌机器,一台以活塞链条作为延迟的盾构机。

图 活塞延迟式盾构机

读者可以顺带记住的是,上方黏性活塞一小节延迟为6gt,下方普通活塞延迟为4gt

了解过绿萌的玩家都知道,信号的传导从上方的黏性活塞链开始,至下方的普通活塞链结束;此结构被用来作为盾构机等TNT延迟; 熟悉了上方的信号延迟后,我们可以计算出上图的总延迟为多个黏性活塞和普通活塞相加,即多个6gt和多个4gt相加。

当然,经过简单的计算我们也知道,以上的活塞延迟排列组合,我们能创造出4gt及以上,所有偶数gt的延迟。那么,我们如何创造出2gt的延迟呢? 这似乎有些麻烦,我们通常只能把6gt的延时改为4gt的延时来提早2gt,反之亦然。

既然已经有了偶数gt的延迟,那么,如何创造出奇数gt的延迟? 这看似困难的事,实际上简单得多!我们回到上图4gt延时的活塞结构中,我们可以将其改造为基于红石块的传动结构,红石块的关系,活塞会到位后的下一gt就触发,这样,我们就创造了3gt的信号延迟。

图 两种活塞延迟的示意图(拼图,用两张图将其二合一)

分析一下具体的情况:对于上图侦测器的结构,gt0活塞和侦测器到位后,gt1侦测器激活,gt2活塞伸出,gt3活塞伸出中,gt4被推动的方块到位;对于下图红石块的结构,gt0活塞到位后,gt1活塞伸出,gt2活塞伸出中,gt3被推动的方块到位

结合以上4gt和6gt的延迟单元,我们可以创造出3gt和7gt及以上的延迟单元。

下面我们讨论一种奇妙的7gt延迟技巧:我们回到上图中6gt延时的结构,我们如图在斜上方放一个可充能方块,并再加一个侦测器对其qc,我们就创造出了一个简单巧妙的7gt延时,这个在kades的三向破基岩中亦有应用:

图 7gt延时结构,附kades的基岩机应用部分

我们仍然可以分析一下具体的情况:先欠着。

当然,根据上段原理,我们可以创造出11gt周期的飞行器,或是11gt的二步进结构,应用在无沟地吞上简直是点睛之笔。

图 11gt周期的飞行器和二步进结构

当然,在很多情况下,我们不需要如此精确地计算延迟,很多绿萌结构需要下一次启动前复位即可,正是因为很多结构所谓的“钝感”,便有了较为巧妙的布线风格:借力

自我入坑绿萌之初,就听说过类似于这样一句话:

厉害的布线往往应用着大量的借力。

正如上一节所言,借力就是把对时间不敏感的结构A,通过其他结构B甚至毫不相关的结构C复位甚至直接替代结构A的布线手段。很拗口是吧?让我们直接看图:

图 借力示意图,最好GIF

由图可知,上面的无延迟连杆的活塞,在触发后,他的黏性活塞由下面一个 可能作为其他用处的无延迟连杆复位,这就是借力, 这里可以作为一个比较浅显的例子。

再结合上面的游戏刻部分,我们可以以机器运行的某一刻作为时间原点(类似于电路分析中设定的电位的零参考点。电子相关的学生并不陌生),每一个模块甚至每一个活塞都能得到一个gt数标记,这样我们能准确分析每一个部分的运动先后顺序。

图 我的14m高前弹无沟地吞

如图是我的14m前弹无沟地吞出发站部分,我们以TNT缓存输出的信号部分作为0gt点,可以测出弹射飞行器的时间间隔为7gt。(当然,标记点不同,测出的时间也不同)。

除了对机器的大小或者时间有极端要求的情况以外,大部分时候并不需要如此理性地计算时序,本小节只是提供了一个理性的分析思路,以满足极端情况下的需求。

图 无沟地吞的借力单元,GIF

本小节可直接参考前面章节的b36到位时间分析,本小节主要讲我们如何利用b36的到位时间来压缩机器。直观起见,这里依然用pistorder来辅助讲解。

(咕咕咕)