我的世界命令方塊教程檢測實體死前位置新方法
小編為大家?guī)砹恕段业氖澜纭访罘綁K教程檢測實體死前位置新方法,一直以來,檢測實體的死前位置都是一件很麻煩的事情。常見的方法有:
配對——就是每個實體給一個編號,然后把指定編號的盔甲架tp到那個實體那里
這個方法雖然不太可能出錯,因為那個盔甲架是肯定傳送到指定的實體那里的,然而那個窮舉數(shù)十分多。
檢測掉落物——這個方法就是給生物一個裝備,可能是不能顯示的。然后該生物死后,那裝備就會掉下,檢測那個裝備就代表檢測那個生物死前的位置。
然而這個方法有極大的局限,比如說野生的生物,你需要更改他們的裝備,就可能會令他們原本的裝備失去。也不能夠追蹤其他實體種類。
有一天,我突然想弄這個,想了想,其實我們要做的東西其實很簡單。
流程就是
選擇實體?選擇最近的從未選擇過(這1游戲刻)的盔甲架并把其tp過來
(不停重復以上步驟直至所有實體都選擇完)
那么剩下的不就是代表的實體"死了"的盔甲架嗎?
雖然的確會有bug,比如一些會傳送的實體,可能就不適合這個。還有當實體很靠近的時候可能會互相干擾,盔甲架可能到了旁邊的實體也不一定,然而這其實根本就無關要緊,只要不是不能用就好了2333333333
(起碼這個比一大堆窮舉/只能檢測生物的位置對我來說方便點吧23333)
思路、原理分析
首先,我們用stats把指定實體和盔甲架的successcount儲存到記分板,并且把其分數(shù)設置為0。
然后,我們execute指定實體execute該實體最近還沒被選擇的盔甲架tp到最近還沒被選擇過的指定實體
比如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了之后,該實體和用以標記的盔甲架的successcount分數(shù)都會為1(execute的成功),所以之后就不會選擇到它們
之后,我們就可以對stats分數(shù)為0的盔甲架為所欲為♂ (因為stats為0的盔甲架就代表了它是剩下的一個,沒有任何配搭,代表它所標記的實體死了)
#其實這里有個假設的,我剛才忘記說明了2333333我是假設每個實體最近的盔甲架為其上1gt的位置,所以這東西是根據(jù)這個假設來運作的
如果那個實際情況違背了這個假設(比如會瞬移的實體),這樣子這個系統(tǒng)就會出很大的bug
例子
例子下載: http://pan.baidu.com/s/1o6N86Ps
這個例子是標記僵尸的,然而其他的實體也是能夠標記的,只要不是末影人這類會傳送的。
命令:
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]
復制代碼
首先,前三個命令都是為了標記新誕生的僵尸,并且讓他們生成盔甲架的。我們先把所有僵尸的time分數(shù)+0(不改變分數(shù),然而如果沒有分數(shù)就會把分數(shù)變?yōu)?),然后讓所有time分數(shù)為0的summon盔甲架,之后把他們的分數(shù)設置為1(讓他們不會再生成盔甲架)。
之后的3個命令就是為了設置僵尸和盔甲架的stats
首先把stats分數(shù)設置為0(以免出現(xiàn)沒有分數(shù)的情況),然后設置stats(每只僵尸和盔甲架的successcount設置給自己的stats分數(shù)里),最后把stats分數(shù)設置為0(因為上一個命令是成功的,所以他們的stats分數(shù)是1)
然后,那一個命令就是整個系統(tǒng)的核心了,詳見上一個部分的解釋 (雖然也說得不詳細)。
最后的三個指令,就是用來對那個stats分數(shù)為0的實體執(zhí)行操作的
首先我們把stats分數(shù)為0的實體用time分數(shù)來標記,因為execute命令在他們身上執(zhí)行了之后也是會讓其分數(shù)變?yōu)?的
之后我們就執(zhí)行一些指令(比如在這里就是用particle指令來告訴玩家這個盔甲架的主人死了)
最后就把那個沒有主人的盔甲架殺死
bug:
1.不能指定末影人這類會瞬移的實體,因為他們傳送來傳送去,這系統(tǒng)根本就不知道哪個盔甲架代表哪只末影人,于是那些位置就可能亂起來
2.不能跨世界指定,因為那盔甲架我并不能保證它能夠過去那個世界(尤其是末地)
3.實體之間距離很接近的話,那個stats有可能會混亂(由于那個stats儲存的分數(shù)是給最近的非玩家實體,太靠近可能會給錯人,其原因應該是MC的特性吧。。。),于是那個盔甲架可能會傳送到同一個實體那里。然而不用擔心,等一會/實體之間的距離遠了的話,這個bug就會自動消失。
4.玩家千萬千萬別打要標記的實體...........無論是創(chuàng)造模式還是生存等都千萬別打.......原因還是未知,可能就是MC的特性。
查看所有0條評論>>