どうも。へっぽこプラグイン作成者のよゆうです。
マイクラのアスレチックサーバーを作る際にチェックポイントが欲しい…。
例を上げるとちぇる鯖のようなチェックポイントが欲しい。
Skriptなら実装できるけどたまにはJAVAでPluginを作ってみたい……。
というわけで作ってみました。チェックポイント編第一弾
「看板を置くプラグイン!!」
より具体的にいうならば看板に「C」と入力した時だけ看板の内容をチェックポイント用に書き換えるプラグインである。
地味だと思った方はよゆうポイントマイナス√3点です。
前提知識
最初に前提として必要とする知識について触れておきます。
環境構築が済んでいる
まずこれ。分かんない人は「Plugin作成 環境構築」とかでググってください。EclipseだとかVScodeだとかIntelliJ IDEAだとかまあいろいろ出てくるはずです。迷ったらIntelliJ IDEAでいいです。俺もそれなので。
JAVAの基礎ができている
ここでいう基礎ってのは構文とかじゃなくてファイルの位置とかです。メインクラスがあって別のクラスを作ってそれを呼び出すとかなんとなく理解してればいいです。理解してなくても動くプラグインが組めてるならそれでいいです。
プラグイン作成の準備ができる
要するにIntelliJ IDEAを起動→MinecraftPluginを作成→Spigot→諸々の情報を記入(名前とversionとか)→メインクラスが出来上がる。これができればOK。こんなもんはググれば出てきます。割愛。
実際に書いてみる
ここまで来たなら後はプラグインを書くだけ。versionは1.12.2で作成。
1.新しくクラスを作る
最初の段階ではこうなっているはず。
左にあるCというマークとTestCPという文字(今回はプラグイン名をTestCPにしたため)が見えるはずだ。そしたらそこを右クリック。新規→新しいクラス→クラス名を入力で新しいクラスが作れる。名前はなんでもOK。拡張子はつけなくても自動でつく。便利。
2.Listner関係のクラスであることを書く
public class New {
}
最初は上のようにだけなるはず。(今回はNewというクラスを作成した。名前は適当)
それをListner…。要はプレイヤーに関するイベントがあったことを書きたいのでそういうクラスだとコンピューターに伝えるためのコード。具体的に書くとこう。
public class New implements Listener {
}
この時Listenerの部分が赤色になったらカーソルを持っていきクラスにインポートというのを押してもらえればOK。最悪
import org.bukkit.event.Listener;
と上に追記すればなんとかなる。やってることも同じ。
ここまで書いたのをまとめると
package com.yoyude.testcp;//パッケージはあなたの設定した名前になる。
import org.bukkit.event.Listener;//要するにListener関連の装備にしましたよってこと。
public class New implements Listener{
//ここにイベントを書いていく
}
3.イベントを書く
イベントというのは「プレイヤーが参加した時」や「プレイヤーがブロックをクリックした時」など様々なプレイヤー関連の動きがあった時に呼び出されるものである。イベント一覧は「Spigot イベント一覧」でググれば出てくるので割愛。
今回は看板を置いた時に記入済みの看板を設置したいのでイベントは「ブロックを置いた時のイベント」。つまり「BlockPlaceEvent」…と思ったら大間違い。というかできなくもないだろうがその場合装飾で看板を置いてもチェックポイントになる事案が発生するまである。
今回作るプラグインは「C」と入力した場合に書き換えるプラグインなので呼び出すイベントは
@EventHandler
public void PlacePoint(SignChangeEvent e){
}
SignChangeEvent。看板が書き換わった時のイベントとなる。
簡単に説明すると@EventHandlerはここにイベントのプログラムを書きますよということ。PlacePointというのは適当につけた関数名(何でもいい)。後ろが呼び出すイベントでeはそのEventのこと。後述。ともかくこれで看板を書いた時に呼び出すプログラムの土台ができたわけだ。
public class SignPlace implements Listener {
@EventHandler
public void PlacePoint(SignChangeEvent e){
}
4.イベントの中身を書く
今のままだとイベントが呼び出されても特になにもしない。空っぽだ。
というわけでイベントが呼び出された時起こしたい内容を書いていく。実際に出来上がったものがこちらになります(③分クッキング風)
Player player = e.getPlayer();
//Player型の変数player(名前はなんでもいい)にイベントを起こしたプレイヤーを代入している
//event.getPlayer()といった感じ。
player.sendMessage("Cと記入すればチェックポイントが設置できます");
//プレイヤーに使い方を伝えるメッセージを送る。
String signString = e.getLine(0);
//String型(要するに文字型)の変数signStringに看板の0行目(要するに1行目)の文字を代入している。
//「C」とプレイヤーが看板に書けば「C」が代入される。
if(signString.equals("C")) {//もし文字がCならというif文
player.sendMessage("チェックポイントを設置しました");
//プレイヤーにメッセージ
e.setLine(0, ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★");
e.setLine(1,ChatColor.BOLD + "Check Point");
e.setLine(2,ChatColor.BOLD + "Right Click");
e.setLine(3,ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★");
//e.setLineは看板を書き換える構文。それぞれ(何行目,内容)という形になっている。
//ChatColorは装飾を変更できる。BOLDは太字。AQUA等は色。
こんな感じになる。if文がわからない人はJAVAなりC言語なりを勉強して欲しい。そんなに難しくないので1時間もあれば理解できるはずだ。
これで一応クラスは完成したことになる。全容はこんな感じだ。
package com.yoyude.checkpoint;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
public class SignPlace implements Listener {
@EventHandler
public void PlacePoint(SignChangeEvent e){
Player player = e.getPlayer();
player.sendMessage("Cと記入すればチェックポイントが設置できます");
String signString = e.getLine(0);
if(signString.equals("C")) {
player.sendMessage("チェックポイントを設置しました");
e.setLine(0, ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★");
e.setLine(1,ChatColor.BOLD + "Check Point");
e.setLine(2,ChatColor.BOLD + "Right Click");
e.setLine(3,ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★")
;
}
}
}
これで晴れてプラグイン完成。というわけではない。実は最後の仕上げが残っている。
5.メインクラスにイベントを登録する。
このままだとイベントを書いたクラスをメインクラスが読み込んでくれないのだ。というわけで手つかずだったメインクラスに書き込んでいく。完成図はこちら。
public final class CHECKPOINT extends JavaPlugin {
@Override
public void onEnable() { //サーバーが起動した時
// Plugin startup logic
Server server = this.getServer();
PluginManager pluginManager = server.getPluginManager();
pluginManager.registerEvents(new New(), this);
//Newというクラスを登録する(Newの部分をクラス名に変える)
}
これでプラグインを入れてサーバーを起動すればOK。
右上に緑の矢印があるはずなのでそれをクリックしてプラグインをjarに変換する。
これにてプラグインは完成!完璧なめでたしめでたしだな
今回のプラグインを動かしてみる
お待ちかねの実装タイム。
次のパート
まだ看板ができただけでクリックしても何も反応しない。
ということで次はチェックポイントを記録する機能を書いていこう!
次 Spigotで看板をクリックした時に自分の座標を保存する【CheckPoint編II/Minecraft】