使用Eclipse搭建Minecraft的插件开发环境

首先

我一年前在VPS上发布了有关搭建Minecraft多人服务器环境的文章。
这次是那篇文章的续篇,虽然有点晚。

仕事の都合でJavaを勉強する機会があり、せっかくなのでMinecraftのプラグインを作るかと重い腰を上げた次第です。実は、数カ月前にJava Day Tokyoに行く機会があったのですが、そこでこんな本を買っていたのでした。

「マインクラフトでマルチサーバーを立てよう! (Think IT Books)」

この本はecolightさんによるThink IT連載が書籍化したものです。この本ではプラグインの開発環境としてNetBeansを用いた方法が紹介されています。説明がわかりやすくおすすめです。

この記事では私が普段使用しているEclipseを用いたプラグイン開発環境整備の備忘録として残します。
エンジニア一年目で開発は素人に毛が生えた程度なので間違っている点はぜひご指導ください。

正在招募能共同开发插件的人

概要

はじめに前回の続きとしてサーバーMODである「Spigot」を導入する方法を紹介します。
次に、EclipseとMavenを使ったプラグイン開発のための初期設定をします。
最後に、テストプラグインをビルドしてサーバー上で動かしてみます。

安装Spigot

すでにバニラサーバー(公式のサーバー)が動かせる状態にある前提で話を始めます。
バニラサーバーの導入方法については前回書いた記事を参考にしてもらえたらと思います(ただし書いたのが一年以上前なので情報が古くなっているかもしれません)。
サーバーMOD利用経験者の方にとってはおなじみの作業だと思うので、適宜読み飛ばしてください。

安装Git

サーバーMODであるspigotはライセンスなどの問題(詳しくは知りませんが)で実行ファイルが公開されていません。そのかわりに、利用者が公開されているソースコードから実行ファイルを生成するという形をとっています。実行ファイルを生成するためのツール「BuildTools」も公開されています。

はじめに、ソースコードをダウンロードするためのツール「git」をインストールします。

[root@host-150-95-181-84 ~]# yum install git -y

下载Buildtools

BuildToolsはここからダウンロードできます。最新版のダウンロードURLはhttps://hub.spigotmc.org/jenkins/job/BuildTools/lastStableBuild/artifact/target/BuildTools.jarになっています。

[root@host-150-95-181-84 ~]# wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastStableBuild/artifact/target/BuildTools.jar

进行构建

使用Buildtools生成服务器的可执行文件。
运行Buildtools会生成多个文件,所以最好在单独的文件夹内进行操作。

[root@host-150-95-181-84 ~]# mkdir buildtools
[root@host-150-95-181-84 ~]# mv BuildTools.jar buildtools/
[root@host-150-95-181-84 ~]# cd buildtools/
[root@host-150-95-181-84 buildtools]#

可以在本页面上找到执行Buildtools命令的指示。
如果要指定版本,请

java -jar BuildTools.jar --rev 1.12.1

如果要将其升级到最新版本的话,将会变得如此。

java -jar BuildTools.jar --rev latest

這樣做。
這次我們不特別關注版本,所以會選擇最新版本。
執行指令後,將自動下載並編譯原始碼,並生成伺服器執行檔。

[root@host-150-95-181-84 buildtools]# java -jar BuildTools.jar --rev latest
~~ 中略(結構時間かかります) ~~
Success! Everything compiled successfully. Copying final .jar files now.
Copying craftbukkit-1.12.2-R0.1-SNAPSHOT.jar to /root/buildtools/.
  - Saved as craftbukkit-1.12.2.jar
Copying spigot-1.12.2-R0.1-SNAPSHOT.jar to /root/buildtools/.
  - Saved as spigot-1.12.2.jar
[root@host-150-95-181-84 buildtools]# ls
apache-maven-3.5.0  BuildTools.log.txt  craftbukkit-1.12.2.jar  work
BuildData           Bukkit              Spigot
BuildTools.jar      CraftBukkit         spigot-1.12.2.jar
[root@host-150-95-181-84 buildtools]#

生成実行文件spigot-1.12.2.jar表示构建成功(当前最新版本为1.12.2)。

Spigotの起動

将Spigot的可执行文件复制到服务器目录中并启动。
这一部分与基准服务器相同。

