細 |
|||
85行目: | 85行目: | ||
ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。 | ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。 | ||
− | [[ | + | [[Image:スコアボード説明図1.jpg]] |
特定のプレイヤーのスコアをリセットするには、次のようにします。 | 特定のプレイヤーのスコアをリセットするには、次のようにします。 | ||
138行目: | 138行目: | ||
</pre> | </pre> | ||
− | [[ | + | [[Image:スコアボード説明図2.jpg]] |
2013年9月22日 (日) 18:03時点における版
スコアボードシステムの使い方
MinecraftのScoreboardシステムを、Bukkit API経由で使用する方法をまとめます。 このチュートリアルは、こちらの内容を参考に作成しています。
基本的に、Bukkit APIから使用できるScoreboardシステムは、 バニラのサーバーコマンド /scoreboard で実施できることとほとんど同じです。 このチュートリアルを理解するためには、/scoreboard コマンドを試して、 Scoreboardシステムの仕様をよく理解することが一番の近道です。 コマンドの使い方は、こちらやこちらを参考にしてみてください。
スコアボードシステムの基本的な使い方
まず、ScoreboardManager を取得します。
ScoreboardManager manager = Bukkit.getScoreboardManager();
次に、Scoreboard を取得します。
Scoreboard board = manager.getMainScoreboard();
Scoreboard に、新しいチームを登録します。
Team team = board.registerNewTeam("teamname");
そして、登録されたチームの設定をいろいろ変更します。
// プレイヤーを追加します。 team.addPlayer(player); // プレイヤーを削除します。 team.removePlayer(player); // prefixを登録します。これは、TABキーを押したときのプレイヤーリストと、 // 頭の上のプレイヤー名で、該当チームに所属するプレイヤーの名前の"前"に、 // 指定した文字列が付きます。 // 表示欄は狭いため、長い文字列を指定することは避けるべきです。 // なお、ChatColorによる装飾が指定可能です。 // 例)team.setPrefix(ChatColor.RED.toString()); team.setPrefix("prefix"); // prefixを登録します。これは、TABキーを押したときのプレイヤーリストと、 // 頭の上のプレイヤー名で、該当チームに所属するプレイヤーの名前の"後"に、 // 指定した文字列が付きます。 // なお、prefixでChatColorを使用した場合、suffixでRESETを指定することを推奨します。 // 例)team.setPrefix(ChatColor.RESET.toString()); team.setSuffix("suffix"); // チームの表示名を指定します。 team.setDisplayName("display name"); // チームメンバー同士の攻撃ができるかどうかを設定します。 // true で攻撃が有効になり、false で攻撃が無効になります。 team.setAllowFriendlyFire(false) // 透明化しているチームメンバーを見えるようにするかどうかを設定します。 // true で透明化しているチームメンバーが見えるようになり、 // false で誰からも見えなくなります。 team.setCanSeeFriendlyInvisibles(true);
"dummy"というCriteriaを設定して、"test"という名前の新しいObjectiveを作成します。
Objective objective = board.registerNewObjective("test", "dummy");
新しく登録したObjectiveの設定も、いろいろ変更してみましょう。
// Objective の表示名を設定します。 objective.setDisplayName("Display Name"); // Objectiveをどこに表示するかを設定します。 // SIDEBAR、PLAYER_LIST、BELOW_NAME が指定できます。 objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
特定のプレイヤーに対するObjectiveでの点数を設定します。
Score score = objective.getScore(player); score.setScore(42);
ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。 ファイル:スコアボード説明図1.jpg
特定のプレイヤーのスコアをリセットするには、次のようにします。
board.resetScores(player);
専用のスコアボードシステムの取得と設定
メインのScoreboardシステムを使用してしまうと、他で設定している得点内容を上書きしてしまったり、 Objectiveの名前が衝突してしまったりしないか、心配があります。
自身のプラグイン専用に、Scoreboardシステムを取得したい場合は、 最初のgetMainScoreboard()をgetNewScoreboard()にしてください。
Scoreboard board = manager.getNewScoreboard();
専用のScoreboardシステムでは、デフォルトで表示されません。 各プレイヤーの表示を設定するには、setScoreboardを使用してください。
for ( Player online : Bukkit.getOnlinePlayers() ) { online.setScoreboard(board); }
サイドバーでのカスタム項目の設定
サイドバーにObjectiveを設定している場合、ダミーのOfflinePlayerを登録することで、 カスタム項目を表示することが可能です。 カスタム項目のスコアを登録するには、次のようにします。
Score score = objective.getScore(Bukkit.getOfflinePlayer(name)); score.setScore(99);
カスタム項目のスコアをリセットするには、次のようにします。
board.resetScores(Bukkit.getOfflinePlayer(name));
例
Score score = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "kills:")); score.setScore(99);
簡単な実装例
各プレイヤーの頭の下に、現在の体力を表示します。 なお、Criteria に "health" を指定した場合、各プレイヤーの体力が増減するたびに、自動的に更新されます。 (プラグイン側から更新を実施する必要はありません。)
ScoreboardManager manager = Bukkit.getScoreboardManager(); Scoreboard board = manager.getNewScoreboard(); Objective objective = board.registerNewObjective("showhealth", "health"); objective.setDisplaySlot(DisplaySlot.BELOW_NAME); objective.setDisplayName("/ 20"); for(Player online : Bukkit.getOnlinePlayers()){ online.setScoreboard(board); online.setHealth(online.getHealth()); }