Minecraft中ScoreBoard的底層實現與擴充套件應用

wyuu101發表於2024-04-17

ScoreBoard計分板專題


本文章著重整理了Bukkit外掛開發中計分板的底層實現與工作原理,是作者個人經驗積累,之後會慢慢補充。

一、Bukkit對計分板的底層實現

1、概述:

(1)管理計分板

Bukkit中提供了一個用於管理計分板的類,總之要對計分板進行操作就要先獲取這個類。

ScoreboardManager scoreboardManager = Bukkit.getScoreboardManager();

(2)計分板分類

要對計分板進行操作,首先應該先了解一下底層是怎麼對計分板進行架構的,其實很簡單,伺服器中的有兩個“巨頭”,一個是主計分板,一個是玩家的個人計分板。

主計分板

可以理解為一個全域性共用的資訊,一個伺服器中所有人共用的資訊就存在主計分板上,尤其是起床戰爭這種團隊遊戲就要經常和它打交道。

獲取主計分板:

Scoreboard scoreboard = scoreboardManager.getMainScoreboard();
個人計分板

就是針對每個玩家的統計資訊,例如在一些PVP伺服器中,每個玩家在側邊欄看到自己的擊殺數都不一樣,實際上就是因為每個玩家都有自己的一塊計分板,是玩家“私有或者特有”的。

獲取個人計分板,通常一個玩家擁有一個計分板即可
新建計分板如下:

Scoreboard scoreboard = scoreboardManager.getNewScoreboard();

獲取已有計分板如下:

Scoreboard scoreboard = player.getScoreboard();

這裡注意:個人計分板還可分為三個部分,分別是側邊欄、名字下方、玩家列表,這三個其實都是同屬於一個計分板,只是他們的顯示位置不同,後面我們會詳細介紹。

2、個人計分板的編輯


在建立了個人計分板之後就需要對計分板進行一些修飾,本節介紹如何選擇三個不同顯示位置的計分板並修改他們顯示的內容。

(1) Objective類

簡單來講,側邊欄、名字下方、玩家列表這三個其實就是同屬於個人計分板下的三個不同的Objective類。

如果已有這些類,那就透過下面這條語句獲取:

Objective objective = scoreboard.getObjective(<DisplaySlot>)

這裡的DisplaySlot有三種,分別對應側邊欄、名字下方、玩家列表

如果沒有事先建立,那麼應該建立一個

Objective objective = scoreboard.registerNewObjective(<name>,<criteria>");

<name>是標識名稱,可以自己取,<criteria>是顯示準則,這裡詳細講一下:
<criteria>引數有這些,顧名思義,就不再解釋每個引數的含義;

需要注意的是,這些引數只有當顯示在名字下方時這些引數才生效。

objective.setDisplaySlot(DisplaySlot.BELOW_NAME);

所以我們一般<criteria>會填入"dummy",可以理解為空準則。

(2)分數Score

二、擴充套件應用TAB外掛及其相容性問題

三、內容補充

相關文章