[Eclipse使用]Spigotのプラグインを作ってみようぜ

アバター
yamagami2211
ID: 4050Z50I9N
記事: 22
登録日時: 2020年3月30日(月) 22:03
お住まい: 大英帝国カナダ自治領
Minecraft ID: yamagami2211
いいねされた回数: 7回
連絡する:

[Eclipse使用]Spigotのプラグインを作ってみようぜ

投稿記事 by yamagami2211 » 2020年4月12日(日) 01:42

っていうのを簡単に解説(???)する記事です。
注意事項
今回はEclipseを使います。筆者はIntelliJに非対応です。
ダウンロードや日本語化云々は自力でオナシャス。
あと、プラグインを作るにあたって必要なものはすでに準備してある前提で書いています。
なお、自分流な面が強いので、他の人からすると「なんやこれ」ってなるかもしれません。ご了承ください。

あと、間違ってたらツッコミください。

今回は、ログインとログアウトのときに「〇〇がログインしたよ!!」とか「〇〇がログアウトしたよ!!」を表示するプラグインを作ります。
長くて見づらかったので、各項目をSpoilerで囲いました。
1.新しいプロジェクト作るやで
Show
Eclipseを起動したら、左上にあるファイルから「新規->Maven プロジェクト」を選びます。
画像

新規 Maven プロジェクト というウィンドウが出てくるので、その中にある「シンプルなプロジェクトの作成」にチェックを入れて次へをクリックします。
画像

こんなウィンドに変わると思うので、必要なものを埋めてきます。
画像

まずは「グループId」を記入します。
命名規則?があるらしいですが、解説しようと文章考えたら全然意味不明は文章になったので、ModingWikiのプラグインチュートリアルのページを参考にしてください。
https://mcmodding.jp/modding/index.php/ ... C.E6.88.90


今回の解説では「me.yama2211.pltu」としました。

次に「アーティファクトId」を記入します。
これは今から作るプラグインの名前です。
今回は「PluginTutorial」としました。

とりあえず、設定する項目はこの2つだけです。他の項目は特にいじらなくて大丈夫です。

記入ができたらこんな感じになってると思います。
画像

ここまで記入できたら完了をクリックします。
-----
完了をクリックしたら、左のパッケージ・エクスプローラーに作った「PluginTutorial」が表示されていると思うので、それを開いて「pom.xml」をダブルクリックして開きます。
画像

開くとこうなってるはずなので、これを編集してPluginが作れるようにします。

コード: 全て選択

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>me.yama2211.pltu</groupId>
  <artifactId>PluginTutorial</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>
(※1行目の「project xmlns=~~~」は長くて見ずらいので改行してます。)

このコード内の「</version>」の次の行に以下のコードを追加します。

コード: 全て選択

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>

		<resources>
			<resource>
				<targetPath>.</targetPath>
				<filtering>true</filtering>
				<directory>src/main/resources/</directory>
			</resource>
		</resources>
	</build>

	<repositories>
		<repository>
			<id>spigot-repo</id>
			<url>https://hub.spigotmc.org/nexus/content/groups/public</url>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>org.bukkit</groupId>
			<artifactId>bukkit</artifactId>
			<version>1.12.2-R0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
追加した全文はこちら
Show

コード: 全て選択

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>me.yama2211.pltu</groupId>
	<artifactId>PluginTutorial</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>

		<resources>
			<resource>
				<targetPath>.</targetPath>
				<filtering>true</filtering>
				<directory>src/main/resources/</directory>
			</resource>
		</resources>
	</build>

	<repositories>
		<repository>
			<id>spigot-repo</id>
			<url>https://hub.spigotmc.org/nexus/content/groups/public</url>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>org.bukkit</groupId>
			<artifactId>bukkit</artifactId>
			<version>1.12.2-R0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>

</project>
ちなみに、コード崩れ(スペースとかがずれて見ずらい場合)は「Ctrl+SHIFT+F」でいい感じに直してくれます。

