第八十七章 拼图方块
(此章节原本为『战利品(/loot 上)』,2022年7月24日重写为『拼图方块』)
(作者重写时使用的是Minecraft Java1.14.4、1.16.2、1.19和基岩版1.19.10)
我们在第七十九章至八十章,了解了一个特殊的方块:结构方块。结构方块可以用来生成整个结构,但在Minecraft中,有许多诸如村庄、要塞之类的结构虽然整体上也是结构,但其实是由多个小模板随机组合而生成的。比如村庄,一个村庄就是由水井+一堆道路+一堆房子+一堆村民+一堆其他的东西组合而成。
既然结构方块能够生成结构,那么我们是否可以生成用来组成结构的模板(小型结构)呢?
答案是肯定的,你可以通过结构方块来生成模板,但往往这些模板生成出来后并不具有随机性,也就是说就算你会生成也没用。那我们该怎么办?能不能通过一些途径来使得这些模板像游戏自然生成一样生成?
俗话说的好:条条大路通罗马,Mojang给了我们另外一条路——拼图方块。
拼图方块(Jigsaw Block)
数字ID:-211[BE]
命名空间ID:jigsaw
亮度:0
爆炸抗性:3600000
具有标签:
#dragon_immune(免疫末影龙破坏)
#wither_immune(免疫凋零破坏)
拼图方块虽然功能比结构方块要少很多,但要上手这东西难度可不是一般的大。首先,让我们来获得一个拼图方块:
/give @s jigsaw
然后你可以把它放下来。不难发现,拼图方块像命令方块一样,也具有箭头。但和命令方块不一样的是,拼图方块只有3面有箭头,而在原来应该有箭头的那一面,只有一个长度大约是半个方块长的白色直线。这个白色直线所在的这一面,就是这个拼图方块的正面。
和其他方块不一样的是,拼图方块具有12个朝向,这12个朝向分别是:
上东(箭头朝上,白色直线那一面朝东)
上西(箭头朝上,白色直线那一面朝西)
上南(箭头朝上,白色直线那一面朝南)
上北(箭头朝上,白色直线那一面朝北)
东上(箭头朝东,白色直线那一面朝上)
西上(箭头朝西,白色直线那一面朝上)
南上(箭头朝南,白色直线那一面朝上)
北上(箭头朝北,白色直线那一面朝上)
下东(箭头朝下,白色直线那一面朝东)
下西(箭头朝下,白色直线那一面朝西)
下南(箭头朝下,白色直线那一面朝南)
下北(箭头朝下,白色直线那一面朝北)
只不过我们目前暂且不需要管这么复杂的朝向,只需要能够分辨出拼图方块的箭头朝的是上下东西南北中的哪一个方向就行了。
打开拼图方块,这个操作需要你具有一定的权限。打开后,你应该看到了下面几个选项:
——Java版
目标池:
minecraft:embr /ty
名称:
minecraft:embr /ty
目标名称:
minecraft:embr /ty
转变为:
minecraft:embr /ty
拼接类型:可旋转(PS:箭头朝上或朝下时才会显示出这个选项)
层数:0 |保留拼图:开|生成
完成|取消
——基岩版
目标池:
minecraft:embr /ty
名称:
minecraft:embr /ty
目标名称:
minecraft:embr /ty
变为:
minecraft:air
接点类型:可滚动
完成|取消
看起来选项很少,但如果你仔细一瞧,就会发现你似乎根本就不懂得如何使用这个玩意儿。事实上也的确如此。那么我们该如何使用拼图方块?
首先我们就要搞懂这四个空分别是指什么东西。
目标池(Target br /ool),其实就是指要用来生成的模板/结构池(你可以把这东西当作是一个装着许多结构[模板]的池子,游戏在生成时会随机拿一个结构[模板]出来生成)。需要注意的是,目标池填写的内容并不是直接精确到某个结构文件,而是精确到结构文件所在的文件夹。举个例子,你并不能这么写:
minecraft:village/savanna/houses/savanna_small_house_1
这虽然对结构方块有效,但这对拼图方块没用,因为它直接精确到了savanna_small_house_1.nbt这个结构文件。你应该要填写的是:
minecraft:village/savanna/houses
这样子拼图方块才会认。
默认这是填写minecraft:embr /ty,也就是没有东西可以生成。目标池为『minecraft:embr /ty』的拼图方块你可以把它看做是一整个拼图的边缘,也就是不会再有什么新的部分了。
名称(Name),即该拼图方块的名称。
目标名称(Target name),指的是这个拼图方块要连接到的另一个拼图方块的名称。这就像是两块拼图,一块是a另一块是b,你必须要指定a是连接b的,否则a哪里知道自己需要被拼在哪里。需要注意的是,『另一个拼图方块』并不是说你在这个拼图方块a旁边再放一个拼图方块b,而是指拼图方块a所选择的目标池中的结构内所具有的拼图方块。如果你并不能很好理解上面的描述,那我举个例子:
Look!这是一个拼图方块,它叫做A,它的目标池是minecraft:village/savanna/houses,连接的拼图方块叫做minecraft:building_entrance。
A→
这是另外一个拼图方块,它叫做minecraft:building_entrance,我们暂且就称它为B。这个拼图方块在minecraft:village/savanna/houses下一个结构里,这个结构是一个小房子,它就位于这个小房子的大门口:
←B门房
现在,玩家打开了A,选择了一个大于0的层数,然后点击了生成按钮,随后A从池子中抽到了B所在的那个结构!A随后检查了一下这个结构,它找到了它要连接的B!A很高兴,它在脑袋中臆想把B放在自己正前方的样子:
A→←B (这是A的想象)
A发现它们两简直是天之绝配,能够完美契合在一起!A太高兴了,它把B连带着B后面的房子也全部生成了出来:
A→←B门房
至于A会不会和B成为朋友,领到结婚证,走上块生巅峰,那就是后话了。但可以肯定的是,『目标名称』即代表着一个拼图方块想要连接的另一个拼图方块,它就像是一块拼图上的提示,告诉游戏这个拼图方块会和结构中哪一个拼图方块拼接形成一个像是上面A和B贴贴的结构,所以这东西啊十分滴重要。
虽然A和B贴贴对于拼图方块来讲是件好事(如果能拟人化那就更是件好事),但这对于游戏来讲并不是件好事,对于玩家来讲那就更不是件好事——你敢忍受一个房子的门口被放上两块像基岩一样硬的方块吗?何况这两个方块还是成双成对,这对于很多不成对的人来讲那就更不友好。那么游戏是怎么解决这个问题的呢?很好解决:当这个拼图方块被使用了,也就是被拼了,游戏就会让它变成其他的方块。至于具体是什么方块,就得看这个拼图方块的『转变为(变为)』选项写的是啥了。
『转变为(变为)』选项默认填写的是『minecraft:air』,也就是空气方块。这代表着该拼图方块被使用过后就会变为空气方块。这里填写的方块ID支持附加方块状态和方块实体(方块NBT),比如:『minecraft:acacia_stairs[facing=east]』就代表着该拼图方块会被替换为一个朝向东的金合欢木楼梯。
如果你能成功理解上面的内容,那么下面的内容就很简单了。
『拼接类型』和『接点类型』有两个选项:可旋转(可滚动)和固定(一致)。可旋转,即代表着该结构在生成时会随机旋转一些度数,当然这个度数肯定是90°的倍数。固定,即代表着这个结构在生成时不会旋转,只会以默认的朝向生成。
『保留拼图』选项,即代表着这个拼图方块生成结构后,被生成结构内的拼图方块(不包括生成结构的那个拼图方块)是否要保留下来。如果为『关闭』,则结构内的拼图方块在生成后会被替换为『转变为』指定的方块。放在上面的AB贴贴例子中,如果A关闭了『保留拼图』,那么B在生成后就不能和A贴贴了,B会被替换成空气或是一些其他的方块。
『生成』按钮,你按下去就会使得这个拼图方块尝试根据你指定的这些参数来生成结构,如果成功那就会生成一个结构,如果不成功那就不会生成。在基岩版和Java1.16前的某些版本,由于拼图方块内没有『生成』按钮(你应该有注意到),导致你即使获得了,填写了正确的参数也生成不了,也许是因为功能还没做好Mojang才这么搞的。
你有没有发现我似乎漏了一个选项:『层数』。
这个『层数』选项可以选择0-7的任意一个整数,但这有什么用呢?
让我们先来尝试使用结构方块生成村庄的道路——放置一个结构方块,使用加载模式加载『minecraft:village/savanna/streets/crossroad_02』这个结构,然后你就会看到加载出来了一些附带了许多拼图方块的道路。
不难发现,结构内也有一些其他的拼图方块,这些拼图方块也可以加载出更多的结构来和此结构结合。比如村庄,就是由拼图方块先加载出来一个道路结构,然后道路结构内的拼图方块又加载出更多的道路结构,同时也顺带加载出了房子、铁傀儡、田地、猫,房子的拼图方块又加载出来村民以及更多的东西......就这样套娃生成,最终形成了『阡陌交通,鸡犬相闻』的村庄。
当然,游戏不可能无限套娃生成出一个超大的村庄来,所以游戏就规定了『层数』,这个『层数』就是指能够套娃生成的层数,举个例子:
假设有一个结构池(目标池),ID为『wwwwww:some_wwwwww』,其唯一的结构长这样:
←M草草草M→
M······名称为M,目标名称为S,目标池为『wwwwww:a_huaji』,『保留拼图』为关闭的拼图方块
还有一个结构池(目标池),ID为『wwwwww:a_huaji』,其唯一的结构长这样:
←S稽稽
S······名称为S,目标名称为M,目标池为『wwwwww:some_wwwwww』,『转变为』是『wwwwww:huaji_block』(滑稽方块)的拼图方块
现在有一个拼图方块←T,目标池为『wwwwww:some_wwwwww』,目标名称为『M』,『保留拼图』为开启。我们来打开T,调整生成层数为『2』,然后点击一下生成按钮,就会生成:
稽稽稽←M草草草M→←T
为什么会这样呢?让我们来分析一下。
首先这个T拼图方块会找到『←M草草草M→』这个结构,然后寻找叫做『M』的拼图方块。由于此时M有两个,所以T会随机选取一个,如果选取到的M朝向和T的相反朝向不一致,就会旋转整个结构使得M和T互相朝向对方(也就是让它们两能够贴贴),然后就生成了:
←M草草草M→←T
接下来游戏会继续套娃第二层。由于右边的M已经使用过了,所以游戏会激活左边的M,然后M找到『←S稽稽』这个结构,调整整个结构的朝向使得S能够和自己贴贴,就生成了:
稽稽S→←M草草草M→←T
但由于M关闭了『保留拼图』,加上现在第二层已经生成完了,规定也是生成到第二层,不会再生成第三层,所以S在生成后,游戏就会将S替换为『wwwwww:huaji_block』,也就是滑稽方块,最终就变成了:
稽稽稽←M草草草M→←T
如果你听懂了,那么接下来我们来探讨几个问题:
①为什么『←M草草草M→』必须要有两个M?不能是『←P草草草M→』,然后让P指向S吗?
这样做也行,只不过你最终会生成出如下结构
←P草草草M→←T
玩家使用拼图方块进行多层生成时,游戏仅仅会让结构中和初始拼图方块(也就是←T)目标名称一致的拼图方块(也就是叫做M的拼图方块)来生成结构,并不会让结构中所有的拼图方块都生成。当然,游戏自己使用时肯定没有这个限制。
②如果T的朝向是上或下会怎么样?
假设T的朝向是上,那么将不会生成,因为游戏无法弄出来这样的结构:
稽
稽
稽
↑
M
草
草
草
M
↓
↑
T
就算能够弄出来这样的结构,游戏也不会允许这样的结构生成。因为如果游戏允许,那么生成的情况就会更加复杂,毕竟有些方块可没有竖着的朝向。T朝下同理。
③如果T的层数选择了3甚至更高会发生什么?
这个问题由你自己去思考。
④基岩版能使用拼图方块吗?
因为没有『生成』按钮,所以你虽然能够填写参数,但是用不了(悲)。
这就是本章的全部内容。
附表:拼图方块历史
Java
1.14——加入了拼图方块,可用于生成村庄和掠夺者前哨站。
1.16——具有了新的GUI,可以用来生成堡垒遗迹。
1.19——可以用来生成远古城市。
基岩版
1.10.0——加入了拼图方块,没用
1.16.0——能够用/give获得,并且有了GUI和实际用途,但玩家还是用不了