(→スコアボードシステムの基本的な使い方) |
|||
101行目: | 101行目: | ||
最初のgetMainScoreboard()をgetNewScoreboard()にしてください。 | 最初のgetMainScoreboard()をgetNewScoreboard()にしてください。 | ||
− | < | + | <source lang = "java"> |
Scoreboard board = manager.getNewScoreboard(); | Scoreboard board = manager.getNewScoreboard(); | ||
− | </ | + | </source> |
専用のScoreboardシステムでは、デフォルトで表示されません。 | 専用のScoreboardシステムでは、デフォルトで表示されません。 | ||
各プレイヤーの表示を設定するには、setScoreboardを使用してください。 | 各プレイヤーの表示を設定するには、setScoreboardを使用してください。 | ||
− | < | + | <source lang = "java"> |
for ( Player online : Bukkit.getOnlinePlayers() ) { | for ( Player online : Bukkit.getOnlinePlayers() ) { | ||
online.setScoreboard(board); | online.setScoreboard(board); | ||
} | } | ||
− | </ | + | </source> |
121行目: | 121行目: | ||
カスタム項目のスコアを登録するには、次のようにします。 | カスタム項目のスコアを登録するには、次のようにします。 | ||
− | < | + | <source lang = "java"> |
Score score = objective.getScore(Bukkit.getOfflinePlayer(name)); | Score score = objective.getScore(Bukkit.getOfflinePlayer(name)); | ||
score.setScore(99); | score.setScore(99); | ||
− | </ | + | </source> |
カスタム項目のスコアをリセットするには、次のようにします。 | カスタム項目のスコアをリセットするには、次のようにします。 | ||
− | < | + | <source lang = "java"> |
board.resetScores(Bukkit.getOfflinePlayer(name)); | board.resetScores(Bukkit.getOfflinePlayer(name)); | ||
− | </ | + | </source> |
例 | 例 | ||
− | < | + | <source lang = "java"> |
Score score = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "kills:")); | Score score = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "kills:")); | ||
score.setScore(99); | score.setScore(99); | ||
− | </ | + | </source> |
[[Image:scoreboard2.png]] | [[Image:scoreboard2.png]] | ||
148行目: | 148行目: | ||
(プラグイン側から更新を実施する必要はありません。) | (プラグイン側から更新を実施する必要はありません。) | ||
− | < | + | <source lang = "java"> |
ScoreboardManager manager = Bukkit.getScoreboardManager(); | ScoreboardManager manager = Bukkit.getScoreboardManager(); | ||
Scoreboard board = manager.getNewScoreboard(); | Scoreboard board = manager.getNewScoreboard(); | ||
160行目: | 160行目: | ||
online.setHealth(online.getHealth()); | online.setHealth(online.getHealth()); | ||
} | } | ||
− | </ | + | </source> |
2013年9月28日 (土) 04:42時点における版
スコアボードシステムの使い方
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()); }