提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
8行目: 8行目:
 
このチュートリアルを理解するためには、/scoreboard コマンドを試して、
 
このチュートリアルを理解するためには、/scoreboard コマンドを試して、
 
Scoreboardシステムの仕様をよく理解することが一番の近道です。
 
Scoreboardシステムの仕様をよく理解することが一番の近道です。
コマンドの使い方は、[http://ch.nicovideo.jp/minecrafter/blomaga/ar95807 こちら]や[http://www.nicovideo.jp/watch/sm20410540 こちら]を参考にしてみて
+
コマンドの使い方は、[http://ch.nicovideo.jp/minecrafter/blomaga/ar95807 こちら]や[http://www.nicovideo.jp/watch/sm20410540 こちら]を参考にしてみてください。
  
=スコアボードシステムの基本的な使い方!=
+
=スコアボードシステムの基本的な使い方=
  
 
まず、ScoreboardManager を取得します。
 
まず、ScoreboardManager を取得します。
<source lang = "java">
+
<pre>
 
ScoreboardManager manager = Bukkit.getScoreboardManager();
 
ScoreboardManager manager = Bukkit.getScoreboardManager();
</source>
+
</pre>
  
 
次に、Scoreboard を取得します。
 
次に、Scoreboard を取得します。
<source lang = "java">
+
<pre>
 
Scoreboard board = manager.getMainScoreboard();
 
Scoreboard board = manager.getMainScoreboard();
</source>
+
</pre>
  
 
Scoreboard に、新しいチームを登録します。
 
Scoreboard に、新しいチームを登録します。
<source lang = "java">
+
<pre>
 
Team team = board.registerNewTeam("teamname");
 
Team team = board.registerNewTeam("teamname");
</source>
+
</pre>
  
 
そして、登録されたチームの設定をいろいろ変更します。
 
そして、登録されたチームの設定をいろいろ変更します。
<source lang = "java">
+
<pre>
 
// プレイヤーを追加します。
 
// プレイヤーを追加します。
 
team.addPlayer(player);
 
team.addPlayer(player);
43行目: 43行目:
 
team.setPrefix("prefix");
 
team.setPrefix("prefix");
  
// suffixを登録します。これは、TABキーを押したときのプレイヤーリストと、
+
// prefixを登録します。これは、TABキーを押したときのプレイヤーリストと、
 
// 頭の上のプレイヤー名で、該当チームに所属するプレイヤーの名前の"後"に、
 
// 頭の上のプレイヤー名で、該当チームに所属するプレイヤーの名前の"後"に、
 
// 指定した文字列が付きます。
 
// 指定した文字列が付きます。
55行目: 55行目:
 
// チームメンバー同士の攻撃ができるかどうかを設定します。
 
// チームメンバー同士の攻撃ができるかどうかを設定します。
 
// true で攻撃が有効になり、false で攻撃が無効になります。
 
// true で攻撃が有効になり、false で攻撃が無効になります。
team.setAllowFriendlyFire(false);
+
team.setAllowFriendlyFire(false)
  
 
// 透明化しているチームメンバーを見えるようにするかどうかを設定します。
 
// 透明化しているチームメンバーを見えるようにするかどうかを設定します。
61行目: 61行目:
 
// false で誰からも見えなくなります。
 
// false で誰からも見えなくなります。
 
team.setCanSeeFriendlyInvisibles(true);
 
team.setCanSeeFriendlyInvisibles(true);
</source>
+
</pre>
  
 
"dummy"というCriteriaを設定して、"test"という名前の新しいObjectiveを作成します。
 
"dummy"というCriteriaを設定して、"test"という名前の新しいObjectiveを作成します。
<source lang = "java">
+
<pre>
 
Objective objective = board.registerNewObjective("test", "dummy");
 
Objective objective = board.registerNewObjective("test", "dummy");
</source>
+
</pre>
  
 
新しく登録したObjectiveの設定も、いろいろ変更してみましょう。
 
新しく登録したObjectiveの設定も、いろいろ変更してみましょう。
<source lang = "java">
+
<pre>
 
// 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>
+
</pre>
  
 
特定のプレイヤーに対するObjectiveでの点数を設定します。
 
特定のプレイヤーに対するObjectiveでの点数を設定します。
<source lang = "java">
+
<pre>
// ※ CraftBukkit 1.7.5 以前の場合
 
 
Score score = objective.getScore(player);
 
Score score = objective.getScore(player);
 
score.setScore(42);
 
score.setScore(42);
 
+
</pre>
// ※ CraftBukkit 1.7.8 以降の場合は、getScoreメソッドにはStringを使ってください。
 
Score score = objective.getScore(player.getName());
 
score.setScore(42);
 
</source>
 
  
 
ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。
 
ここまでを実装して設定することで、下のスクリーンショットのように表示が確認できていると思います。
94行目: 89行目:
  
 
特定のプレイヤーのスコアをリセットするには、次のようにします。
 
特定のプレイヤーのスコアをリセットするには、次のようにします。
<source lang = "java">
+
<pre>
// ※ CraftBukkit 1.7.5 以前の場合
 
 
board.resetScores(player);
 
board.resetScores(player);
 +
</pre>
  
// ※ CraftBukkit 1.7.8 以降の場合
 
board.resetScores(player.getName());
 
</source>
 
  
 
=専用のスコアボードシステムの取得と設定=
 
=専用のスコアボードシステムの取得と設定=
110行目: 102行目:
 
最初のgetMainScoreboard()をgetNewScoreboard()にしてください。
 
最初のgetMainScoreboard()をgetNewScoreboard()にしてください。
  
<source lang = "java">
+
<pre>
 
Scoreboard board = manager.getNewScoreboard();
 
Scoreboard board = manager.getNewScoreboard();
</source>
+
</pre>
  
 
専用のScoreboardシステムでは、デフォルトで表示されません。
 
専用のScoreboardシステムでは、デフォルトで表示されません。
各プレイヤーに、自分のプラグインで作成したスコアボードを表示したい時は、setScoreboardを使用してスコアボードを設定してください。
+
各プレイヤーの表示を設定するには、setScoreboardを使用してください。
  
<source lang = "java">
+
<pre>
for ( Player player : Bukkit.getOnlinePlayers() ) {
+
for ( Player online : Bukkit.getOnlinePlayers() ) {
     player.setScoreboard(board);
+
     online.setScoreboard(board);
 
}
 
}
</source>
+
</pre>
  
  
 
=サイドバーでのカスタム項目の設定=
 
=サイドバーでのカスタム項目の設定=
  
サイドバーにObjectiveを設定している場合、ダミーの項目を登録することで、
+
サイドバーにObjectiveを設定している場合、ダミーのOfflinePlayerを登録することで、
 
カスタム項目を表示することが可能です。
 
カスタム項目を表示することが可能です。
 
カスタム項目のスコアを登録するには、次のようにします。
 
カスタム項目のスコアを登録するには、次のようにします。
  
<source lang = "java">
+
<pre>
// ※ CraftBukkit 1.7.5 以前の場合は、OfflinePlayerを生成して設定してください。
 
 
Score score = objective.getScore(Bukkit.getOfflinePlayer(name));
 
Score score = objective.getScore(Bukkit.getOfflinePlayer(name));
 
score.setScore(99);
 
score.setScore(99);
 
+
</pre>
// ※ CraftBukkit 1.7.8 以降の場合は、そのままStringを指定してください。
 
Score score = objective.getScore(name);
 
score.setScore(99);
 
</source>
 
  
 
カスタム項目のスコアをリセットするには、次のようにします。
 
カスタム項目のスコアをリセットするには、次のようにします。
<source lang = "java">
+
<pre>
// ※ CraftBukkit 1.7.5 以前の場合
 
 
board.resetScores(Bukkit.getOfflinePlayer(name));
 
board.resetScores(Bukkit.getOfflinePlayer(name));
 
+
</pre>
// ※ CraftBukkit 1.7.8 以降の場合
 
board.resetScores(name);
 
</source>
 
  
  
 
 
<source lang = "java">
+
<pre>
// ※ CraftBukkit 1.7.8 以降の場合
+
Score score = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "kills:"));
Score score = objective.getScore(ChatColor.GREEN + "kills:");
 
 
score.setScore(99);
 
