こんにちは!運営者のハックです。
今回はミニゲーム開発編挑戦時に再度確認した「デイトラJava中級 プラグイン開発編Day1「イベントの理解」及びDay6「ドキュメントの読み方(Javadoc)」の復習内容を紹介します。
また、ミニゲーム開発編で使えそうなイベントやメソッドについても紹介します。
Spigotのドキュメントでイベントを探そう
引用:概要 (Spigot-API 1.20.4-R0.1-SNAPSHOT API)
Spigotは、Minecraftサーバーの開発とカスタマイズに使用される非常に人気のあるオープンソースソフトウェアです。主にサーバーのパフォーマンスを向上させ、ゲームプレイをカスタマイズするための追加機能や改善を提供します。
Spigotは、Minecraftの公式リリースに基づいて構築されており、Bukkit APIの拡張版としても機能します。これにより、開発者はプラグインを作成してゲームの挙動を変更することができ、カスタムミニゲームや機能をサーバーに追加することが可能です。
Spigotの特徴
- パフォーマンスの最適化: Spigotは、Minecraftサーバーのパフォーマンスを向上させるための多数の最適化が施されています。これにより、より多くのプレイヤーをサポートし、ラグを減少させることができます。
- 拡張されたAPI: BukkitプラグインAPIに多数の改善と拡張を加えることで、開発者はより多機能なプラグインを簡単に作成できます。
- カスタマイズ可能: サーバー管理者は、Spigotの設定をカスタマイズして、具体的なニーズに合わせてサーバーを調整することができます。
- アクティブなコミュニティ: Spigotは活発なコミュニティに支えられており、数多くのプラグインが開発されています。また、問題が発生した場合に助けを求めるためのフォーラムやガイドも充実しています。
英語が苦手な場合は和訳機能を使おう
引用:BlockBreakEvent (Spigot-API 1.20.4-R0.1-SNAPSHOT API)
サイトは全て英語で書かれているので、英語が苦手な場合は適宜chromeの翻訳機能を使って日本語訳を見ながら探します。
コードを書いたら適宜Javadocを作成しよう
JavaはJavadocと呼ばれるドキュメントの書き方やルールみたいなものがあります。Java開発者にとって必須のツールで、ソースコード中に書かれたコメント(ドキュメントコメント)から、メソッドやクラスの使用方法、パラメータの説明などのドキュメントを作成します。
Javadoc用のコメントは/** と */ で囲みます。これをメソッドやクラスの直前に記述することで、そのメソッドやクラスの説明文を作成することができます。
//EnemyDownコマンドのコードより 緑の部分がJavadoc用のコメント
/**
* 新規のプレイヤー情報をリストに追加します。
*
* @param player コマンドを実行したプレイヤー
* @return 新規プレイヤー
*/
private ExecutingPlayer addNewPlayer(Player player) {
ExecutingPlayer newPlayer = new ExecutingPlayer(player.getName());
executingPlayerList.add(newPlayer);
return newPlayer;
}
タグの説明
Javadocコメント内では、特定の情報を構造化して記述するためにタグを使用します。
よく使われるタグには以下のようなものがあります。
Day1の課題ではゲーム開始時にメッセージが表示されるイベントを実装!
あにゃ?ひょっとして中級編もやり直すのかにゃ?
中級編はやり直さずに、上級編を進める上で復習した回があれば随時記事にまとめた上で講義の内容を簡単にまとめ、かつ上級編に使えそうな内容を紹介していく感じにしていきます。
今回は実際に「鉱石採掘ゲーム」で使用できそうなイベントをSpigotのドキュメント内で探しましたので紹介します。
鉱石採掘ゲームで使えそうなイベントクラスやメソッドを探しました
上級編のミニゲーム開発「鉱石採掘ゲーム」で使えそうなイベントクラスやメソッドを探しましたので紹介します。
BlockBreakEvent
プレイヤーがブロックを破壊したときに発生するイベントです。このイベントは、プラグインがブロックが破壊された際の動作をカスタマイズするために利用されます。
例えば、特定のブロックを破壊することでポイントを獲得したり、特定の条件下でブロックを破壊できないようにするなどの処理が可能です。
以下のコードは、プレイヤーがブロックを破壊するたびにイベントをトリガーし、そのブロックがダイヤモンド鉱石である場合にプレイヤーにメッセージを送信するというコードの一部です。
//コード例
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (block.getType() == Material.DIAMOND_ORE) {
player.sendMessage("ダイヤモンド鉱石を壊しました!");
}
}
このクラスを使って鉱石ごとに採掘されたらポイントを得るという設定ができそうだにゃ!
getScore
何かを処理した際にスコアをゲットできるメソッドです。
以下のように鉱石の種類に応じて点数を取得できるようにします。
//コード例:石炭採掘で5、鉄鉱石で10、ダイヤモンド鉱石で70ポイント加算する
private int getScore(Material material) {
switch (material) {
case COAL_ORE:
return 5;
case IRON_ORE:
return 10;
case DIAMOND_ORE:
return 70;
default:
return 0; // 鉱石以外は0点
}
}
実装が難しいポイントとして挙げられていた「鉱石の種類によりスコアを設定すること」の課題もこれでクリアできそうだにゃ!
実装した際に上手くいくと良いですね。
inventory.setItemInMainHand
中級編では「EnemyDown」コマンドを実行した際にプレイヤーの状態と装備が変更されるように設定しました。このコードを応用して、鉱石採掘ゲームコマンドを実行した際に、利き手にツルハシを持たせるようにします。
inventory.setItemInMainHand(new ItemStack(Material.NETHERITE_PICKAXE));
ネザーライトのツルハシを持たせるとか、ハックはチートが好きなのにゃ?
ツルハシくらい、いいじゃないですか!
player.teleport(Location)
鉱石採掘ゲームのコマンドを実行した際にプレイヤーを特定の場所(例えば洞窟の入り口)にテレポートさせるメソッドとして使用できます。
特定の場所への移動の実装は必須ではありませんが、課題の応用編として紹介されていました。
//コード例
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
// 洞窟の入り口の座標を指定
World world = Bukkit.getWorld("world_name");
double x = 100; // X座標
double y = 64; // Y座標
double z = 100; // Z座標
Location startLocation = new Location(world, x, y, z);
// プレイヤーを洞窟の入り口にテレポート
player.teleport(startLocation);
// ネザーライトのツルハシをプレイヤーに与える
player.getInventory().setItemInMainHand
(new ItemStack(Material.NETHERITE_PICKAXE));
player.sendMessage
("ネザライトのツルハシを持った状態で洞窟の入口にテレポートされました。
思う存分採掘を楽しんでください!");
return true;
} else {
sender.sendMessage("このコマンドはプレイヤーのみが使用できます。");
return false;
}
}
洞窟入り口までテレポートしてもらい、しかも手にはネザーライトのツルハシって、いたせりつくせりだにゃあ。
開始位置の調整は実装が必須ではありませんが、余裕があれば実装してみたいですね。
まとめ ミニゲーム開発に向けて準備中
今回は上級編のミニゲーム開発の準備をする上で、中級編の内容を再度確認しました。
Spigotの公式ドキュメントを確認しつつ、イベントを実装できるようにします。
今回発見した「BlockBreakEvent 」は鉱石採掘ゲームにピッタリなイベントだと思います。
switch文を使って鉱石の種類ごとに点数を設定すれば要件は満たせそうです。
だんだんと実装のイメージが掴めてきました。
以上で今回の学習記録を終えます。
ここまでご覧いただきありがとうございました。
コメント