第八十七章 拼圖方塊
?。ù苏鹿?jié)原本為『戰(zhàn)利品(/loot 上)』,2022年7月24日重寫為『拼圖方塊』)
(作者重寫時使用的是Minecraft Java1.14.4、1.16.2、1.19和基巖版1.19.10)
我們在第七十九章至八十章,了解了一個特殊的方塊:結(jié)構(gòu)方塊。結(jié)構(gòu)方塊可以用來生成整個結(jié)構(gòu),但在Minecraft中,有許多諸如村莊、要塞之類的結(jié)構(gòu)雖然整體上也是結(jié)構(gòu),但其實是由多個小模板隨機組合而生成的。比如村莊,一個村莊就是由水井+一堆道路+一堆房子+一堆村民+一堆其他的東西組合而成。
既然結(jié)構(gòu)方塊能夠生成結(jié)構(gòu),那么我們是否可以生成用來組成結(jié)構(gòu)的模板(小型結(jié)構(gòu))呢?
答案是肯定的,你可以通過結(jié)構(gòu)方塊來生成模板,但往往這些模板生成出來后并不具有隨機性,也就是說就算你會生成也沒用。那我們該怎么辦?能不能通過一些途徑來使得這些模板像游戲自然生成一樣生成?
俗話說的好:條條大路通羅馬,Mojang給了我們另外一條路——拼圖方塊。
拼圖方塊(Jigsaw Block)
數(shù)字ID:-211[BE]
命名空間ID:jigsaw
亮度:0
爆炸抗性:3600000
具有標簽:
#dragon_immune(免疫末影龍破壞)
#wither_immune(免疫凋零破壞)
拼圖方塊雖然功能比結(jié)構(gòu)方塊要少很多,但要上手這東西難度可不是一般的大。首先,讓我們來獲得一個拼圖方塊:
/give @s jigsaw
然后你可以把它放下來。不難發(fā)現(xiàn),拼圖方塊像命令方塊一樣,也具有箭頭。但和命令方塊不一樣的是,拼圖方塊只有3面有箭頭,而在原來應(yīng)該有箭頭的那一面,只有一個長度大約是半個方塊長的白色直線。這個白色直線所在的這一面,就是這個拼圖方塊的正面。
和其他方塊不一樣的是,拼圖方塊具有12個朝向,這12個朝向分別是:
上東(箭頭朝上,白色直線那一面朝東)
上西(箭頭朝上,白色直線那一面朝西)
上南(箭頭朝上,白色直線那一面朝南)
上北(箭頭朝上,白色直線那一面朝北)
東上(箭頭朝東,白色直線那一面朝上)
西上(箭頭朝西,白色直線那一面朝上)
南上(箭頭朝南,白色直線那一面朝上)
北上(箭頭朝北,白色直線那一面朝上)
下東(箭頭朝下,白色直線那一面朝東)
下西(箭頭朝下,白色直線那一面朝西)
下南(箭頭朝下,白色直線那一面朝南)
下北(箭頭朝下,白色直線那一面朝北)
只不過我們目前暫且不需要管這么復(fù)雜的朝向,只需要能夠分辨出拼圖方塊的箭頭朝的是上下東西南北中的哪一個方向就行了。
打開拼圖方塊,這個操作需要你具有一定的權(quán)限。打開后,你應(yīng)該看到了下面幾個選項:
——Java版
目標池:
minecraft:empty
名稱:
minecraft:empty
目標名稱:
minecraft:empty
轉(zhuǎn)變?yōu)椋?p> minecraft:empty
拼接類型:可旋轉(zhuǎn)(PS:箭頭朝上或朝下時才會顯示出這個選項)
層數(shù):0 |保留拼圖:開|生成
完成|取消
——基巖版
目標池:
minecraft:empty
名稱:
minecraft:empty
目標名稱:
minecraft:empty
變?yōu)椋?p> minecraft:air
接點類型:可滾動
完成|取消
看起來選項很少,但如果你仔細一瞧,就會發(fā)現(xiàn)你似乎根本就不懂得如何使用這個玩意兒。事實上也的確如此。那么我們該如何使用拼圖方塊?
首先我們就要搞懂這四個空分別是指什么東西。
目標池(Target pool),其實就是指要用來生成的模板/結(jié)構(gòu)池(你可以把這東西當作是一個裝著許多結(jié)構(gòu)[模板]的池子,游戲在生成時會隨機拿一個結(jié)構(gòu)[模板]出來生成)。需要注意的是,目標池填寫的內(nèi)容并不是直接精確到某個結(jié)構(gòu)文件,而是精確到結(jié)構(gòu)文件所在的文件夾。舉個例子,你并不能這么寫:
minecraft:village/savanna/houses/savanna_small_house_1
這雖然對結(jié)構(gòu)方塊有效,但這對拼圖方塊沒用,因為它直接精確到了savanna_small_house_1.nbt這個結(jié)構(gòu)文件。你應(yīng)該要填寫的是:
minecraft:village/savanna/houses
這樣子拼圖方塊才會認。
默認這是填寫minecraft:empty,也就是沒有東西可以生成。目標池為『minecraft:empty』的拼圖方塊你可以把它看做是一整個拼圖的邊緣,也就是不會再有什么新的部分了。
名稱(Name),即該拼圖方塊的名稱。
目標名稱(Target name),指的是這個拼圖方塊要連接到的另一個拼圖方塊的名稱。這就像是兩塊拼圖,一塊是a另一塊是b,你必須要指定a是連接b的,否則a哪里知道自己需要被拼在哪里。需要注意的是,『另一個拼圖方塊』并不是說你在這個拼圖方塊a旁邊再放一個拼圖方塊b,而是指拼圖方塊a所選擇的目標池中的結(jié)構(gòu)內(nèi)所具有的拼圖方塊。如果你并不能很好理解上面的描述,那我舉個例子:
Look!這是一個拼圖方塊,它叫做A,它的目標池是minecraft:village/savanna/houses,連接的拼圖方塊叫做minecraft:building_entrance。
A→
這是另外一個拼圖方塊,它叫做minecraft:building_entrance,我們暫且就稱它為B。這個拼圖方塊在minecraft:village/savanna/houses下一個結(jié)構(gòu)里,這個結(jié)構(gòu)是一個小房子,它就位于這個小房子的大門口:
←B門房
現(xiàn)在,玩家打開了A,選擇了一個大于0的層數(shù),然后點擊了生成按鈕,隨后A從池子中抽到了B所在的那個結(jié)構(gòu)!A隨后檢查了一下這個結(jié)構(gòu),它找到了它要連接的B!A很高興,它在腦袋中臆想把B放在自己正前方的樣子:
A→←B (這是A的想象)
A發(fā)現(xiàn)它們兩簡直是天之絕配,能夠完美契合在一起!A太高興了,它把B連帶著B后面的房子也全部生成了出來:
A→←B門房
至于A會不會和B成為朋友,領(lǐng)到結(jié)婚證,走上塊生巔峰,那就是后話了。但可以肯定的是,『目標名稱』即代表著一個拼圖方塊想要連接的另一個拼圖方塊,它就像是一塊拼圖上的提示,告訴游戲這個拼圖方塊會和結(jié)構(gòu)中哪一個拼圖方塊拼接形成一個像是上面A和B貼貼的結(jié)構(gòu),所以這東西啊十分滴重要。
雖然A和B貼貼對于拼圖方塊來講是件好事(如果能擬人化那就更是件好事),但這對于游戲來講并不是件好事,對于玩家來講那就更不是件好事——你敢忍受一個房子的門口被放上兩塊像基巖一樣硬的方塊嗎?何況這兩個方塊還是成雙成對,這對于很多不成對的人來講那就更不友好。那么游戲是怎么解決這個問題的呢?很好解決:當這個拼圖方塊被使用了,也就是被拼了,游戲就會讓它變成其他的方塊。至于具體是什么方塊,就得看這個拼圖方塊的『轉(zhuǎn)變?yōu)椋ㄗ優(yōu)椋贿x項寫的是啥了。
『轉(zhuǎn)變?yōu)椋ㄗ優(yōu)椋贿x項默認填寫的是『minecraft:air』,也就是空氣方塊。這代表著該拼圖方塊被使用過后就會變?yōu)榭諝夥綁K。這里填寫的方塊ID支持附加方塊狀態(tài)和方塊實體(方塊NBT),比如:『minecraft:acacia_stairs[facing=east]』就代表著該拼圖方塊會被替換為一個朝向東的金合歡木樓梯。
如果你能成功理解上面的內(nèi)容,那么下面的內(nèi)容就很簡單了。
『拼接類型』和『接點類型』有兩個選項:可旋轉(zhuǎn)(可滾動)和固定(一致)??尚D(zhuǎn),即代表著該結(jié)構(gòu)在生成時會隨機旋轉(zhuǎn)一些度數(shù),當然這個度數(shù)肯定是90°的倍數(shù)。固定,即代表著這個結(jié)構(gòu)在生成時不會旋轉(zhuǎn),只會以默認的朝向生成。
『保留拼圖』選項,即代表著這個拼圖方塊生成結(jié)構(gòu)后,被生成結(jié)構(gòu)內(nèi)的拼圖方塊(不包括生成結(jié)構(gòu)的那個拼圖方塊)是否要保留下來。如果為『關(guān)閉』,則結(jié)構(gòu)內(nèi)的拼圖方塊在生成后會被替換為『轉(zhuǎn)變?yōu)椤恢付ǖ姆綁K。放在上面的AB貼貼例子中,如果A關(guān)閉了『保留拼圖』,那么B在生成后就不能和A貼貼了,B會被替換成空氣或是一些其他的方塊。
『生成』按鈕,你按下去就會使得這個拼圖方塊嘗試根據(jù)你指定的這些參數(shù)來生成結(jié)構(gòu),如果成功那就會生成一個結(jié)構(gòu),如果不成功那就不會生成。在基巖版和Java1.16前的某些版本,由于拼圖方塊內(nèi)沒有『生成』按鈕(你應(yīng)該有注意到),導致你即使獲得了,填寫了正確的參數(shù)也生成不了,也許是因為功能還沒做好Mojang才這么搞的。
你有沒有發(fā)現(xiàn)我似乎漏了一個選項:『層數(shù)』。
這個『層數(shù)』選項可以選擇0-7的任意一個整數(shù),但這有什么用呢?
讓我們先來嘗試使用結(jié)構(gòu)方塊生成村莊的道路——放置一個結(jié)構(gòu)方塊,使用加載模式加載『minecraft:village/savanna/streets/crossroad_02』這個結(jié)構(gòu),然后你就會看到加載出來了一些附帶了許多拼圖方塊的道路。
不難發(fā)現(xiàn),結(jié)構(gòu)內(nèi)也有一些其他的拼圖方塊,這些拼圖方塊也可以加載出更多的結(jié)構(gòu)來和此結(jié)構(gòu)結(jié)合。比如村莊,就是由拼圖方塊先加載出來一個道路結(jié)構(gòu),然后道路結(jié)構(gòu)內(nèi)的拼圖方塊又加載出更多的道路結(jié)構(gòu),同時也順帶加載出了房子、鐵傀儡、田地、貓,房子的拼圖方塊又加載出來村民以及更多的東西......就這樣套娃生成,最終形成了『阡陌交通,雞犬相聞』的村莊。
當然,游戲不可能無限套娃生成出一個超大的村莊來,所以游戲就規(guī)定了『層數(shù)』,這個『層數(shù)』就是指能夠套娃生成的層數(shù),舉個例子:
假設(shè)有一個結(jié)構(gòu)池(目標池),ID為『wwwwww:some_wwwwww』,其唯一的結(jié)構(gòu)長這樣:
←M草草草M→
M······名稱為M,目標名稱為S,目標池為『wwwwww:a_huaji』,『保留拼圖』為關(guān)閉的拼圖方塊
還有一個結(jié)構(gòu)池(目標池),ID為『wwwwww:a_huaji』,其唯一的結(jié)構(gòu)長這樣:
←S稽稽
S······名稱為S,目標名稱為M,目標池為『wwwwww:some_wwwwww』,『轉(zhuǎn)變?yōu)椤皇恰簑wwwww:huaji_block』(滑稽方塊)的拼圖方塊
現(xiàn)在有一個拼圖方塊←T,目標池為『wwwwww:some_wwwwww』,目標名稱為『M』,『保留拼圖』為開啟。我們來打開T,調(diào)整生成層數(shù)為『2』,然后點擊一下生成按鈕,就會生成:
稽稽稽←M草草草M→←T
為什么會這樣呢?讓我們來分析一下。
首先這個T拼圖方塊會找到『←M草草草M→』這個結(jié)構(gòu),然后尋找叫做『M』的拼圖方塊。由于此時M有兩個,所以T會隨機選取一個,如果選取到的M朝向和T的相反朝向不一致,就會旋轉(zhuǎn)整個結(jié)構(gòu)使得M和T互相朝向?qū)Ψ剑ㄒ簿褪亲屗鼈儍赡軌蛸N貼),然后就生成了:
←M草草草M→←T
接下來游戲會繼續(xù)套娃第二層。由于右邊的M已經(jīng)使用過了,所以游戲會激活左邊的M,然后M找到『←S稽稽』這個結(jié)構(gòu),調(diào)整整個結(jié)構(gòu)的朝向使得S能夠和自己貼貼,就生成了:
稽稽S→←M草草草M→←T
但由于M關(guān)閉了『保留拼圖』,加上現(xiàn)在第二層已經(jīng)生成完了,規(guī)定也是生成到第二層,不會再生成第三層,所以S在生成后,游戲就會將S替換為『wwwwww:huaji_block』,也就是滑稽方塊,最終就變成了:
稽稽稽←M草草草M→←T
如果你聽懂了,那么接下來我們來探討幾個問題:
?、贋槭裁础骸鸐草草草M→』必須要有兩個M?不能是『←P草草草M→』,然后讓P指向S嗎?
這樣做也行,只不過你最終會生成出如下結(jié)構(gòu)
←P草草草M→←T
玩家使用拼圖方塊進行多層生成時,游戲僅僅會讓結(jié)構(gòu)中和初始拼圖方塊(也就是←T)目標名稱一致的拼圖方塊(也就是叫做M的拼圖方塊)來生成結(jié)構(gòu),并不會讓結(jié)構(gòu)中所有的拼圖方塊都生成。當然,游戲自己使用時肯定沒有這個限制。
?、谌绻鸗的朝向是上或下會怎么樣?
假設(shè)T的朝向是上,那么將不會生成,因為游戲無法弄出來這樣的結(jié)構(gòu):
稽
稽
稽
↑
M
草
草
草
M
↓
↑
T
就算能夠弄出來這樣的結(jié)構(gòu),游戲也不會允許這樣的結(jié)構(gòu)生成。因為如果游戲允許,那么生成的情況就會更加復(fù)雜,畢竟有些方塊可沒有豎著的朝向。T朝下同理。
?、廴绻鸗的層數(shù)選擇了3甚至更高會發(fā)生什么?
這個問題由你自己去思考。
?、芑鶐r版能使用拼圖方塊嗎?
因為沒有『生成』按鈕,所以你雖然能夠填寫參數(shù),但是用不了(悲)。
這就是本章的全部內(nèi)容。
附表:拼圖方塊歷史
Java
1.14——加入了拼圖方塊,可用于生成村莊和掠奪者前哨站。
1.16——具有了新的GUI,可以用來生成堡壘遺跡。
1.19——可以用來生成遠古城市。
基巖版
1.10.0——加入了拼圖方塊,沒用
1.16.0——能夠用/give獲得,并且有了GUI和實際用途,但玩家還是用不了