プレイヤーかの確認
sender はコマンド実行者
instanceof Player プレイヤーかの確認
!(sender instance of Player) でプレイヤーでない
// プレイヤーかどうかの確認
if (!(sender instanceof Player)) {
sender.sendMessage(Component.text("このコマンドはプレイヤーのみ実行可能です。", NamedTextColor.RED));
return true;
}
メッセージの送信
sender.sendMessage: 実行者にメッセージを送る
Component.text: テキストコンポーネントの作成 (Adventure API)
NamedTextColor.RED: 文字色を指定
sender.sendMessage(Component.text("...", NamedTextColor.RED));
コマンドクラスの定義
implements CommandExecutor: コマンド実行のインターフェースを実装(契約)する。
これをつけることで、サーバーに「このクラスはコマンドを担当します」と伝えることができます。 契約のルールとして、必ず onCommand メソッドの中身を書く必要があります。
public class HelloCommand implements CommandExecutor
onCommand メソッドの引数
インターフェースの実装により必須となるメソッドです。コマンドが実行されると、以下の4つの情報が渡されます。
| 引数 | 型 | 説明 |
|---|---|---|
| sender | CommandSender | コマンド実行者(プレイヤー、コンソールなど) |
| command | Command | コマンド情報(plugin.ymlの定義内容) |
| label | String | 実行されたコマンド名(エイリアス含む) |
| args | String[] | コマンド引数の配列(例: /dice 100 の 100) |
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args)
ランダム数値の生成
new Random(): ランダム生成器のインスタンス化
nextInt(6): 0から5までの整数を生成(引数の値は含まない)
Random random = new Random();
int result = random.nextInt(6) + 1;
サウンドの再生
- player.getLocation(): 再生場所(プレイヤーの位置)
- Sound.ENTITY_EXPERIENCE_ORB_PICKUP: サウンドの種類
- 1.0f (Volume): 音量
- 1.0f (Pitch): 音の高さ(ピッチ)
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0f, 1.0f);
イベントリスナーの登録
プラグイン起動時(onEnable内など)に記述し、イベントクラスをサーバーに認識させます。
getServer().getPluginManager(): プラグイン管理マネージャーの取得
registerEvents: イベント登録メソッド
new JoinListener(): 登録するListenerクラスのインスタンス
this: このプラグインのメインクラスのインスタンス
getServer().getPluginManager().registerEvents(new JoinListener(), this);
コマンドの登録
plugin.yml に定義したコマンドと、処理クラスを紐付けます(onEnable内で記述)。
- getCommand("hello"): plugin.yml 内のコマンド名を取得
- setExecutor: 実行クラスをセット
- new HelloCommand(): コマンド処理クラスのインスタンス
getCommand("hello").setExecutor(new HelloCommand());
設定ファイルの管理 (ConfigManager)
プラグインのメインクラス (JavaPlugin) を受け取り、config.yml の初期化やリロードを行うクラスの例です。
-
saveDefaultConfig():
config.ymlが存在しない場合、jar内のデフォルトファイルをコピーして保存します。 - reloadConfig(): ディスク上のファイルを読み込み直して、メモリ内の設定情報を更新します。
private final JavaPlugin plugin;
public ConfigManager(JavaPlugin plugin) {
this.plugin = plugin;
}
// デフォルト設定を保存・ロード
public void setup() {
plugin.saveDefaultConfig();
plugin.reloadConfig();
}
// 設定をリロード
public void reload() {
plugin.reloadConfig();
}
設定値の取得 (Getter Methods)
config.yml から値を読み込むメソッドの例です。
- getString("path", "default"): 文字列を取得。値がない場合は第2引数のデフォルト値を使用します。
- getBoolean: 真偽値(true/false)を取得。
public String getJoinMessage() {
return plugin.getConfig().getString("messages.join", "&7[&a+&7] &f%player% joined the game.");
}
public String getQuitMessage() {
return plugin.getConfig().getString("messages.quit", "&7[&c-&7] &f%player% left the game.");
}
public boolean isFirstJoinEnabled() {
return plugin.getConfig().getBoolean("messages.first-join.enabled", true);
}
public String getFirstJoinMessage() {
return plugin.getConfig().getString("messages.first-join.message", "&7[&dNEW&7] &f%player% joined for the first time!");
}
設定ファイル (config.yml) の例
前述のJavaコードに対応する config.yml の記述例です。
-
階層構造:
messages.joinのようにネストして記述します。 -
カラーコード:
&a(緑) や&f(白) などを使用しています。 -
プレースホルダー: コード側で置換するための
%player%などの文字列を含めています。
messages:
# 参加時のメッセージ
# 使用可能プレースホルダ: %player% (プレイヤー名)
join: "&7[&a+&7] &f%player% が入国しました。"
# 退出時のメッセージ
quit: "&7[&c-&7] &f%player% が出国しました。"
# 初回参加時の特別メッセージ (オプション)
# enabled: true の場合、通常の join メッセージの代わりにこれが表示されます
first-join:
enabled: true
message: "&7[&dNEW&7] &f%player% が初めて入国しました!歓迎しましょう!"