[root@host-150-95-181-84 buildtools]# cd ..
[root@host-150-95-181-84 ~]# mkdir server
[root@host-150-95-181-84 ~]# cp buildtools/spigot-1.12.2.jar server/
[root@host-150-95-181-84 ~]# cd server/
[root@host-150-95-181-84 server]java -jar spigot-1.12.2.jar nogui
Loading libraries, please wait...
[01:53:34 INFO]: Starting minecraft server version 1.12.2
[01:53:34 WARN]: To start the server with more ram, launch it as "java -Xmx1024M -Xms1024M -jar minecraft_server.jar"
[01:53:34 INFO]: Loading properties
[01:53:34 WARN]: server.properties does not exist
[01:53:34 INFO]: Generating new properties file
[01:53:34 WARN]: Failed to load eula.txt
[01:53:34 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[01:53:34 INFO]: Stopping server

就像Vanilla服务器一样,必须要修改eula.txt文件。

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Mon Sep 25 01:53:34 JST 2017
eula=true

我会再次运行Spigot。
这次应该能正常启动。

[root@host-150-95-181-84 server]# java -Xmx512M -Xms512M -jar spigot-1.12.2.jar nogui

当您第一次启动后,与原始的香草服务器不同,将生成一个名为”plugins”的文件夹。从下次启动开始,如果插件文件位于此文件夹中,系统将加载这些插件文件。

[root@host-150-95-181-84 server]# ls
banned-ips.json      commands.yml  logs             plugins            spigot.yml      world
banned-players.json  eula.txt      ops.json         server.properties  usercache.json  world_nether
bukkit.yml           help.yml      permissions.yml  spigot-1.12.2.jar  whitelist.json  world_the_end

搭建插件开发环境。

前置きが長くなってしまいましたが、ここからが本題です。
今回はEclipseを使ってプラグインの開発環境構築をしていきます。

安装Eclipse

image.png

今回はMavenを使うので一番上を選択すればいいでしょう。(他は使ったことが無いです)
ワークスペースの場所を決める画面が出ると思いますが、特に気にならないのであればデフォルトのままでいいでしょう。
Gitと連携する場合などは適宜変更してください。

创建Maven项目

image.png

首先,需要将默认的文本编码更改为UTF-8。
选择菜单栏->窗口->首选项,打开设置窗口,然后进入常规->工作空间,将文本文件编码更改为UTF-8,并点击应用和关闭。

image.png

我们将创建一个Maven项目。
选择菜单栏->文件->新建->其他或使用Ctrl+N进入新建界面。

image.png

在Maven中,选择Maven Project,然后点击下一步。

image.png

点击“Create a simple project”进行选择。
如果保持未勾选,将可以使用名为“雛形”的项目原型,但这次不使用。
点击“Next”将进入下一个界面。

image.png

Group Idはプロジェクトを一意に見分けるための名前になります。ルートパッケージ名にするのが一般的らしいです。
他のIdとの重複を避けるために、独自ドメインを逆順にしたものを使用すると良いみたいです。(私の場合はttk1.netを持っているのでnet.ttk1を使用します。)
特に公開するわけではないのであれば重複を気にする必要はありません。

Artifact Idは生成される実行ファイルの名前になります。今回はtest_pluginにします。
デフォルトでVersionは0.0.1-SNAPSHOT、Packagingはjarになっているので、生成されるファイルは「test_plugin-0.0.1-SNAPSHOT.jar」になります。今回はデフォルトのままにしておきます。

点击”Finish”按钮将会生成一个空的项目。

pom.xml文件的描述

SpigotAPIを使うためにはそのパッケージファイルをダウンロードする必要があります。
Mavenプロジェクトではpom.xmlファイルに、必要なパッケージファイルの情報を記述しすることで自動でダウンロードしてくれます。
SpigotAPIのための記述内容はここにあるものを利用できます。下の画像の赤線で囲んだ部分をコピーします。
ただし、versionをSpigotサーバーと同じにする必要があります。(今回は1.12.2-R0.1-SNAPSHOTなのでそのままコピーします。)

image.png

SpigotAPIとBukkitAPIの両方の記述があるのでSpigotAPIの部分だけを使用します。

image.png

pom.xmlを更新すると自動でMaven Dependency内にパッケージファイルがダウンロードされます。

创建主类

まず、パッケージを作成します。
Package Explorerでsrc/main/javaを右クリック->New->Packageを選択します。
nameには先ほど入力したGroup Idと同じものを入力します。

image.png

次に、メインクラスを作成していきます。
Package Explorerでnet.ttk1を右クリック->New->Classを選択します。
Testクラスを作成します。

image.png

テストとして、ログイン時に「Welcome to my world!」というメッセージを表示するクラスを作成します。
今回はプログラム内容についての説明は省略しますが、Test.javaの記述は次のようになります。

package net.ttk1;

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

public class Test extends JavaPlugin {
    @Override
    public void onEnable() {
        //ログインメッセージの表示設定
        getServer().getPluginManager().registerEvents(new LoginMsg(), this);
        //開始時のログ出力
        getLogger().info("test enable");
    }

    @Override
    public void onDisable() {
        //停止時のログ出力
        getLogger().info("test disable");
    }

    class LoginMsg implements Listener {
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent event) {
            event.getPlayer().sendMessage("Welcome to my world!");
        }
    }
}

