計分板(Scoreboard)系統是一套透過指令操縱的複雜遊戲機制。主要為地圖作者與伺服器運營者準備,計分板可用多種形式追蹤、設定並列出玩家及實體的分數。
計分項[]
原文 | 遊戲內譯名 | 遊戲曾用譯名 | 社群常見譯名 |
---|---|---|---|
Objective | 目標 | - | 變數、計分項 |
Criteria | 條件 | - | 判據、準則 |
Trigger | 觸發項目 | - | 觸發器 |
(Display) Slot | (顯示)區 | - | 顯示位置 |
每一個計分項(Objective,遊戲內叫「計分板目標」)都含有名稱、顯示名稱、準則。計分板可以跟蹤實體的分數(points),範圍為-2,147,483,648至2,147,483,647,且只取整數,因為這幾個變數的資料類型是整型。
計分項的名稱(name)在指令、目標選擇器以及檔案格式中使用。這一變數區分大小寫並且只能為一個單詞,在Java版中,允許用於名稱的字元有所有的大小寫字母、數字、下劃線、點、減號和加號。在基岩版中,可以是任何字元。
顯示名稱(display name)是一串JSON文字,用於在不同場合進行顯示。多個計分項可以有相同的顯示名稱。
計分項的準則(criterion,複數為criteria,遊戲內叫「條件」)決定了其行為,也就是要跟蹤什麼。下方的表格列舉了所有的準則。
玩家任何計分項的分數(score)都可以透過指令進行修改,只讀型除外。可以增加或減少特定的值,也可以直接設定成某一特定值。對於基於統計與成就的計分項,其數值可用指令修改,但真實的統計不會改變。計分項在統計改變後將繼續更新。
分數持有者(score holder)是在計分項中有分數的玩家的名字或者實體的UUID。非玩家實體的分數只能透過指令修改,而不能透過遊戲時間修改。和玩家不同,非玩家實體死亡後,其分數被刪除。
指令可以透過目標選擇器的scores
參數來檢查任何實體的任何計分項,語法為scores={名稱=最小值..最大值}
比如,在指令方塊中輸入/execute if entity @a[scores={deaths=1..5}]
會讓比較器或條件制約的指令方塊在有玩家的死亡次數在1至5之間時提供輸出(假設deaths使用deathCount準則)
準則[]
Java版[]
單一準則[]
這些準則的名稱由單一字母字串組成。
準則名稱 | 描述 | 能否被修改 |
---|---|---|
dummy 虛擬型 |
只能透過指令修改分數,諸如死亡等遊戲行為並不能修改分數。這可以被用來模擬事件標記、狀態映射和貨幣等。 | 是 |
trigger 觸發器 |
只能透過指令修改分數,諸如死亡等遊戲行為並不能修改分數。/trigger 能夠用於設定/增減使用trigger作準則的計分項。如果以trigger為準則的計分項沒有對玩家啟用,則該玩家使用該/trigger 指令會失敗。成功使用過一次/trigger 成功之後,該玩家的該指令將重新被關閉。注意/trigger 可以在不允許作弊的情況下被非管理員的普通玩家使用。這可以比較方便地透過/tellraw 介面來實現玩家輸入。
|
是 |
deathCount 死亡次數 |
當玩家死亡時,分數會自動增加。 | 是 |
playerKillCount 殺死玩家總量 |
當玩家殺死其他玩家時分數會自動增加。 | 是 |
totalKillCount 殺死生物總量 |
當玩家殺死其他生物時分數會自動增加。 | 是 |
health 生命值 |
普通玩家會在0~20之間。代表玩家擁有紅心數量的兩倍。在玩家第一次改變血量前會顯示為0。額外的血或者吸收的血也會計算在血量中,也就是說當獲得了屬性或者修飾器,或者吸收、生命值提升的效果後生命值可以超過20。 | 否 |
xp 經驗值 |
對應玩家擁有的經驗值。 | 否 |
level 等級 |
對應玩家目前的經驗等級。 | 否 |
food 飽食度 |
在0~20之間,代表玩家擁有的飽食度。在玩家第一次改變飽食度前會顯示為0。 | 否 |
air 空氣值 |
在0~300之間;代表潛水的玩家剩餘的空氣,對應玩家的空氣NBT標籤。 | 否 |
armor 盔甲值 |
在0~20之間;代表玩家擁有的盔甲值。在玩家第一次更換盔甲前會顯示為0。 | 否 |
複合準則[]
[1]有些準則使用了統計和成就系統來組成複合準則。[2]不同於上面的簡單準則,複合準則有多個部分,使用點號來分隔(.)。例如 「minecraft.killed_by:minecraft.zombie」是一種複合準則,當玩家被殭屍殺死的時候才會增加。[3]
除此之外,還有以下複合準則:
準則基礎名稱 | 描述 | 次級準則數 | ||
---|---|---|---|---|
teamkill. |
次級準則是隊伍的顏色。玩家殺死特定顏色的隊伍成員時增加。 這些準則符合以下完整格式:
|
16 | ||
killedByTeam. | 次級準則包括隊伍的顏色。玩家被特定顏色隊伍的成員殺死時增加。
這些準則符合以下完整格式:
|
16 | ||
minecraft.custom | 次級準則包括多個目標。這些準則符合以下完整格式:minecraft.custom:<objective> ,其中<objective> 是列表中的一個目標。 |
|||
minecraft.picked_up | 次級準則包括所有物品的所有命名空間ID,其中冒號替換為點號。玩家撿起掉落的物品時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.dropped | 次級準則包括所有物品的所有命名空間ID,其中冒號替換為點號。玩家丟棄指定的物品時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.used | 次級準則包括所有物品的所有命名空間ID,其中冒號替換為點號。玩家使用指定的物品時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.broken | 次級準則包括所有物品的所有命名空間ID,其中冒號替換為點號。玩家破壞(break)指定的物品時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.crafted | 次級準則包括所有物品的所有命名空間ID,其中冒號替換為點號。玩家合成指定的物品時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.mined | 次級準則包括所有方塊的所有命名空間ID,其中冒號替換為點號。玩家挖掘(mine)指定的方塊時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.killed | 次級準則包括所有實體的所有命名空間ID,其中冒號替換為點號。玩家殺死指定的實體時分數增加。
這些準則符合以下完整格式: |
|||
minecraft.killed_by | 次級準則包括所有實體的所有命名空間ID,其中冒號替換為點號。玩家被指定的實體殺死時分數增加。
這些準則符合以下完整格式: |
基於複合準則的所有分數都可以透過指令修改。
基岩版[]
目前只支持dummy
準則,因此分數僅能由指令修改。
顯示位置[]
透過/scoreboard objectives setdisplay
指令(參見計分項指令),玩家具體計分項中的分數能在遊戲中以某些「形式」顯示出來。
每個「顯示位置(Display Slot)」可以依次顯示一個計分項,並且多個顯示位置可以被用於相同或不同的計分項。
顯示位置 | 描述 |
---|---|
list 列表 |
在玩家列表中以黃色文字在玩家名稱後顯示分數資訊(預設為Tab鍵),並不會顯示計分項名稱。 在暫停頁面的玩家列表顯示分數資訊。 |
sidebar 側邊欄 |
在畫面的右側顯示。在列表的最上方顯示計分項的顯示名稱(display name),並顯示玩家的高分榜。值得注意的是,即使玩家離線,如果在該計分項下存在一定分數也會在「側邊欄」中進行顯示,並且沒有痕跡的玩家也不會被顯示。除此之外,以#開頭的偽造的玩家名稱在任何情況下都不會在側邊欄可見。 |
sidebar.team.<color> 側邊欄.隊伍.<顏色> |
有16個的具體隊伍的側邊欄顯示形式。它們和標準的側邊欄同樣操作,但只有指定顏色的隊伍中的玩家可以看見(例如"sidebar.team.green"綠色隊伍中的玩家可以看見)。有效的顏色是:"black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow", 和 "white"。 |
below_name belowname 名稱下方 |
在玩家的名稱牌之下,在他們的頭之上,於計分項的顯示名稱(display name)後面顯示分數。在10個方塊以外、玩家潛行時隱藏。這一顯示位置在單人遊戲中不可見。 |
指令列表[]
計分項指令[]
指令 | 描述 | 結果 |
---|---|---|
scoreboard objectives list | 列出所有存在的計分項、顯示名稱與準則。 | 在Java版中,總是成功。在基岩版中,如果沒有計分項則失敗。 |
scoreboard objectives add <計分項> <準則> [<顯示名稱>] scoreboard objectives add <計分項:字串> dummy [顯示名稱:字串] |
建立一個具有給定的名稱、準則、可選的顯示名稱的計分項。<记分项> 必須是小於16個字元的純文字;在基岩版中,還可以被引號包圍。<准则> 必須是有效的準則類型。<顯示名稱> 必須是原始JSON文字,如果未指定,預設為<objective> ;在基岩版中,它還可以是非數字的純文字。所有的參數均區分大小寫。在基岩版中,dummy是目前唯一支持的額準則。參考上面的段落以參考這些參數的更多資訊 |
如果<計分項> 已存在則失敗。
|
scoreboard objectives remove <計分項> scoreboard objectives remove <計分項:字串> |
刪除計分板系統中該計分項的所有有關內容。計分項、玩家分數的資料都會被刪除,且如果計分項在顯示位置上,該顯示位置將會被清空。 | 如果<計分項> 不存在則失敗。
|
scoreboard objectives setdisplay <位置> [<計分項>] scoreboard objectives setdisplay <list|sidebar> [记分项:字符串] [ascending|descending] scoreboard objectives setdisplay belowname [計分項:字串] |
在指定位置顯示指定計分項的分數資訊。合法的位置已在顯示位置裡列出並描述。在基岩版中,如果位置是list 或sidebar ,則還有可選的參數ascending|descending 來指定排序順序。注意計分項參數是可選的,如果不提供,則該顯示位置會被清空(回到其預設狀態)。 |
如果指定了<計分項> 但它存在則失敗。注意清空位置也算成功。
|
scoreboard objectives modify <計分項> displayname <名稱> | 變更顯示未知中計分板的顯示名稱。 | 被指定的計分項必須存在。名稱必須是JSON文字組件。 |
scoreboard objectives modify <計分項> rendertype (hearts|integer) | 在列表將計分項<計分項>的數值以愛心(hearts)或數字(integer)顯示。 | 被指定的計分項必須存在。 |
玩家指令[]
指令 | 描述 | 成功條件 |
---|---|---|
scoreboard players list [目標] | 顯示所有被計分板系統追蹤的實體。可選的實體名稱參數項可用以顯示指定實體的所有分數,且往目標填寫*(星號)會顯示所有正被計分板跟蹤的實體。 | 如果需要指定,填寫的目標必須記有分數。如果不填寫目標,至少需要有一個實體正被計分板系統追蹤。 |
scoreboard players get <目標> <計分項> |
顯示該實體在計分項上的分數。 | 目標只能是一個實體,至少需要有一個實體正被計分板系統追蹤。 |
scoreboard players set <目標> <計分項> <分數> | 設定實體目標在計分項計分項上的分數為分數,並在已有分數存在時覆蓋之。*可以用於目標項以代表所有正在被計分板追蹤的實體。 | 填寫的計分項必須存在且不是只讀型,分數必須介於-2147483648到 2147483647之間,兩個數字包括在內。需要注意目標項的實體或玩家不一定要線上甚至是存在。 |
scoreboard players add <目標> <計分項> <數量> | 往實體目標在計分項計分項上的分數增加數量分。如果沒有分數則當作0分修改。*可用以代表所有正在被計分板追蹤的實體。 | 計分項必須存在且不能為只讀型,數量必須在1到2147483647之間,兩個數字包括在內。需要注意目標項的實體或玩家不一定要線上甚至是存在。 |
scoreboard players remove <目標> <計分項> <數量> | 從實體目標在計分項計分項上的分數扣除數量分。如果沒有分數則當作0分修改。*可用以代表所有正在被計分板追蹤的實體。 | |
scoreboard players random <目標> <計分項> <最小值> <最大值> |
把實體目標在計分項上的分數設為一個從最小值到最大值的隨機數,包含最大最小值。 | <計分項>和<目標>必須存在, <最小值> 必須小於<最大值>,且<最小值> 和<最大值>都必須在-2147483648到2147483647之間(包含) |
scoreboard players reset <目標> [計分項] | 清空實體目標的一項或所有分數。如果指定了計分項計分項,只清空對應計分項的分數;否則刪除實體所有計分項上的分數。需要注意這不只是設分數為0:實體將會整個從計分板上被移除(或從給定的計分項)。*可用以代表所有正在被計分板追蹤的實體。 | 總會成功,即便實體在該計分項中並沒有分數。 |
scoreboard players test <目標> <計分項> <最小值> <最大值> |
檢測計分項是否在最小值和最大值範圍內(若不填,預設最大值為整型數最大值2147483647)。最小值和最大值可替換為星號(*),以表示整型數範圍內的任何值(-2147483648 ~ 2147483647)。 | 在 <目標>的 <計分項>上的分數在<最小值> 和 [<最大值>]之間時成功. |
scoreboard players enable <目標> <觸發器> |
使實體目標可以對指定觸發型計分項觸發器使用指令/trigger 。在此操作完成前,實體目標對計分項使用/trigger 時將會失敗。一旦實體對計分項使用了/trigger ,計分項將再次變得不可操作,需要再次使用此指令。*可用以代表所有正在被計分板追蹤的實體。 |
填寫的觸發器必須是一個準則類型為trigger的計分項。 |
scoreboard players operation <目標> <目標計分項> <操作> <選擇器> <計分項> | 使用選擇器在計分項計分項上的分數作為輸入,進行運算操作後把結果作為計分項實體目標在目標計分項上的分數。
運算操作<操作> 可以是:
除><外,計分項的分數會保持不變。"*"可代替目標和選擇器中的一個用以代表所有正在被計分板追蹤的實體。 |
填寫的計分項與目標計分項 必須存在,目標計分項必須支持修改,且所有被使用的計分項/選擇器必須在對應計分項上有分數並且運算操作只有在計分項和選擇器都存在時才會成功。需要注意目標實體不一定要存在。 若<操作>為"/=",<計分項>的分數值不能為0。 |
NBT格式[]
計分板資料儲存在地圖資料夾裡「data」資料夾下的scoreboard.dat檔案中,儲存形式為GZip的NBT格式。
- 根標籤。
- data:計分板資料。
- DisplaySlots:顯示特定計分項的顯示位置設定。如果一個位置上沒有需要顯示的計分項,則對應位置的標籤不存在。
- slot_0:"list"位置顯示的計分項的內部名稱。
- slot_1:"sidebar"位置顯示的計分項的內部名稱。
- slot_2:"belowName"位置顯示的計分項的內部名稱。
- slot_3:"sidebar.team.black"位置顯示的計分項的內部名稱。
- slot_4:"sidebar.team.dark_blue"位置顯示的計分項的內部名稱。
- slot_5:"sidebar.team.dark_green"位置顯示的計分項的內部名稱。
- slot_6:"sidebar.team.dark_aqua"位置顯示的計分項的內部名稱。
- slot_7:"sidebar.team.dark_red"位置顯示的計分項的內部名稱。
- slot_8:"sidebar.team.dark_purple"位置顯示的計分項的內部名稱。
- slot_9:"sidebar.team.gold"位置顯示的計分項的內部名稱。
- slot_10:"sidebar.team.gray"位置顯示的計分項的內部名稱。
- slot_11:"sidebar.team.dark_gray"位置顯示的計分項的內部名稱。
- slot_12:"sidebar.team.blue"位置顯示的計分項的內部名稱。
- slot_13:"sidebar.team.green"位置顯示的計分項的內部名稱。
- slot_14:"sidebar.team.aqua"位置顯示的計分項的內部名稱。
- slot_15:"sidebar.team.red"位置顯示的計分項的內部名稱。
- slot_16:"sidebar.team.light_purple"位置顯示的計分項的內部名稱。
- slot_17:"sidebar.team.yellow"位置顯示的計分項的內部名稱。
- slot_18:"sidebar.team.white"位置顯示的計分項的內部名稱。
- Objectives:目前所有計分項的列表。
- :一個計分項。
- CriteriaName:該計分項的準則。
- DisplayName:計分項的顯示名稱,是一個JSON文字。如果在建立計分項時沒有定義,則會為
{"text":"計分板內部名稱"}
。 - Name:計分項的內部名稱。
- RenderType:資料儲存的類型。可以為
integer
(整型)和hearts
(心)。預設為integer
。
- :一個計分項。
- PlayerScores:在計分板系統中玩家和對應分數的列表。
- :擁有分數的玩家及計分項。
- Locked:代表計分項是否處於鎖定狀態。只有計分項準則為"trigger"(觸發器)時有實際用途:在玩家使用
/trigger
對計分項操作前此值必須為false。 - Name:計分項中擁有此分數的玩家名稱。
- Objective:玩家分數所在計分項的內部名稱。
- Score:此計分項中玩家的分數。
- Locked:代表計分項是否處於鎖定狀態。只有計分項準則為"trigger"(觸發器)時有實際用途:在玩家使用
- :擁有分數的玩家及計分項。
- Teams:所有隊伍的列表。
- :一個隊伍。
- AllowFriendlyFire:表示隊伍內的玩家是否可以攻擊同一個隊伍的玩家。
- CollisionRule:隊伍內的玩家互相碰撞的規則。可以為
always
(總是進行碰撞)、never
(不進行碰撞)、pushOtherTeams
(可以與其他隊伍碰撞)和pushOwnTeam
(只與本隊成員碰撞)。 - DeathMessageVisibility:隊伍內玩家死亡訊息的可見性。可以為
always
(總能看到)、never
(不能看到)、hideForOtherTeams
(對其他隊伍隱藏)和hideForOwnTeam
(對自身隊伍隱藏)。 - DisplayName:隊伍的顯示名稱,是一個JSON文字。如果在建立隊伍時沒有涉及,則使用下文中的名稱標籤。
- MemberNamePrefix:加在隊員的名稱前的前綴,是一個JSON文字。
- MemberNameSuffix:加在隊員的名稱後的後綴,是一個JSON文字。
- Name:隊伍的內部名稱。
- NameTagVisibility:隊伍內玩家名稱標籤的可見性。可以為
always
(總能看到)、never
(不能看到)、hideForOtherTeams
(對其他隊伍隱藏)和hideForOwnTeam
(對自身隊伍隱藏)。 - Players:隊伍中玩家名字的列表。
- :隊伍中玩家的名字。
- SeeFriendlyInvisibles:表示隊伍內的玩家是否可以看到同一隊伍的隱形的玩家。
- TeamColor:隊伍顏色的文字名(black、dark_blue,等等)。未設定顏色時不存在。
- :一個隊伍。
- DisplaySlots:顯示特定計分項的顯示位置設定。如果一個位置上沒有需要顯示的計分項,則對應位置的標籤不存在。
- DataVersion:資料版本。
- data:計分板資料。
歷史[]
Java版 | |||||
---|---|---|---|---|---|
1.5 | 13w04a | 加入了計分板。 | |||
13w05a | 加入了隊伍相關功能。 | ||||
1.7.2 | 13w36a | 加入了統計相關計分項準則。 | |||
1.8 | 14w02a | 除了玩家外的實體也能加入隊伍並擁有計分項分數了。 | |||
14w06a | 加入了trigger 隊伍擊殺相關計分項準則。
| ||||
加入了/scoreboard players enable 指令。 | |||||
"*" 可以用作玩家名稱參數代表所有正被計分板追蹤的玩家了。 | |||||
為/scoreboard players reset 指令加入了objective 參數。 | |||||
統計計分項準則使用ID名而不使用ID了。 | |||||
加入了achievement.overpowered 計分項準則。 | |||||
14w07a | 加入了/scoreboard players operation 與scoreboard players test 指令。
| ||||
以"#"開頭的虛擬玩家的分數不再顯示於側邊欄。 | |||||
加入了指定隊伍的側邊欄顯示位置。 | |||||
加入了nametagVisibility 隊伍選項。 | |||||
14w10a | 加入了deathMessageVisibility 隊伍選項。
| ||||
為/scoreboard players set 、/scoreboard players add 和/scoreboard players remove 指令加入了dataTag 參數。 | |||||
加入了stat.crouchOneCm 、stat.sprintOneCm 和stat.timeSinceDeath 計分項準則。 | |||||
14w25a | 為/scoreboard players operation 指令加入了= 、< 和> 。 | ||||
14w29a | 玩家/實體在側邊欄名字的第二順序依照字母表儲存。 | ||||
14w30a | 加入了stat.talkedToVillager 和stat.tradedWithVillager 計分項準則。 | ||||
? | 為/scoreboard players operation 加入了>< 。 | ||||
1.8.2 | 加入了cauldronFilled 、stat.cauldronUsed 、stat.armorCleaned 、stat.bannerCleaned 、stat.brewingstandInteraction 、stat.beaconInteraction 、stat.dropperInspected 、stat.hopperInspected 、stat.dispenserInspected 、stat.noteblockPlayed 、stat.noteblockTuned 、stat.flowerPotted 、stat.trappedChestTriggered 、stat.enderchestOpened 、stat.itemEnchanted 、stat.recordPlayed 、stat.furnaceInteraction 、stat.craftingTableInteraction 和stat.chestOpened 計分項準則。 | ||||
1.9 | 15w32a | 加入了stat.sneakTime 計分項準則。 | |||
15w32b | 加入了/scoreboard players tag 指令。
| ||||
加入了xp 、food 和air 計分項類型。 | |||||
15w33a | 加入了stat.pickup 和stat.drop 計分項準則。
| ||||
加入了armor 和level 計分項類型。 | |||||
15w36a | 加入了collisionRule 。 | ||||
1.13 | ? | 計分板名稱不能再包含: 等字元。 | |||
17w45a | 移除了/scoreboard players tag 和/scoreboard teams ,分別被/tag 和/team 替代。 | ||||
pre7 | 加入了/scoreboard objectives modify 。 | ||||
1.13.1 | 18w31a | 計分板的計算符號%= 從% 被變更為Math.floorMod 。 | |||
1.18 | 21w37a | 取消了計分板名稱與分數持有者的16個字元的長度限制。 | |||
1.20.2 | 23w31a | 將顯示位置belowName 重新命名為below_name 。 | |||
基岩版 | |||||
1.7.0 | 1.7.0.2 | 加入了計分板部分功能。 | |||
加入了dummy 準則。 | |||||
1.19.80 | 1.19.80.20 | 取消了計分項的16個字元的長度限制。 |
參考[]
語言