我的世界命令方塊教程檢測(cè)實(shí)體死前位置新方法
小編為大家?guī)?lái)了《我的世界》命令方塊教程檢測(cè)實(shí)體死前位置新方法,一直以來(lái),檢測(cè)實(shí)體的死前位置都是一件很麻煩的事情。常見(jiàn)的方法有:
配對(duì)——就是每個(gè)實(shí)體給一個(gè)編號(hào),然后把指定編號(hào)的盔甲架tp到那個(gè)實(shí)體那里
這個(gè)方法雖然不太可能出錯(cuò),因?yàn)槟莻(gè)盔甲架是肯定傳送到指定的實(shí)體那里的,然而那個(gè)窮舉數(shù)十分多。
檢測(cè)掉落物——這個(gè)方法就是給生物一個(gè)裝備,可能是不能顯示的。然后該生物死后,那裝備就會(huì)掉下,檢測(cè)那個(gè)裝備就代表檢測(cè)那個(gè)生物死前的位置。
然而這個(gè)方法有極大的局限,比如說(shuō)野生的生物,你需要更改他們的裝備,就可能會(huì)令他們?cè)镜难b備失去。也不能夠追蹤其他實(shí)體種類。
有一天,我突然想弄這個(gè),想了想,其實(shí)我們要做的東西其實(shí)很簡(jiǎn)單。
流程就是
選擇實(shí)體?選擇最近的從未選擇過(guò)(這1游戲刻)的盔甲架并把其tp過(guò)來(lái)
(不停重復(fù)以上步驟直至所有實(shí)體都選擇完)
那么剩下的不就是代表的實(shí)體"死了"的盔甲架嗎?
雖然的確會(huì)有bug,比如一些會(huì)傳送的實(shí)體,可能就不適合這個(gè)。還有當(dāng)實(shí)體很靠近的時(shí)候可能會(huì)互相干擾,盔甲架可能到了旁邊的實(shí)體也不一定,然而這其實(shí)根本就無(wú)關(guān)要緊,只要不是不能用就好了2333333333
(起碼這個(gè)比一大堆窮舉/只能檢測(cè)生物的位置對(duì)我來(lái)說(shuō)方便點(diǎn)吧23333)
思路、原理分析
首先,我們用stats把指定實(shí)體和盔甲架的successcount儲(chǔ)存到記分板,并且把其分?jǐn)?shù)設(shè)置為0。
然后,我們execute指定實(shí)體execute該實(shí)體最近還沒(méi)被選擇的盔甲架tp到最近還沒(méi)被選擇過(guò)的指定實(shí)體
比如execute @e[type=!Player,score_time=1,score_time_min=1] ~ ~ ~ execute @e[c=1,type=ArmorStand,score_stats=0] ~ ~ ~ tp @e[c=1] @e[c=1,score_time=1,score_time_min=1,score_stats=0]
由于tp了之后,該實(shí)體和用以標(biāo)記的盔甲架的successcount分?jǐn)?shù)都會(huì)為1(execute的成功),所以之后就不會(huì)選擇到它們
之后,我們就可以對(duì)stats分?jǐn)?shù)為0的盔甲架為所欲為♂ (因?yàn)閟tats為0的盔甲架就代表了它是剩下的一個(gè),沒(méi)有任何配搭,代表它所標(biāo)記的實(shí)體死了)
#其實(shí)這里有個(gè)假設(shè)的,我剛才忘記說(shuō)明了2333333我是假設(shè)每個(gè)實(shí)體最近的盔甲架為其上1gt的位置,所以這東西是根據(jù)這個(gè)假設(shè)來(lái)運(yùn)作的
如果那個(gè)實(shí)際情況違背了這個(gè)假設(shè)(比如會(huì)瞬移的實(shí)體),這樣子這個(gè)系統(tǒng)就會(huì)出很大的bug
例子
例子下載: http://pan.baidu.com/s/1o6N86Ps
這個(gè)例子是標(biāo)記僵尸的,然而其他的實(shí)體也是能夠標(biāo)記的,只要不是末影人這類會(huì)傳送的。
命令:
scoreboard players add @e[type=Zombie] time 0
execute @e[score_time=0,score_time_min=0] ~ ~ ~ summon ArmorStand ~ ~ ~ {CustomName:"Marker",Invisible:1b,NoGravity:1b,Invulnerable:1b}
scoreboard players set @e[score_time=0,score_time_min=0] time 1
scoreboard players set @e[type=!Player] stats 0
execute @e[type=!Player] ~ ~ ~ stats entity @e[c=1,r=0,type=!Player] set SuccessCount @e[c=1,r=0,type=!Player] stats
scoreboard players set @e[type=!Player] stats 0
execute @e[type=!Player,score_time=1,score_time_min=1] ~ ~ ~ execute @e[c=1,type=ArmorStand,score_stats=0] ~ ~ ~ tp @e[c=1] @e[c=1,score_time=1,score_time_min=1,score_stats=0]
scoreboard players set @e[score_stats=0,name=Marker] time -5
execute @e[score_time=-5,type=ArmorStand] ~ ~ ~ /particle fireworksSpark ~ ~ ~ 0 0 0 1 50
kill @e[score_time=-5,type=ArmorStand]
復(fù)制代碼
首先,前三個(gè)命令都是為了標(biāo)記新誕生的僵尸,并且讓他們生成盔甲架的。我們先把所有僵尸的time分?jǐn)?shù)+0(不改變分?jǐn)?shù),然而如果沒(méi)有分?jǐn)?shù)就會(huì)把分?jǐn)?shù)變?yōu)?),然后讓所有time分?jǐn)?shù)為0的summon盔甲架,之后把他們的分?jǐn)?shù)設(shè)置為1(讓他們不會(huì)再生成盔甲架)。
之后的3個(gè)命令就是為了設(shè)置僵尸和盔甲架的stats
首先把stats分?jǐn)?shù)設(shè)置為0(以免出現(xiàn)沒(méi)有分?jǐn)?shù)的情況),然后設(shè)置stats(每只僵尸和盔甲架的successcount設(shè)置給自己的stats分?jǐn)?shù)里),最后把stats分?jǐn)?shù)設(shè)置為0(因?yàn)樯弦粋(gè)命令是成功的,所以他們的stats分?jǐn)?shù)是1)
然后,那一個(gè)命令就是整個(gè)系統(tǒng)的核心了,詳見(jiàn)上一個(gè)部分的解釋 (雖然也說(shuō)得不詳細(xì))。
最后的三個(gè)指令,就是用來(lái)對(duì)那個(gè)stats分?jǐn)?shù)為0的實(shí)體執(zhí)行操作的
首先我們把stats分?jǐn)?shù)為0的實(shí)體用time分?jǐn)?shù)來(lái)標(biāo)記,因?yàn)閑xecute命令在他們身上執(zhí)行了之后也是會(huì)讓其分?jǐn)?shù)變?yōu)?的
之后我們就執(zhí)行一些指令(比如在這里就是用particle指令來(lái)告訴玩家這個(gè)盔甲架的主人死了)
最后就把那個(gè)沒(méi)有主人的盔甲架殺死
bug:
1.不能指定末影人這類會(huì)瞬移的實(shí)體,因?yàn)樗麄儌魉蛠?lái)傳送去,這系統(tǒng)根本就不知道哪個(gè)盔甲架代表哪只末影人,于是那些位置就可能亂起來(lái)
2.不能跨世界指定,因?yàn)槟强准芪也⒉荒鼙WC它能夠過(guò)去那個(gè)世界(尤其是末地)
3.實(shí)體之間距離很接近的話,那個(gè)stats有可能會(huì)混亂(由于那個(gè)stats儲(chǔ)存的分?jǐn)?shù)是給最近的非玩家實(shí)體,太靠近可能會(huì)給錯(cuò)人,其原因應(yīng)該是MC的特性吧。。。),于是那個(gè)盔甲架可能會(huì)傳送到同一個(gè)實(shí)體那里。然而不用擔(dān)心,等一會(huì)/實(shí)體之間的距離遠(yuǎn)了的話,這個(gè)bug就會(huì)自動(dòng)消失。
4.玩家千萬(wàn)千萬(wàn)別打要標(biāo)記的實(shí)體...........無(wú)論是創(chuàng)造模式還是生存等都千萬(wàn)別打.......原因還是未知,可能就是MC的特性。
查看所有0條評(píng)論>>