これで保存(CTRL+S)を押すと、開発に必要なSpigotのあれこれを取得してくれます。
今回は、普段の開発で使っている「1.12.2」で話を勧めます。
バージョンを変えたい場合は以下のところを書き換えることでできます。
Spoiler
Show
Spoilerで囲んだ全文から37行目~43行目

コード: 全て選択

	<dependencies>
		<dependency>
			<groupId>org.bukkit</groupId>
			<artifactId>bukkit</artifactId>
			<version><ここを任意のバージョンに書き換え>-R0.1-SNAPSHOT</version>
			<!--<version>1.15.2-R0.1-SNAPSHOT</version> など-->
		</dependency>
	</dependencies>
保存してパッケージ・エクスプローラーにあるMaven 依存関係を開くと次のようになっていると思います。
(※環境によっては違う可能性あり)
画像
これで開発ができます。

2.とりあえずSpigotで読み込むようにするやで
Show
パッケージ・エクスプローラの作ったプロジェクトを開いて、「src/main/java」の上で右クリックして「新規->パッケージ」をクリックします。
画像
名前に先程Mavenのウィンドウの頃で入力したグループIDを入れます。
今回は「me.yama221.pltu」としました。
入力したら完了をクリックします。

作ったパッケージの上で右クリックして「新規->クラス」をクリックします。
画像
名前の項目を「Main」として完了をクリックします。
※この項目は「Main」としてくても「Hogehoge」とか「Switch」とかでも構いません。
私は視認性を考えてMainにしてます。
任意の名前にする場合、先頭は大文字にする必要があります。
(多分大文字にしてないとエラーになったと思います。)

するとMain.javaが開かれるはずです。
Main.javaは次のようになっていると思います。
画像

コード: 全て選択

public class Main
の後ろに

コード: 全て選択

extends JavaPlugin implements Listener
を追加します。

すると、「JavaPlugin」が赤い波線が出ると思います。
この赤い波線はエラーを表していますので、これを修正します。

波線にマウスカーソルを合わせると「3個のクイック・フィックスが利用可能です:」と出るので、「'JavaPlugin'をインポートします。(org.bukkit.plugin.java)」をクリックします。
画像

インポートすると、赤い波線が消えます。

--ここまでのMain.javaのソース--

コード: 全て選択

package me.yama221.pltu;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{

}
※スクショを書き換えるのが面倒になったので、書き換えていませんが、implements Listenerも追加しておいてください。

まだやることたくさんありますが、一旦Main.javaを保存して、休憩をとります。
詰めてすると疲れるだけなので、適度に休憩は入れましょう。
------
休憩したら、「src/main/resources」の上で右クリックして「新規-<ファイル」を選びます。
画像
ファイル名に「plugin.yml」として完了をクリックします。
このファイルを簡単に説明するとPluginを動かすのに必要不可欠な設定ファイルと思っておくと良いでしょう。

記入したらplugin.ymlを開いて次のように記述します。

コード: 全て選択

main: me.yama2211.pltu.Main
name: ${project.artifactId}
version: ${project.version}
一応の解説。見ておくと良いかも?
Show
mainは先ほど作成した.javaファイルです。
nameはpom.xmlから引っ張ってきます。
versionも同じくpom.xmlから引っ張ってきます。

nameもversionもpom.xmlから引っ張ってこなくても良いんですが、個人的にはpom.xmlを書き換えるだけでバージョンを変えてビルドできるのでこちらを使います。
わざわざこの解説?に合わせなくても、

コード: 全て選択

main: net.yama2211.ps.Main
name: PluginTutorial
version: 1.0
のようにしても大丈夫です。

plugin.ymlの設定項目の詳しい解説はしませんので、ModdingWIkiに見やすい表と解説があったのでリンクを載せておきます。
https://mcmodding.jp/modding/index.php/ ... 0%E8%A6%A7
コロンとかスペースとかには注意してください。スペーズがずれていたりするとビルドはできますが、Spigot起動時にエラーになります。

