(→スコアボードシステムの基本的な使い方) |
|||
13行目: | 13行目: | ||
まず、ScoreboardManager を取得します。 | まず、ScoreboardManager を取得します。 | ||
− | < | + | <source lang = "java"> |
ScoreboardManager manager = Bukkit.getScoreboardManager(); | ScoreboardManager manager = Bukkit.getScoreboardManager(); | ||
− | </ | + | </source> |
次に、Scoreboard を取得します。 | 次に、Scoreboard を取得します。 | ||
− | < | + | <source lang = "java"> |
Scoreboard board = manager.getMainScoreboard(); | Scoreboard board = manager.getMainScoreboard(); | ||
− | </ | + | </source> |
Scoreboard に、新しいチームを登録します。 | Scoreboard に、新しいチームを登録します。 | ||
− | < | + | <source lang = "java"> |
Team team = board.registerNewTeam("teamname"); | Team team = board.registerNewTeam("teamname"); | ||
− | </ | + | </source> |
そして、登録されたチームの設定をいろいろ変更します。 | そして、登録されたチームの設定をいろいろ変更します。 | ||
− | < | + | <source lang = "java"> |
// プレイヤーを追加します。 | // プレイヤーを追加します。 | ||
team.addPlayer(player); | team.addPlayer(player); | ||
61行目: | 61行目: | ||
// false で誰からも見えなくなります。 | // false で誰からも見えなくなります。 | ||
team.setCanSeeFriendlyInvisibles(true); | team.setCanSeeFriendlyInvisibles(true); | ||
− | </ | + | </source> |
"dummy"というCriteriaを設定して、"test"という名前の新しいObjectiveを作成します。 | "dummy"というCriteriaを設定して、"test"という名前の新しいObjectiveを作成します。 | ||
− | < | + | <source lang = "java"> |
Objective objective = board.registerNewObjective("test", "dummy"); | Objective objective = board.registerNewObjective("test", "dummy"); | ||
− | </ | + | </source> |
新しく登録したObjectiveの設定も、いろいろ変更してみましょう。 | 新しく登録したObjectiveの設定も、いろいろ変更してみましょう。 | ||
− | < | + | <source lang = "java"> |
// Objective の表示名を設定します。 | // Objective の表示名を設定します。 | ||
objective.setDisplayName("Display Name"); | objective.setDisplayName("Display Name"); | ||
76行目: | 76行目: | ||
// SIDEBAR、PLAYER_LIST、BELOW_NAME が指定できます。 | // SIDEBAR、PLAYER_LIST、BELOW_NAME が指定できます。 | ||
objective.setDisplaySlot(DisplaySlot.BELOW_NAME); | objective.setDisplaySlot(DisplaySlot.BELOW_NAME); | ||
− | </ | + | </source> |
特定のプレイヤーに対するObjectiveでの点数を設定します。 | 特定のプレイヤーに対するObjectiveでの点数を設定します。 | ||
− | < | + | <source lang = "java"> |
Score score = objective.getScore(player); | Score score = objective.getScore(player); | ||
score.setScore(42); | score.setScore(42); | ||
− | </ | + | </source> |
ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。 | ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。 | ||
89行目: | 89行目: | ||
特定のプレイヤーのスコアをリセットするには、次のようにします。 | 特定のプレイヤーのスコアをリセットするには、次のようにします。 | ||
− | < | + | <source lang = "java"> |
board.resetScores(player); | board.resetScores(player); | ||
− | </ | + | </source> |
− | |||
=専用のスコアボードシステムの取得と設定= | =専用のスコアボードシステムの取得と設定= |
2013年9月25日 (水) 16:51時点における版
スコアボードシステムの使い方
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);
ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。
特定のプレイヤーのスコアをリセットするには、次のようにします。
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()); }