插件配置文件(plugin.yml)的描述

plugin.ymlはSpigotサーバーがプラグインを読み込むために必要なファイルです。
ここに詳しい内容が書いてあります。
name、version、mainの三項目が必須のようです。
nameはプラグインを識別する名前で、サーバー上でプラグインのデータを保存するディレクトリ名にも使用されます。
versionはプラグインのバージョンです。Mavenプロジェクトのバージョンでも入れておきましょう。
mainはメインクラス(今回はTestクラス)の完全修飾名を入れましょう。

name: test_plugin
version: 0.0.1
main: net.ttk1.Test

plugin.ymlは「src/main/resources」に作成します。
Package Explorerでsrc/main/resourcesを右クリック->New->Fileを選択します。

image.png

编译并运行测试插件。

让我们构建项目。
选择菜单栏->运行->运行配置,然后会显示以下画面,右击“Maven Build”,选择新建。

image.png

接下来会显示出下一个画面。

image.png

赤線で囲ったWorkspaceをクリックすると、プロジェクトの選択画面が出るので「test_plugin」を選択します。
するとBase directoryに文字列が入力されます。

在Goals中,输入”package”。

如果不指定JDK,构建将会失败。内容正在修正中。

点击“Run”按钮将开始构建。
如果显示如下内容,则表示构建成功。

image.png

有警告产生,但这是在pom.xml的~标签内发生的。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

当你加上追加信息时,它会消失。

将已经创建好的插件上传到服务器的plugins文件夹中。
插件已保存在”Building jar:”行所显示的位置。

你可以将文件上传保存到Dropbox或GoogleDrive上,并从服务器上使用wget等方法获得共享链接,但是使用scp命令是最快捷的选项。

$ scp C:/Users/tama/eclipse-workspace/test_plugin/target/test_plugin-0.0.1-SNAPSHOT.jar root@150.95.181.84:./server/plugins
root@150.95.181.84's password:
test_plugin-0.0.1-SNAPSHOT.jar                100% 3245   299.0KB/s   00:00

让我们启动Spigot服务器。

[root@150-95-181-84 server]#java -Xmx512M -Xms512M -jar spigot-1.12.2.jar nogui
Loading libraries, please wait...
[03:44:26 INFO]: Starting minecraft server version 1.12.2
~~ 中略 ~~
[03:44:27 INFO]: [test_plugin] Loading test_plugin v0.0.1
~~ 中略 ~~
[03:44:31 INFO]: [test_plugin] Enabling test_plugin v0.0.1
[03:44:31 INFO]: [test_plugin] test enable
[03:44:31 INFO]: Server permissions file permissions.yml is empty, ignoring it
[03:44:31 INFO]: Done (4.552s)! For help, type "help" or "?"
>

插件看起来已经成功加载了。让我们尝试从Minecraft客户端进行连接。

image.png

Welcome to my world!が表示されました!

这次有点难,对吗?

总结

EclipseとMavenを用いてプラグインの開発環境を構築しました。
今回はプラグインを作ることが目的ではなかったので、作ったのは単純なプラグインでしたが、SpigotAPIは他にももっと機能があります。便利なプラグインを作ってMinecraftを盛り上げていきましょう。

由于冲动而写得很匆忙,可能存在错误的信息、不合适的表达或拼写错误。如果有人发现,请指正给我。

请在中国当地改写以下内容,只需要一个选项:

参考文章。

在安装到创建项目中,使用Eclipse+Maven这个方便的开发环境来创建一个多人服务器的Minecraft!(Think IT Books)连载:使用Minecraft来创建多人服务器!插件开发的基础

广告
将在 10 秒后关闭
bannerAds