これでとりあえず必要なものは準備できたので、Main.javaに戻ってコーディングしていきます。

3.onEnable()メソッドとonDisable()メソッドを書くやで
Show
その前にonEnableとonDisableについて軽く説明しておきます。
onEnableはプラグインが有効化されたときに呼び出されるメソッドです。
onDisableはプラグインが無効化されたときに呼び出されるメソッドです。
簡単に言えば、onEnableがサーバ起動時で、onDisableがサーバを閉じたとき(リロードしたとき)に呼ばれるものと覚えておきましょう。

それではコードを書いていきます。

コード: 全て選択

public class Main extends JavaPlugin {
}
の{}内に次のように書いていきます。
画像
-----
onEnable()の中に次を記述します。

コード: 全て選択

getServer().getPluginManager().registerEvents(this, this);
記述したら一旦Buildしましょう。
パッケージ・エクスプローラからパッケージを右クリックして「実行->Maven instlall」をクリックします。
画像

すると、Eclipseの画面のどこかにある「コンソール」にズラッと文字が出ると思います。
画像
Buildに成功したら、Workspaceの「PluginTutorial->target」の中に「PluginTutorial-0.0.1-SNAPSHOT.jar」があると思います。
これがpluginです。作れましたね。おめでとうございます!!

その.jarファイルをspigotに入れてサーバを起動してみましょう。
※ここでのSpigotのBuild方法は解説しませんが、この記事をここまで読んでいる人は自力でBuildできてると思います。
くれぐれも、「spigot ダウンロード」で検索して一番上に出てくるサイトからダウンロードしないでください。あれは二次配布のサイトです。

起動できたら、サーバに入ってみて、次のコマンドを実行してみましょう.
/ver PluginTutorial
/pl
実行すると次のように表示されます。
画像
(yamagami2211 joinded the gameと時刻を 0 に設定しましたは無視してね。)

これは、作ったpluginが無事に読み込まれていると言う証拠です。

あとは本格的にコーディングしていけば良いものが作れるでしょう。

4.ログインしたときにイベントを取得するやで
Show
イベントを取得します。

コード: 全て選択

@EventHandler
public void onLoginEvent(PlayerJoinEvent event){}
を追加します。

「PlayerJoinEvent」に赤い波線が出ていると思うので、マウスカーソルを持っていって、「'PlayerJoinEvent'をインポートします(org.bukkit.event.player)」をクリックします。
画像
@EventHandlerも同様に、インポートします。
画像
※「PlayerJoinEvent」です。「PlayerLoginEvent」ではないです。
スクショは修正していません。

これで、プレイヤーがサーバに参加(ログイン)したイベントを取得できました。

5.ログインしたときにメッセージを表示させるやで
Show
その前にConfigの設定をします。
plugin.ymlを作成したresourcesにconfig.ymlファイルを追加します。
config.ymlを作成できたら、onEnable()内に

コード: 全て選択

saveDefaultConfig();
を追加します。
この処理は、Plugin有効化されたときにconfigを保存する(生成する)処理です。

書けたら「onLoginEvent」に戻ります。
{}内に、
以下の処理を書きます。

コード: 全て選択

	String Login = getConfig().getString("JoinMessage");
	Login = Login.replace("%pl%", event.getPlayer().getName());
	Login = Login.replaceAll("%n%","\n");
	event.setJoinMessage(ChatColor.translateAlternateColorCodes('&', Login));
String型のLoginにconfigからstring型でJoinMessageを取得したり、%pl%でプレイヤーの名前に置き換えたり、%n%で改行できるようにしたり、&でカラーコード使えるようにする処理です。
これで、ログイン時にメッセージを表示させることができるんですが、configに"JoinMessage"を書いていないので、これを追加します。

config.ymlを開き、

コード: 全て選択

JoinMessage: '&a&l%pl%&r &bがログインしたよ!!'
とします。クォーテーション(' ')内は何でも良いですが、%pl%でプレイヤーの名前にできるので、入れておくと良いと思います。

※装飾コードはこちらを参考にすると良いともいます。

