第四十六章 team——管理隊伍和成員
前面我們了解到,記分板的作用就是承載各個計分項。實際上,記分板的作用不止于此,在Minecraft:Java版中(嚴格來說是Minecraft:Java 1.13之前的版本)中,記分板還有一個極其重要的功能:游戲隊伍(team)。
你是不是對記分板有“游戲隊伍”這個功能感到不可思議?Mojang也是這樣想的,于是在Minecraft Java1.13扁平化中將這個功能從記分板中獨立了出來,成了一套基本上獨立的系統(tǒng)。
說了這么多,那么我們該如何使用這個功能呢?
其實不難。在Minecraft:Java1.13版本之前,該功能是內(nèi)置在scoreboard指令中的,即teams子命令。通過team,我們可以:add(添加)、remove(刪除)、list(列出)、join(加入)、empty(清除)、leave(離開)以及option(設(shè)置)。它的具體格式是:
/scoreboard teams ...
\\隊伍管理\\
... add <隊伍名稱>[隊伍顯示名稱]——添加隊伍。
... list [隊伍名稱]——列出當前所有隊伍及其信息。如果指定了隊伍名稱,將會列出該隊伍的成員名單。
... remove <隊伍名稱>——刪除隊伍。
\\隊伍成員管理\\
... join <隊伍名稱>[目標選擇器]——將所選目標加入到隊伍中。目標選擇器可用*代指所有玩家和非玩家。目標選擇器未填寫的話默認是執(zhí)行者自己。(注:一個玩家或非玩家只能同時存在于一個隊伍中,加入另外一個隊伍將會自動退出原先的隊伍)
... leave [目標選擇器]——將所選目標從ta所在的隊伍中移出。目標選擇器可用*代指所有玩家和非玩家。目標選擇器未填寫的話默認是執(zhí)行者自己。
... empty <隊伍名稱>——刪除指定隊伍中的所有成員。
\\高級隊伍管理\\
... option <隊伍名稱> color <顏色>——設(shè)置隊伍的顏色。
... option <隊伍名稱> friendlyfire <布爾值:true|false>——設(shè)置隊伍成員間是否可以互相傷害。默認為true,如果為false則不可以互相傷害。
... option <隊伍名稱> seeFriendlyInvisibles <布爾值:true|false>——設(shè)置該隊伍的成員是否可以看見處于隱身狀態(tài)的隊友(如果設(shè)置為true會看見半透明的隱身狀態(tài)隊友,false則保持通常情況,即不可見)。默認為true。
... option <隊伍名稱> nametagVisibility <名稱牌可見性:never|hideforotherteams|hideforownteam|always>——設(shè)置該隊伍成員頭上名字(更準確的說是名稱牌)的可見性,默認為always。
... option <隊伍名稱> deathMessageVisibility <死亡信息可見性:never|hideforotherteams|hideforownteam|always>——設(shè)置該隊伍成員死亡信息的可見性,默認為always。
... option <隊伍名稱> collisionRule <碰撞模式:always|never|pushownteam|pushotherteams>——控制該隊伍成員的碰撞模式,默認為always。
不難發(fā)現(xiàn),隊伍的組成和計分項的組成差不多。一個隊伍的組成有如下幾個部分:
①名稱——除了這個是隊伍的名稱外,其他方面都與計分項的名稱相同。
?、陲@示名稱——除了這個是隊伍的顯示名稱外,其他方面都與計分項的顯示名稱相同。
③成員
?、荜犖轭伾?p> ?、蓐犖橐?guī)則
?。▽嶋H上一個隊伍還有前綴[Prefix]和后綴[Suffix],但是由于兩者在1.13版本中才能在命令中被正式使用,這里我們先不了解。關(guān)于前后綴的內(nèi)容,會在第一百一十九章講到。)
現(xiàn)在,我們可以嘗試自己創(chuàng)建一個隊伍:
/scoreboard teams add team 一個隊伍
運行這條指令,游戲?qū)?chuàng)建一個名稱為team,顯示名稱為“一個隊伍”的隊伍。
如果你對這個隊伍并不滿意,就需要使用remove刪除這個隊伍:
/scoreboard teams remove team
這樣子,就成功刪除一個隊伍了。
如果你是一條魚,只有7秒記憶,創(chuàng)建后第10秒你想要刪除這個隊伍,但是你在3秒前已經(jīng)忘記這個隊伍叫什么了,此時你該怎么辦?
運行/scoreboard teams list可以列出所有隊伍及其顯示名稱和成員數(shù)量。我們現(xiàn)在運行一遍,就會得到如下信息:
記分板上正在顯示1個隊伍:
-team:'一個隊伍'有0個玩家
list子命令還可以顯示指定隊伍的成員名單。當然,在了解并使用之前,我們不妨先來看看如何為一個隊伍添加成員。
雖然游戲一直說是添加玩家,但是實際上隊伍成員和計分項的分數(shù)持有者一樣,可以是個實體甚至是不存在的玩家。添加成員需要用到j(luò)oin子命令。比如我們要將這存檔中所有的羊(sheep)加入到剛剛我們創(chuàng)建的team隊伍,就需要運行如下指令:
/scoreboard teams join team @e[type=sheep]
然后你就會看到一堆的實體UUID,這些都是羊們的UUID,而且現(xiàn)在這些羊都是這個隊伍的隊員了。如果你想要仔細看看這些羊的UUID,就需要使用list列出成員名單,具體指令如下:
/scoreboard teams list team
這將會列出team隊伍的所有成員。
相應(yīng)的,我們也可以使用leave子命令來讓羊們都離開這個隊伍:
/scoreboard teams leave @e[type=sheep]
運行上面的命令后,理想情況下team隊伍就沒有成員了。
需要注意一點,一個玩家或非玩家在同一個存檔最多只能同時存在于一個隊伍中。因此,如果我們還創(chuàng)建了一個隊伍叫做duiwu,在沒有使用leave子命令把這群羊從team隊伍移出之前,我們運行/scoreboard teams join duiwu @e[type=sheep]把這群羊加入到duiwu中,然后又一次運行/scoreboard teams list列出team和duiwu的信息,你就會驚奇的發(fā)現(xiàn)在沒有使用leave子命令的情況那些羊們竟然自動退出了team這個隊伍,全跑到了duiwu這個隊伍中。
因為這個原因,所以leave這個子命令才沒有一個“隊伍名稱”參數(shù),功能也不是退出指定隊伍而是使所選目標離開其所在的隊伍。
理想情況下,運行上面的join和leave子命令來對羊們進行隊伍歸屬操作,是能做到全體操作的。但在現(xiàn)實中,有些羊可能會因為種種原因(如處于非加載區(qū)塊中)而沒有被目標選擇器選中,導致它還在原本的隊伍。如果只有一兩只手抄一下UUID也沒關(guān)系,但如果是五只、六只甚至是幾十只呢?這時候你還會去抄嗎?
其實你并不需要抄那些UUID,你只需要用一條指令即可:
/scoreboard teams empty team
運行后,隊伍team中的所有成員就被清除掉了。這個empty子命令的作用就是這樣,清除指定隊伍中的所有成員。
上面的內(nèi)容均是Minecraft Java1.13扁平化更新前的內(nèi)容。那么1.13更新后呢?
/scoreboard teams被單獨的指令/team替代。好在,內(nèi)容基本保持不變,/team的格式和原本的teams子命令相差不大,唯一的一個重大改變是option(設(shè)置)子命令變成了modify(修飾)子命令,并且該子命令下面還多了兩個東西:prefix(前綴)和suffix(后綴)。當然,關(guān)于前后綴的內(nèi)容,我前面已經(jīng)說過了,第119章有講到。所以本章的內(nèi)容還是可以套到目前的最新版本當中的。
(注:隊伍顯示名稱的值在1.13及以上版本是JSON文本組件)
現(xiàn)在,我們已經(jīng)知道了如何使用add、list、remove、join、leave和empty這六個子命令,本章也差不多可以到這里結(jié)束了。下一章我們來了解一些高級一點的操作。
team的歷史:
Minecraft:Java
1.5——在記分板的基礎(chǔ)上加入了隊伍相關(guān)功能
1.8——現(xiàn)在非玩家也可以加入隊伍了(注意,1.8版本之前,僅玩家可以被計入記分板和加入隊伍)。同時加入了隊伍的相關(guān)準則、隊伍側(cè)邊欄顯示和nametagVisibility、deathMessageVisibility隊伍規(guī)則。
1.9——加入了collisionRule規(guī)則。
1.13——以指令/team替代了/scoreboard teams,同時將option改為modify。加入了 prefix和suffix。并且,隊伍顯示名現(xiàn)在是JSON文本了。