01 预备篇:环境配置和基础知识
1 概述
本篇将一步步教你配置绿萌使用环境,并简单地讲解相关的基础知识。
以下是涉及到的模组汇总:Carpet mod、WorldEdit(创世神)、Tweakeroo、pistorder(或 Tweakmore,本篇用 pistorder 演示。)、Replay mod(可选)。
2 环境配置
你大可以跳过本节,但是我依旧建议你阅读本节内容,使用较为先进的工具总归对你的学习和设计有好处的。
2.1 世界环境
打开单人游戏,选择创造模式,创建一个虚空存档。
创建新的世界→世界→世界类型:超平坦→自定义→预设→虚空
![[图 01 一片虚空平台.png]]
如果你出生在一片石头平台上,证明你成功了。
它日后会变成这样子:
![[图 02 被绿萌填满的虚空截图.png]]
当然,鉴于玩家对破基岩科技树的研究,我们可以将预设改为:minecraft:bedrock;minecraft:the_void
如果你想要多层,只要在方块名称后面加上即可(其中,且)如:minecraft:bedrock*5;minecraft:the_void 便可以模拟五层破基岩环境。
![[图 03 虚空大陆.png]]
当然,为保证生存实装的稳定性,最终都要创建一个正常的世界进行实地测试,一切不进行实地测试就发布的机器,都是对自己和他人不负责任的表现。
2.2 结构方块
在自己的作品经历了一次次炸膛、解体、粘连后,我们找到了比备份更为简单的局部存档利器:结构方块。我们主要使用两个模式:保存模式和加载模式。
2.2.1 保存模式
![[图 05 结构方块加载模式界面.png]]
2.2.2 加载模式
![[图 04 结构方块保存模式界面.png]]
2.2.3 必要说明
- 结构名称不能使用中文命名。
- 相对位置和结构大小都有三个框,该三个框从左到右分别对应 x 轴,y 轴,z 轴,可通过按下键盘上的 “F3”,屏幕中间的指针来对照。
- 保存模式仅能保存 对应加载模式中角度为 0° 的结构框。
- 包括实体:在保存模式中,为保存结构框内的实体;在加载模式中,为加载保存模式已保存过的实体。
2.2.4 小技巧
我们可以对迭代中的结构多次留档,便于以后回退和 debug,以下是示例:
![[图 06 结构方块留档示例.png]]
在上面保存模式和加载模式的示意图中,保存模式负责留档:上图留档示意的图中,结构方块都是完全一致的保存模式的结构方块 文件名 bedrock_breakers 也可以看出来,是一系列的基岩机,以此作为留档区,工作区仅有一个加载模式的结构方块(图中未显示)。
以上仅是对我来说比较舒服的方式,读者可创新思路。
2.3 Carpet 指令
下面会简述 Carpet 的配置,如需更多选择,请参考其他章节,或观看 Carpet 使用教程。
2.3.1 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。
2.3.2 游戏刻指令
/tick freeze:冻结游戏刻,通常结合下面的/tick step x指令,来观察设计的结构是否按照预期运作。类似于编程中打的调试断点。/tick step x:冻结游戏刻后,该指令可以使游戏前进 x 游戏刻,其中 x 是要前进的游戏刻数。
2.3.3 TNT 监测指令
/log tnt:使用此指令可以订阅 TNT 有关的选项。/log tnt full和/log tnt brief:当 TNT 爆炸的时候,告诉你 TNT 的生成位置和爆点位置,在控制 TNT 的爆点时非常有用,我们将在实战篇讲到。/log tnt clear:取消订阅 TNT 有关的选项。
2.3.4 假人指令
/player <Name> spawn:利用假人的第一步,最基本的是测试机器时用来强加载区块。如使用/player yu_xian520 spawn召唤一个名为余弦的假人。哔哩哔哩关注叁日余音喵~
2.4 WorldEdit 指令
本节内容主要涉及//set,//undo,//redo,//stack,//move等指令的使用,提前掌握了的玩家可以跳到下一节。
本小节只讲绿萌设计中最常用的部分。
- //set、//undo、//redo
//set 是很基础的指令了对吧?使用小木斧,和投影 mod 一样,左右键框选一定的范围,输入//set 0
不出意外的话,你框选的这片区域已经被替换成了空气。那么,如何恢复这个平台呢?
- 使用
//undo便可以撤销这一步操作; - 使用
//redo便可以复原刚刚撤销的操作。
//move <Num>
这个也是很基础的指令,在我们框选区域后,对着某一方向(或者用//set <Num> <direction>便可让移动该区域的方块,如使用//move 1 up 来向上移动一格,不使用方向便默认玩家朝向为移动方向。使用//move <Num> -e可以保留实体。
可以使用这个指令来将制作的模块移动到合适的位置。
//stack <Num>
在框选区域后,你可以对区域向着某一方向批量复制,非常方便拓绿萌单元。
这条指令用法与//move基本类似,只是由” 移动多少格 “的功能转变为” 复制多少次 “。便不再过多赘述。
受限于我的笔力,以上内容肯定有点抽象,你可以框选后输入相关的指令试一试,或者搜索相关的 WE 教程。
2.5 Tweakeroo 配置
- 禁用侦测器选项:
在游戏界面中,同时按下x+c,在禁用类选项中,可以找到禁用侦测器选项,我建议你在键盘的右侧设置一个快捷键,方便我们在 debug 时随时打开。
打开此选项后,侦测器就变成了 “石头”,不再响应更新。当我们使用 WE 或者其他工具,对绿萌结构进行操作时,可避免侦测器激活造成的不可预知的结果。也可以防止我们手残对侦测器造成更新。
- Flyspeed 飞行速度控制 飞行速度预设:
挖沟机,矿机等往往都有超过 200 格的高度,我们游走在机器各处是非常麻烦的,使用 Flyspeed 功能可以大幅提高玩家的飞行速度,在各个部分之间快速通勤。
2.6 Pistorder 使用方法
这是设计绿萌的必备模组之一,前面的章节也讲过 pistorder 和活塞到位的相关规律,这里只对绿萌相关的做相关简述。
空手右击普通活塞,活塞上会显示 能否推动(如图上的 推动√,不能推动则显示 推动 ×),而被推动的方块,则从小到大显示方块到位的先后顺序。有助于我们压缩机器和快速 debug。
- 对于普通活塞:空手右击一次为直接推动(活塞臂直接接触),右击两次为隔一个方块推动(如下图)。
- 对于黏性活塞:空手右击一次为直接推动,右击两次为隔一个方块拉回。
![[图 07 pistorder 模组示例.png]]
2.7 Replay mod 的 debug 小技巧
Replay mod 对于主播或者录过 mc 视频的玩家而言并不罕见 骂谁罕见!,它能够记录所加载区块,在录制所在的时间段内发生的事。
正是因为 Replay mod 的情景复现功能,我们可以通过回放后拉取进度条的方式 debug。通常在问题复现时间太长,或使用/tick freeze debug 比较困难的情况下使用这个小妙招。
3 基础知识
3.1 时序科普
3.1.1 游戏刻
前面的章节我们已经了解了游戏刻的基本内容,本节更倾向于介绍游戏刻在绿萌中的应用。
为了照顾未学习过时序章节的读者,这里简述下比较重要的基本内容:
- 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 周期的飞行器和二步进结构
当然,在很多情况下,我们不需要如此精确地计算延迟,很多绿萌结构需要下一次启动前复位即可,正是因为很多结构所谓的 “钝感”,便有了较为巧妙的布线风格:借力。
3.1.2 借力
自我入坑绿萌之初,就听说过类似于这样一句话:
厉害的布线往往应用着大量的借力。
正如上一节所言,借力就是把对时间不敏感的结构 A,通过其他结构 B 甚至毫不相关的结构 C 复位甚至直接替代结构 A 的布线手段。很拗口是吧?让我们直接看图:
图 借力示意图,最好 GIF
由图可知,上面的无延迟连杆的活塞,在触发后,他的黏性活塞由下面一个 可能作为其他用处的无延迟连杆复位,这就是借力, 这里可以作为一个比较浅显的例子。
再结合上面的游戏刻部分,我们可以以机器运行的某一刻作为时间原点(类似于电路分析中设定的电位的零参考点。电子相关的学生并不陌生),每一个模块甚至每一个活塞都能得到一个 gt 数标记,这样我们能准确分析每一个部分的运动先后顺序。
图 我的 14m 高前弹无沟地吞
如图是我的 14m 前弹无沟地吞出发站部分,我们以 TNT 缓存输出的信号部分作为 0gt 点,可以测出弹射飞行器的时间间隔为 7gt。(当然,标记点不同,测出的时间也不同)。
除了对机器的大小或者时间有极端要求的情况以外,大部分时候并不需要如此理性地计算时序,本小节只是提供了一个理性的分析思路,以满足极端情况下的需求。
图 无沟地吞的借力单元,GIF
3.1.3 * b36 到位时间分析
本小节可直接参考前面章节的 b36 到位时间分析,本小节主要讲我们如何利用 b36 的到位时间来压缩机器。直观起见,这里依然用 pistorder 来辅助讲解。
(咕咕咕)