Buildする前に、pom.xmlを開き、<version>を変えておきます。
この解説通りにすすめているなら、「<version>0.0.2-SNAPSHOT</version>」になっていると思うので、<version>0.0.2-SNAPSHOT</version>にしてビルドします。
ビルドの手順は上の方にあるので、探してビルドしてください。
保存することを忘れずに。

Buildしてサーバのpluginsフォルダに入れて、サーバを起動してログインすると、Configで設定した文章が出れば成功です。
画像

6.ログアウトのときも表示させるやで
Show

コード: 全て選択

public void onLogoutEvent(PlayerQuitEvent event) {}
を新たに作ります。
PlayerQuitEventに波線が出るので、イベントをインポートします。

Loginのときのを参考に処理を書いて聞きます。

コード: 全て選択

		String Logout = getConfig().getString("LogoutMessage");
		Logout = Logout.replace("%pl%", event.getPlayer().getName());
		Logout = Logout.replaceAll("%n%", "\n");
		event.setQuitMessage(ChatColor.translateAlternateColorCodes('&', Logout));
config.ymlにLogoutMessageを追加しておきましょう。
pom.xmlのversionを変えてビルドします。

起動する前に、サーバのpluginsフォルダに有るconfig.ymlを削除しておきます。

ちゃんと出来ていればこのように出るはずです。
画像

これで、ログインとログアウト時にメッセージを表示するプラグインの完成です

ソースコードおいとくやで
Main.java
Show

コード: 全て選択

package me.yama221.pltu;

import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {

	public void onEnable() {
		//処理を書く
		getServer().getPluginManager().registerEvents(this, this);
		saveDefaultConfig();
	}

	public void onDisable() {
		//処理を書く
	}

	@EventHandler
	public void onLoginEvent(PlayerJoinEvent event) {
		String Login = getConfig().getString("JoinMessage");
		Login = Login.replace("%pl%", event.getPlayer().getName());
		Login = Login.replaceAll("%n%", "\n");
		event.setJoinMessage(ChatColor.translateAlternateColorCodes('&', Login));
	}

	@EventHandler
	public void onLogoutEvent(PlayerQuitEvent event) {
		String Logout = getConfig().getString("LogoutMessage");
		Logout = Logout.replace("%pl%", event.getPlayer().getName());
		Logout = Logout.replaceAll("%n%", "\n");
		event.setQuitMessage(ChatColor.translateAlternateColorCodes('&', Logout));
	}

}
plugin.yml
Show

コード: 全て選択

main: me.yama221.pltu.Main
name: ${project.artifactId}
version: ${project.version}
config.yml
Show

コード: 全て選択

JoinMessage: '&a&l%pl%&r &bがログインしたよ!!'
LogoutMessage: '&a&l%pl%&r &bがログアウトしたよ!!'

スペシャルサンクスやで
  • Minecraft Modding WikiのPlugin Tutorialなどのページを作ってくれた人
  • Discordの画像配信CDN
  • MinecraftWiki
書いた感想とか
Show
説明が下手なので、よくわかんない文章だと思います。
でも、画像付いてるしなんとかなるでしょ。

まだ途中半端な記事ですが、深夜帯に書いててクソネミなので一旦ここまで。
どうせコロナで自宅待機なので、ゆっくり書いていこうと思います。
(2020/4/12深夜 初回投稿)
更新しました。ログインのときにメッセージを表示させるところまで。
あつまれどうぶつの森のカブを大量に買ったりしてたら、更新が遅れました。
カブ価が暴落しなければあと少しで終わると思います。
(2020/4/12 14時前 1回目更新)
更新しました。完成しました。
あつ森のカブ価落ちつつある...
(2020/4/12 15時55分 2目更新)
0


[以下サイン]
なんかしてる人です。
急ぎで私に用事がある場合は、TwitterのDMにどうぞ。
[紹介]二次配布からのダウンロードはやめよう[Stop Mod Reposts]
Spigotのプラグインを作ってみようぜ