【Minecraft】結(jié)構(gòu)方塊無法儲(chǔ)存實(shí)體的乘客的特性,及解決辦法。
最近我在弄數(shù)據(jù)包時(shí)發(fā)現(xiàn)一個(gè)mc里結(jié)構(gòu)方塊有一個(gè)特性,當(dāng)你保存了一個(gè)帶有乘客的實(shí)體的結(jié)構(gòu),再加載出來,你會(huì)發(fā)生實(shí)體的乘客丟失了。查閱之后發(fā)現(xiàn),很早以前就有人發(fā)現(xiàn)了這個(gè)特性,大概是mc的底層代碼里結(jié)構(gòu)方塊不會(huì)保存實(shí)體的一些數(shù)據(jù),因此生成出來就會(huì)丟失乘客。為了解決這個(gè)問題我上MCBBS上請(qǐng)教了一番。有一個(gè)解決辦法是在結(jié)構(gòu)里放置命令方塊,用命令方塊來加載實(shí)體。
具體操作是放兩個(gè)命令方塊,最好是疊起來,底下命令方塊為脈沖型,保持開啟,輸入要生成的實(shí)體的指令。然后命令方塊指向上面的命令方塊,上面的命令方塊為連鎖型保持開啟,指令為/fill ~ ~-1 ~ ~ ~ ~ air,把自己和底下的命令方塊都替換成空氣。這樣當(dāng)結(jié)構(gòu)被結(jié)構(gòu)方塊加載出來之后,底下的命令方塊就會(huì)自動(dòng)執(zhí)行,順利執(zhí)行以后其指向的連鎖方塊也跟著執(zhí)行,就把兩個(gè)命令方塊消除掉了。于是最后只剩下實(shí)體。
但怎么做還有一個(gè)缺點(diǎn)是,不能在數(shù)據(jù)包中用。我又遇到了MC的另一個(gè)特性,如果你用數(shù)據(jù)包去在游戲中生成自定義結(jié)構(gòu),這些自定義結(jié)構(gòu)的生成是用模板池實(shí)現(xiàn)的。因此結(jié)構(gòu)生成的時(shí)候不會(huì)自動(dòng)執(zhí)行命令方塊。于是我又想到了另一個(gè)方法,就是不用命令方塊。
在結(jié)構(gòu)里生成一個(gè)帶有特殊標(biāo)簽的盔甲架,然后數(shù)據(jù)包里高頻執(zhí)行指令去檢測(cè)這個(gè)盔甲架,檢測(cè)到盔甲架以后讓這個(gè)盔甲架執(zhí)行生成實(shí)體在自己位置的指令,然后盔甲架再執(zhí)行指令殺死自己。這樣就不需要命令方塊了。