score.setScore(99);
</source>
+
</pre>
  
 
[[Image:scoreboard2.png]]
 
[[Image:scoreboard2.png]]
 +
 +
  
 
=簡単な実装例=
 
=簡単な実装例=
  
==体力表示プラグイン==
+
各プレイヤーの頭の下に、現在の体力を表示します。
各プレイヤーの頭の上に、現在の体力を表示します。
 
 
なお、Criteria に "health" を指定した場合、各プレイヤーの体力が増減するたびに、自動的に更新されます。
 
なお、Criteria に "health" を指定した場合、各プレイヤーの体力が増減するたびに、自動的に更新されます。
 
(プラグイン側から更新を実施する必要はありません。)
 
(プラグイン側から更新を実施する必要はありません。)
  
<source lang = "java">
+
<pre>
import org.bukkit.Bukkit;
+
ScoreboardManager manager = Bukkit.getScoreboardManager();
import org.bukkit.entity.Player;
+
Scoreboard board = manager.getNewScoreboard();
import org.bukkit.event.Listener;
 
import org.bukkit.plugin.java.JavaPlugin;
 
import org.bukkit.scoreboard.DisplaySlot;
 
import org.bukkit.scoreboard.Objective;
 
import org.bukkit.scoreboard.Scoreboard;
 
