純規の暇人趣味ブログ

首を突っ込んで足を洗う

[Bukkitプラグイン制作講座-其之二]メインクラスの作成、ビルド迄

      2016/12/13    HimaJyun

前回(其之一)はプロジェクトを作成し、Mavenの依存関係にBukkitAPIを追加する所までを解説しました。
今回はメインとなるクラスを作成して、ビルドを行い、実際にサーバに読み込ませる所までを解説してみようと思います。

前回の記事は「[Bukkitプラグイン制作講座-其之一]プロジェクトの作成迄」です。

plugin.ymlを作成しよう

メインクラス(最初に実行されるプログラム)を作成する前に、まずはいくつかの準備が必要です、実際に試してみましょう。

ファイルの追加

メインとなるクラスを追加する前に、plugin.ymlと言う特別なファイルを作成します。
これは、Bukkitがプラグインを読み込む際にどうすれば良いかを指示する「おつかいメモ」みたいな物です。

この講座を順に沿って進んでいるのであれば、今、みなさんのプロジェクトは以下のようになっているかと思われます。
bukkit-plugin-development-lecture-2-001

では、この「src/main/resources」と表示されている所を右クリックして「新規->ファイル」を選択しましょう。
bukkit-plugin-development-lecture-2-002

以下の様な画面が出るので、ファイル名に「plugin.yml」を入力して「完了」をクリックします。
bukkit-plugin-development-lecture-2-003

「plugin.yml」ファイルが追加されましたね、ダブルクリックで開いて下さい。
bukkit-plugin-development-lecture-2-004

plugin.ymlの編集

この「plugin.yml」にBukkit側に登録させるための必要な情報を書き込みます。
細かい説明は後にして、最低限必要な情報は以下の通りです。

main: [メインクラスの場所]
name: [プラグインの名前]
version: [バージョン]

プラグインの名前やバージョン、実は前回の「pom.xml」に記入した内容と全く異なる事を書いても良いんです。

ただ、それをするメリットなんてミジンコもないので普通に記入しましょう。
nameはプラグインの名前(例:Sample1)、versionはバージョン(例:0.0.1-SNAPSHOT)を記入しましょう。

mainですが、これは普通、「[グループID].[プラグイン名(小文字)].[プラグイン名]」とするのが定石です。
と言ってもチチンプイプイカンカンプイでしょうから説明すると

グループIDは前回の記事で「他の人と被ってはいけない」と言っていた奴です、僕の場合は「jp.jyn」ですね。

プラグイン名(小文字)はパッケージと言う物になります、難しく考えずにプラグイン名を小文字にしましょう、今回の場合は「sample1」ですね。

プラグイン名はメインクラスの名前になります、何でも良いですが意味が分からない内はプラグイン名をそのまま利用しましょう、今回の場合は「Sample1」ですね。

それらを元に記入したのが以下の内容です(もちろん、内容は自分に合わせて変更して下さいね)

main: jp.jyn.sample1.Sample1
name: Sample1
version: 0.0.1-SNAPSHOT

他にも色々設定出来るのですが、とりあえず保存しましょう、保存は「Ctrl+S」の同時押しですよ、もうご存知ですね?

メインクラスの作成とビルド

先程は「plugin.yml」を作成しました、次は実際にプログラムを記載するメインクラスを作成してビルドしてみましょう。

メインクラスの作成

まずはメインクラスを作成する必要があります。

手順はさきほどとよく似ていて、まずは「src/main/java」を右クリックして「新規->パッケージ」を選択します。
bukkit-plugin-development-lecture-2-005

例によって名前を設定する画面が出て来るので、先程「plugin.yml」で「main」に設定した「[グループID].[プラグイン名(小文字)].[プラグイン名]」の「[グループID].[プラグイン名(小文字)]」までを入力します、僕の場合だと「jp.jyn.sample1」です。
bukkit-plugin-development-lecture-2-006

設定した名前の物が追加されているので、今度はそれを右クリックして「新規->クラス」を選択して下さい。
bukkit-plugin-development-lecture-2-007

少し複雑な画面が登場しますが、基本的に入力するのは「名前」の部分だけです、ここにプラグイン名を記入しましょう。
bukkit-plugin-development-lecture-2-008

これでメインクラスの作成が出来ました、いわゆる「Hello, world!」を試してみましょうか

Hello, world!

さて、今の状況ではメインクラスは以下の様になっていると思います(パッケージ名などは違いますが)

package jp.jyn.sample1;

public class Sample1 {

}

この状態では本当の本当の本当の本当に何も出来ないので、まずはBukkitのAPI(命令)を呼び出せるようにしましょう。

