0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Minecraft Plugin開発 メモ

0
Last updated at Posted at 2025-12-21

プレイヤーかの確認

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 100100
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% などの文字列を含めています。
config.yml
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% が初めて入国しました!歓迎しましょう!"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?