我的世界命令方塊教程單刻輸出的GPS制作
小編為大家?guī)?lái)了《我的世界》命令方塊教程單刻輸出的GPS制作,這是來(lái)自MCBBS版主乙烯_中國(guó)的一個(gè)作品,有興趣的玩家都來(lái)看看吧。相信認(rèn)識(shí)我的人多多少少會(huì)知道我在幾個(gè)月前水過(guò)一個(gè)GPS原型機(jī)。在那時(shí)syl跟我說(shuō)的GPS能夠單刻輸出結(jié)果。這點(diǎn)讓我很是在意,并一直琢磨著如何做到。之前的一次意外讓我無(wú)意中摸索到了訣竅。
等我做出來(lái)興高采烈的和syl說(shuō)的時(shí)候他告訴我外國(guó)人做過(guò)了。唉syl我和你說(shuō)不帶你這么玩的(╯‵□′)╯︵┻━┻?傊窒硎敲赖拢瑒e計(jì)較這個(gè)了,先把這個(gè)技術(shù)推廣吧。
首先來(lái)介紹一下GPS是指的什么吧。玩命令的同學(xué)應(yīng)該都知道m(xù)c是沒(méi)有提供給命令系統(tǒng)讀取坐標(biāo)的接口,那么不能獲取坐標(biāo)在某些方面其實(shí)還是很不方便的。所以之前那個(gè)原型機(jī)做到了輸出整數(shù)的坐標(biāo)。現(xiàn)在的這個(gè)系統(tǒng)也能做到,并且是每時(shí)每刻瞬間輸出的類型。
那么這里的話我也大概說(shuō)一下具體原理。整個(gè)事情是這樣的,前段時(shí)間呢,是要去研究邊界之地,結(jié)果呢,手賤,傳送的邊界之地里面去了,然后我就顯示了掉線。單人游戲也會(huì)掉線這一點(diǎn)我覺(jué)得非常的有趣,但是那個(gè)存檔之后也就打不開(kāi)了,由于是隨機(jī)生成的地圖,所以其實(shí)也并不重要。但是,我們需要透過(guò)現(xiàn)象看本質(zhì),如果玩家在邊界之地會(huì)被處理為掉線,那么其他實(shí)體會(huì)怎樣呢,隨后我就進(jìn)行了一下實(shí)驗(yàn)。
實(shí)驗(yàn)的內(nèi)容很簡(jiǎn)單,tp一個(gè)實(shí)體進(jìn)邊界之地就明朗了。
summon Zombie ~ ~1 ~ {CustomName:hi}
召喚一個(gè)叫hi的僵尸。
由于我實(shí)驗(yàn)的地方的z坐標(biāo)為負(fù)數(shù),所以我們選擇z軸負(fù)方向的邊界之地。
tp @e[name=hi] ~ ~ ~-30000000
tp進(jìn)邊界之地,這個(gè)沒(méi)啥好說(shuō)的,接下來(lái)就是重頭戲了。
測(cè)量好執(zhí)行次序之后,讓以下指令控制在上一條之后激活。
首先我們來(lái)實(shí)驗(yàn)一下
tp @e[name=hi] ~ ~ ~30000000
當(dāng)然這條指令的目的就是將僵尸tp回來(lái),而激活之后的結(jié)果是,僵尸顯示在原地,其實(shí)已經(jīng)去了一趟邊界了。
那么如果我們把第二條指令修改為
execute @e[name=hi] ~ ~ ~ tp @e[name=hi] ~ ~ ~30000000
會(huì)怎樣呢?
答案是,僵尸不見(jiàn)了。
這樣的對(duì)照實(shí)驗(yàn)我們可以很鮮明的看出區(qū)別,在于邊界之地的實(shí)體并不能用exe指令來(lái)執(zhí)行指令。
[07:01:48] 你輸入的數(shù)字 (-3.000093340725673E7)太小了,它至少需要為-30000000
通過(guò)這樣的反饋信息我們也可以注意到一些有趣的冷知識(shí)。就是命令內(nèi)部的一些數(shù)據(jù)其實(shí)也是有取值范圍的,比如這里的坐標(biāo)。
那么進(jìn)行其他的一些實(shí)驗(yàn)以確保確實(shí)exe是不能執(zhí)行的。
確認(rèn)完成。
那么這個(gè)不能用的發(fā)現(xiàn)能用在哪里呢?自然gps應(yīng)該是可以用上的,因?yàn)檫@個(gè)可以判斷實(shí)體是否在邊界之地里。那么我們來(lái)進(jìn)行系統(tǒng)的架構(gòu)。
首先,還是萬(wàn)年二分法。
這里講解一下,這里我們需要先創(chuàng)建x和z兩個(gè)計(jì)分板變量。
/scoreboard objectives add x dummy
/scoreboard objectives add z dummy
這里以x變量為例子。注意,每個(gè)變量一個(gè)實(shí)體。
然后召喚一個(gè)實(shí)體進(jìn)行判斷。
execute @a ~ 0 ~ summon ArmorStand ~ ~ ~
{CustomName:"mark"}
然后執(zhí)行以下一組指令讓系統(tǒng)初始化
/scoreboard players reset @a x
tp @e[name=mark] ~-16777216 ~ ~
tp @e[name=mark] ~-16777216 ~ ~
/scoreboard players remove @a x 30000000
execute @e[name=mark] ~ ~ ~ tp
@e[name=mark] ~16777216 ~ ~
execute @e[name=mark] ~ ~ ~ tp
@e[name=mark] ~16777216 ~ ~
接下來(lái)運(yùn)行以下規(guī)律的指令
tp @e[name=mark] ~16777216 ~ ~
execute @e[name=mark] ~ ~ ~ scoreboard
players add @a x 16777216
execute @e[name=mark] ~ ~ ~ tp @e[name=mark]
~-16777216 ~ ~
每組指令的數(shù)字需要除以2,以此遞推。直到數(shù)字變?yōu)?。
當(dāng)然最后不要忘記kill掉這個(gè)計(jì)算的實(shí)體。
kill @e[name=mark]
這個(gè)的精髓就在于利用exe進(jìn)行判斷實(shí)體是否在邊界之地內(nèi)部。這比我原來(lái)所使用的選擇器的判斷方法高效很多。話是這么說(shuō)啦,但是還是比較抽象不是嗎,這里我就把我平時(shí)喜歡用的方法說(shuō)一下。我一般喜歡用這個(gè)指令來(lái)直接看。
/tellraw @a [{"score":{"objective":"x","name":"x"},"bold":"true"},{"text":","},{"score":{"objective":"z","name":"z"},"bold":"true"}]
高頻執(zhí)行這個(gè)指令,然后沒(méi)病走兩步,就可以很生動(dòng)的看到坐標(biāo)的變化。
而且這個(gè)模塊運(yùn)行起來(lái)一點(diǎn)都不卡,實(shí)用性非常高。我已經(jīng)使用到我最近寫(xiě)的一個(gè)原版mod里面了。我會(huì)在樓中樓里面附上那貼的鏈接,你們可以去那個(gè)帖子下載下來(lái)看看。
查看所有0條評(píng)論>>