import org.bukkit.scoreboard.ScoreboardManager;
 
  
/**
+
Objective objective = board.registerNewObjective("showhealth", "health");
* 各プレイヤーの頭の上に、現在の体力を表示するプラグイン
+
objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
*/
+
objective.setDisplayName("/ 20");
public class ScoreboardHealthPlugin extends JavaPlugin {
 
  
    /** オブジェクティブの名前 */
+
for(Player online : Bukkit.getOnlinePlayers()){
    private static final String OBJECTIVE_NAME = "showhealth";
+
    online.setScoreboard(board);
   
+
    online.setHealth(online.getHealth());
    /**
 
    * プラグインが有効化されたときに呼び出されます
 
    * @see org.bukkit.plugin.java.JavaPlugin#onEnable()
 
    */
 
    @Override
 
    public void onEnable() {
 
       
 
        // メインスコアボードを取得します。
 
        ScoreboardManager manager = Bukkit.getScoreboardManager();
 
        Scoreboard board = manager.getMainScoreboard();
 
 
 
        // オブジェクティブが既に登録されているかどうか確認し、
 
        // 登録されていないなら新規作成します。
 
        Objective objective = board.getObjective(OBJECTIVE_NAME);
 
        if ( objective == null ) {
 
            objective = board.registerNewObjective(OBJECTIVE_NAME, "health");
 
            objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
 
            objective.setDisplayName("/ 20");
 
        }
 
       
 
        // 全プレイヤーの現在の体力を反映します
 
        for (Player player : Bukkit.getOnlinePlayers()) {
 
            objective.getScore(player).setScore((int)player.getHealth());
 
        }
 
    }
 
 
}
 
}
</source>
+
</pre>
 
 
==チーム分けプラグイン==
 
プレイヤーを2チームに分けるサンプルです。
 
 
 
TABキーの名前リストと、頭の上の名前表示に、チームの色が付きます。
 
また、チームメンバー間の攻撃が無効になります。
 
 
 
<source lang = "java">
 
import org.bukkit.Bukkit;
 
import org.bukkit.ChatColor;
 
import org.bukkit.command.Command;
 
import org.bukkit.command.CommandSender;
 
import org.bukkit.entity.Player;
 
import org.bukkit.plugin.java.JavaPlugin;
 
import org.bukkit.scoreboard.Scoreboard;
 
import org.bukkit.scoreboard.ScoreboardManager;
 
import org.bukkit.scoreboard.Team;
 
 
 
/**
 
* 2チームに分けるためのプラグイン
 
*/
 
public class ScoreboardTeamPlugin extends JavaPlugin {
 
   
 
    /** 赤チームの名前 */
 
    private static final String TEAM_RED_NAME = "team_red";
 
    /** 青チームの名前 */
 
    private static final String TEAM_BLUE_NAME = "team_blue";
 
   
 
    /** 赤チーム */
 
    private Team teamRed;
 
    /** 青チーム */
 
