第六十一章 /stats與指令的輸出結(jié)果
如果我們想要僅憑指令就弄出起床戰(zhàn)爭(zhēng),別的先不說(shuō),單是檢測(cè)玩家人數(shù)是否達(dá)標(biāo)就有點(diǎn)難搞。
我們?cè)诘谌轮懒艘粭l檢測(cè)實(shí)體的指令——/testfor,也知道了/testfor在命令方塊執(zhí)行成功后輸出的紅石信號(hào)強(qiáng)度等于探測(cè)到的實(shí)體數(shù)量。但是,如果僅僅靠輸出的紅石信號(hào)做判斷,最大也就只能準(zhǔn)確判斷0~14個(gè),大于14的數(shù)量就無(wú)法判斷了。這時(shí)候我們?cè)撛趺崔k呢?
想一想,能否直接把/testfor輸出的信息同步到記分板上呢?
答案是肯定的。Mojang給了我們一條指令用于解決這個(gè)問(wèn)題:stats
/stats(僅存在于Java版1.13更新前,該指令已于Java1.13更新中移除)
作用:通過(guò)指令執(zhí)行的結(jié)果來(lái)更改記分板上的分?jǐn)?shù)
需要權(quán)限等級(jí):Java-2
需要作弊:是
格式:
/stats block <坐標(biāo)> set <需要追蹤的結(jié)果類型><被記分板追蹤的目標(biāo):目標(biāo)選擇器><計(jì)分項(xiàng)>——跟蹤并獲取某個(gè)方塊運(yùn)行指令的指定類型的結(jié)果,根據(jù)結(jié)果修改記分板上的分?jǐn)?shù)
/stats block <坐標(biāo)> clear <需要取消追蹤的結(jié)果類型>——取消跟蹤某個(gè)方塊運(yùn)行指令的指定類型結(jié)果
/stats entity <實(shí)體:目標(biāo)選擇器> set <需要追蹤的結(jié)果類型><被記分板追蹤的目標(biāo):目標(biāo)選擇器><計(jì)分項(xiàng)>——跟蹤并獲取指定實(shí)體運(yùn)行指令的指定結(jié)果,根據(jù)結(jié)果修改記分板上的分?jǐn)?shù)
/stats entity <實(shí)體:目標(biāo)選擇器> clear <需要取消追蹤的結(jié)果類型>——取消跟蹤指定實(shí)體運(yùn)行指令的指定結(jié)果
那么/stats指令到底該如何使用呢?
指令的輸出結(jié)果有五種類型:
?、僦噶顖?zhí)行成功的次數(shù)(SuccessCount)
?、谥噶畹牟樵兘Y(jié)果(QueryResult)
③受到該指令影響的物品數(shù)量(AffectedItems)
?、苁艿皆撝噶钣绊懙膶?shí)體數(shù)量(AffectedEntities)
?、菔艿皆撝噶钣绊懙姆綁K數(shù)量(AffectedBlocks)
我們使用/stats指令時(shí),必須要指定我們到底想要讓/stats指令獲取什么類型的執(zhí)行結(jié)果,因?yàn)槊恳环N執(zhí)行結(jié)果的值都可能不一樣。
比如使用clear指令檢測(cè)玩家背包內(nèi)有多少個(gè)指定物品時(shí),如果我們獲取的是SuccessCount結(jié)果類型,那么只會(huì)是1或0;而如果我們獲取的是AffectedItems,獲取到的就是物品的數(shù)量。
使用/stats時(shí),不僅要指定需要獲取什么,還要指定兩個(gè)重要的東西:
①?gòu)哪膬韩@???
?、谳敵龅侥膬海?p> /stats指令可以跟蹤指定的方塊和實(shí)體來(lái)獲取執(zhí)行在它們身上的指令的結(jié)果。看到“跟蹤”兩字沒(méi)有?沒(méi)錯(cuò),/stats指令并不是立馬就獲取到執(zhí)行指令的結(jié)果,而是先跟蹤指定的目標(biāo),比如一個(gè)命令方塊,只要這個(gè)命令方塊執(zhí)行了指令,它就會(huì)將指令的結(jié)果輸出到指定的計(jì)分項(xiàng)當(dāng)中。
/stats指令會(huì)將得到的值輸出到指定的計(jì)分項(xiàng)并修改該計(jì)分項(xiàng)中指定目標(biāo)的分?jǐn)?shù)。比如/stats獲取到的結(jié)果是13,它就會(huì)修改分?jǐn)?shù)到13(除非指定的計(jì)分項(xiàng)是只讀計(jì)分項(xiàng))。
這就是/stats的使用方法,看起來(lái)還是蠻簡(jiǎn)單的?,F(xiàn)在就讓我們實(shí)踐一下,熟悉一下具體的操作流程。
假設(shè)這是一個(gè)命令方塊,它位于坐標(biāo)12,24,81處——>?
我們要獲取整個(gè)服務(wù)器現(xiàn)在一共有多少名玩家,首先就需要準(zhǔn)備一個(gè)計(jì)分項(xiàng)以及一個(gè)正在被該計(jì)分項(xiàng)追蹤的目標(biāo)。請(qǐng)注意,必須是在該計(jì)分項(xiàng)上有分?jǐn)?shù)的目標(biāo),否則/stats會(huì)無(wú)法修改分?jǐn)?shù)(因?yàn)?stats指令只能修改分?jǐn)?shù)而不能添加追蹤目標(biāo))!
假設(shè)你已經(jīng)準(zhǔn)備好一個(gè)叫做information的計(jì)分項(xiàng)和一個(gè)正在被該計(jì)分項(xiàng)追蹤的虛假玩家players?,F(xiàn)在,運(yùn)行下面的指令:
/stats block 12 24 81 set SuccessCount players information
此時(shí)游戲會(huì)返回信息:將SuccessCount項(xiàng)統(tǒng)計(jì)信息儲(chǔ)存在了players的information上。這樣子寫(xiě)可能會(huì)誤導(dǎo)一些玩家,實(shí)際上這時(shí)候才開(kāi)始追蹤,并沒(méi)有開(kāi)始獲取結(jié)果并修改記分板上的分?jǐn)?shù)。
為了方便觀察,你可以把information計(jì)分項(xiàng)顯示在側(cè)邊欄或其他地方,然后在?命令方塊處輸入:
testfor @a
最后拉下拉桿。假設(shè)此時(shí)在線玩家為3,你就會(huì)發(fā)現(xiàn)players的分?jǐn)?shù)變成3了!
如果你拉下拉桿后服務(wù)器又進(jìn)入一名玩家,此時(shí)你再次運(yùn)行命令方塊,你就會(huì)發(fā)現(xiàn)players的分?jǐn)?shù)又變?yōu)?了!
使用起來(lái)是不是很簡(jiǎn)單?別看用的時(shí)候很簡(jiǎn)單,清理的時(shí)候可別搞錯(cuò)了。
使用/stats指令追蹤一個(gè)方塊或?qū)嶓w,如果我們沒(méi)有及時(shí)停止追蹤,游戲就會(huì)一直追蹤下去!因此,請(qǐng)你最好在指令執(zhí)行完成后再加一句:
/stats block 12 24 81 clear SuccessCount
這句指令的意思是:停止追蹤?命令方塊的SuccessCount類結(jié)果信息
清除時(shí)請(qǐng)注意一點(diǎn),結(jié)果類型一定要一樣!因?yàn)槊恳粋€(gè)追蹤項(xiàng)都是精細(xì)到結(jié)果類型的,結(jié)果類型填錯(cuò)了就變成清理其他追蹤項(xiàng),這點(diǎn)一定要注意!如果你忘記了結(jié)果類型,只能把五個(gè)類型全部清一遍(Mojang沒(méi)有提供查詢追蹤項(xiàng)的方式)。
這就是/stats指令的用法。使用/stats指令,你可以跟蹤獲取到方塊執(zhí)行指令的結(jié)果、玩家執(zhí)行指令的結(jié)果和作用在跟蹤目標(biāo)上的/execute子命令運(yùn)行的結(jié)果,并根據(jù)這些結(jié)果修改記分板上的分?jǐn)?shù)。
對(duì)了,使用/stats時(shí)請(qǐng)注意一點(diǎn),跟蹤的目標(biāo)有沒(méi)有被其他正處于循環(huán)當(dāng)中的execute指令影響到,如果有的話,獲取到的結(jié)果就會(huì)被污染?。?!
現(xiàn)在你會(huì)用/stats了嗎?我們下一章見(jiàn)。
stats歷史
Java
1.8——加入了/stats指令
1.13——移除了/stats指令,改用更先進(jìn)的/execute存儲(chǔ)子命令。關(guān)于/execute在Java1.13更新后的使用方式,我們下一卷會(huì)講到。