と言っても、とても簡単です、まずは「public class Hoge {」の部分を「public class Hoge extends JavaPlugin {」に変更しましょう。

すると、もれなく「JavaPlugin」の部分に赤の波線が引かれます、これは「エラーがあるよ」と言う意味です。

マウスを重ねると詳細な情報を確認できます、きっと、「JavaPluginをインポートします」と言うのがあるでしょうからそれをクリックして下さい。
bukkit-plugin-development-lecture-2-009

すると、「package~public class...」の間に「import org.bukkit.plugin.java.JavaPlugin;」と言う物が追加されたと思います。
これでBukkitのAPIがとりあえず利用出来る様になりました。

ちなみにですが、実は保存した時に勝手にimportを追加してくれたりします。
普段はこれのおかげで特に気にする必要も無いでしょう。

さて、きっと、今はこんな感じでしょう。

package jp.jyn.sample1;

import org.bukkit.plugin.java.JavaPlugin;

public class Sample1 extends JavaPlugin {

}

ここに簡単なコードを作成してみて、実際に動作している事を確認してもらおうと思います。

早い話、「public class ...{」から「}」の間に以下を記入してみて下さい。

@Override
public void onEnable() {
 getLogger().info("Hello, world!");
}

要はこうなります。

package jp.jyn.sample1;

import org.bukkit.plugin.java.JavaPlugin;

public class Sample1 extends JavaPlugin {
	@Override
	public void onEnable() {
		getLogger().info("Hello, world!");
	}
}

「Hello, world!」の部分は例としてこうしているだけなので、好きな様にしていただいて構いませんよ

「匠」でも構いませんし「博麗霊夢」でも構いません、ただし、「"」で囲むのを忘れない様に("これを忘れたらエラーになりますよ")

ビルドして試してみる

実際にビルドしてBukkitで利用出来る様にしてみましょう。

簡単です、プロジェクトを右クリックして「実行->Maven install」を選択して下さい。
bukkit-plugin-development-lecture-2-010

コンソールにゴニョゴニョっと文字が流れていきます、成功した場合は以下のように「BUILD SUCCESS」と表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.536 s
[INFO] Finished at: 20yy-0m-ddThh:mm:ss+09:00
[INFO] Final Memory: 14M/490M
[INFO] ------------------------------------------------------------------------

失敗した場合は「BUILD FAILURE」になります、普通は失敗する事なんて無いとは思いますけどね。

出来上がったプラグインは「プロジェクトのフォルダ\target」にありますよ。
bukkit-plugin-development-lecture-2-011

実際にBukkitのpluginフォルダに入れて起動してみて下さい。
きっと、以下のように表示されると思われます。

[Sample1] Enabling Sample1 v0.0.1-SNAPSHOT
[Sample1] Hello, world!

今回はとりあえずここまでと致しましょう、最後に、少し便利なTipsをご紹介しておきます。

オマケ:plugin.ymlの内容をpom.xmlと連動させる

plugin.ymlとpom.xmlの内容は異なっていても構わない事は説明しましたが、まず基本的に両者ともに同じです。

かと言って手で入力するのもなかなか面倒です、Mavenを利用する事で少し楽をしましょう。

まず、pom.xmlを開きます、きっと以下のようになっているでしょう。

<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">
  <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.jyn</groupId>
  <artifactId>Sample1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
    </repository>
  </repositories>
  <dependencies>
    <dependency>
      <groupId>org.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>
      <version>1.9.2-R0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

「</build>」の上に以下の内容を追記します。

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

きっと、以下のようになるでしょう。

<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">
  <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.jyn</groupId>
  <artifactId>Sample1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</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.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>
      <version>1.9.2-R0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

次に、plugin.ymlを開きます。

nameの値を「${project.artifactId}」に、versionの値を「${project.version}」にします、以下のようになると思われます。

main: jp.jyn.sample1.Sample1
name: ${project.artifactId}
version: ${project.version}

こうする事で、ビルドを行った際に自動でpom.xmlの内容に置き換えられます。

残念ながらmainは「小文字にする」方法がみつからなかったので出来ませんでしたが、バージョンなどのちょくちょく変更するがpom.xmlを更新しただけで良くなるのでとても楽になります。

最後に僕がいつも利用しているpom.xmlを掲載しておきましょう、ぜひ参考にしてみて下さい。

<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">
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.7</java.version>
  </properties>
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.jyn</groupId>
  <artifactId>Sample1</artifactId>
  <version>0.1</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</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.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>
      <version>1.9.4-R0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

其之三は「[Bukkitプラグイン制作講座-其之三]コマンドに応答する」へどうぞ

今回の記事のソースコードはGitHubからご覧いただけます。

 - プログラミング , ,