    private Team teamBlue;
 
   
 
    /**
 
    * このメソッドは、プラグインが有効化されたときに呼び出されます
 
    * @see org.bukkit.plugin.java.JavaPlugin#onEnable()
 
    */
 
    @Override
 
    public void onEnable() {
 
 
        // メインスコアボードを取得します。
 
        ScoreboardManager manager = Bukkit.getScoreboardManager();
 
        Scoreboard board = manager.getMainScoreboard();
 
 
 
        // チームが既に登録されているかどうか確認し、
 
        // 登録されていないなら新規作成します。
 
        teamRed = board.getTeam(TEAM_RED_NAME);
 
        if ( teamRed == null ) {
 
            teamRed = board.registerNewTeam(TEAM_RED_NAME);
 
            teamRed.setPrefix(ChatColor.RED.toString());
 
            teamRed.setSuffix(ChatColor.RESET.toString());
 
            teamRed.setDisplayName("team red");
 
            teamRed.setAllowFriendlyFire(false);
 
        }
 
        teamBlue = board.getTeam(TEAM_BLUE_NAME);
 
        if ( teamBlue == null ) {
 
            teamBlue = board.registerNewTeam(TEAM_BLUE_NAME);
 
            teamBlue.setPrefix(ChatColor.BLUE.toString());
 
            teamBlue.setSuffix(ChatColor.RESET.toString());
 
            teamBlue.setDisplayName("team blue");
 
            teamBlue.setAllowFriendlyFire(false);
 
        }
 
    }
 
 
 
    /**
 
    * このメソッドは、コマンドが実行された時に呼び出されます
 
    * @see org.bukkit.plugin.java.JavaPlugin#onCommand(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[])
 
    */
 
    @Override
 
    public boolean onCommand(
 
            CommandSender sender, Command command, String label, String[] args) {
 
       
 
        // コマンドの引数が足りない場合は、エラーを表示します
 
        if ( args.length <= 1 ) {
 
            sender.sendMessage("コマンドの引数が足りません。");
 
            sender.sendMessage("'/" + label + " (チーム名) (プレイヤー名)' のように実行してください。");
 
            return true;
 
        }
 
       
 
        // 1番目の引数に無効な文字列が指定された時に、エラーを表示します
 
        if ( !args[0].equalsIgnoreCase("red") && !args[0].equalsIgnoreCase("blue") ) {
 
            sender.sendMessage("指定されたチーム名 " + args[0] + " が無効です。");
 
            sender.sendMessage("red または blue を指定してください。");
 
            return true;
 
        }
 
       
 
        // 2番目の引数に無効なプレイヤー名が指定された時に、エラーを表示します
 
        Player target = Bukkit.getPlayerExact(args[1]);
 
        if ( target == null ) {
 
            sender.sendMessage("プレイヤー " + args[1] + " が見つかりません。");
 
            return true;
 
        }
 
 
 
        // 指定されたプレイヤーをチームに加えます
 
        Team team;
 
        if ( args[0].equalsIgnoreCase("red") ) {
 
            team = teamRed;
 
        } else {
 
            team = teamBlue;
 
        }
 
        team.addPlayer(target);
 
        sender.sendMessage("プレイヤー " + args[1] + " を " + args[0] + " に加えました。");
 
        return true;
 
    }
 
}
 
</source>
 
 
 
慣れてきたら、いろいろ工夫してみましょう。<br/>
 
例えば、チームから離脱するコマンドを追加してみてください。
 
 
 
=TIPS=
 
 
 
オブジェクティブ名には、17文字以上の名前を指定しないでください。<br/>
 
オブジェクティブの表示名には、33文字以上の名前を指定しないでください。<br/>
 
チーム名には、17文字以上の名前を指定しないでください。<br/>
 
チームの表示名には、33文字以上の名前を指定しないでください。<br/>
 
チームのprefix、suffixには、33文字以上の名前を指定しないでください。<br/>
 
サイドバーにダミーで登録するオフラインプレイヤー名には、17文字以上の名前を指定しないでください。<br/>
 
<br/>
 
メインスコアボードを強制的にクリアするには、CraftBukkitを停止して、「world/data/scoreboard.dat」ファイルを削除してください。
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)