SpigotをVSCodeで書く

#SpigotをVSCodeで書く  
マイクラのプラグインを作りたい。でもEclipseは使いたくない、VSCodeを使わせろって人向けに[SpigotMC公式wiki](https://www.spigotmc.org/wiki/creating-a-blank-spigot-plugin-in-vs-code/) を雑に日本語訳したものです。
多少の意訳および自分の環境[^1]でうまくいかなかった部分を動くように変更が入っていることをご了承ください。

##前提条件
1. VSCodeに [java Extension pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)がインストールされていること。
2. [OpenJDK](https://openjdk.java.net/)が入っていること。(java Extension packがOpenJDKを必要としています。)
3. [Apache Maven](https://maven.apache.org/)も必要です。
4. 基本的なjavaの知識を持っていること。
5. プラグインのgroupID、packageのために使用可能なインターネットドメイン、もしくはメールアドレスの一部など一意な名前を用意できること。

##ワークスペースの準備
VSCoedeでワークスペースを作成し、設定を行います。
ウインドウメニューから、もしくはdefault.code-workspaceを編集することで設定は変更することが出来る。

**files.autoGuestEncoding**：
チェックボックスにチェックをつける。[^2]

**files.encoding**：
utf8を指定する。

**java.home**：
OpenJDKの絶対パス指定する。

**java.jdt.ls.vmargs**：
Java Language Serverを起動するための追加のJava VM引数を設定します。
"-Dfile.encoding=UTF-8"に設定する。[^2] 

**javac-linter.javac**：
実行可能なjavacを設定します。
javacの引数に"-Dfile.encoding=UTF-8"を指定する。[^2]

最終的に"default.code-workspace"は下のようになっているはずです。
>```
{
    "folders": [
        {
            "path": "."
        }
    ],
    "settings": {
        "files.autoGuessEncoding": true,
        "files.encoding": "utf8",
        "java.home": "C:\\openjdk-1.8.0",
        "java.jdt.ls.vmargs": "-Dfile.encoding=UTF-8",
        "javac-linter.javac": "javac -Dfile.encoding=UTF-8"
    }
}
```

##空のプラグインの作成
ワークスペースのディレクトリを右クリックして"Generate from Maven Archetype"をクリックする。
VSCodeのウインドウの上部に表示されるメニューから"maven-archetype-quickstart"クリックする。[^3]
バージョンの選択画面が出る場合は最新(2.0)を選べばよい。
エクスプローラが開くのでワークスペースを選択する。

ターミナルでプロジェクトの設定をいくつか尋ねられる。

**groupId**:
package名を入力
**artifactId**:
バージョン番号を除いたプラグインの名前を入力
**version**：
プラグインのバージョン番号を入力。なにも入力せずにEnterを押すと"1.0-SNAPSHOT"になる。
**package**：
そのままEnterキーを押してデフォルトを使用することを推奨。デフォルトではgroupIdになる。

その後、MavenからMavenプロジェクトの設定の確認を求められる。
それで正しいのならY、もしくはEnterを押すことで確定する。
"BUILD SUCCESS"という文がターミナルに出てきたら、pluginのディレクトリからpom.xmlを開き、下記のように編集する。

**Note:下記はgroupIdを“dev.cibmc.spigot.blankplugin”にした場合である**
>```
<?xml version="1.0" encoding="UTF-8"?>
<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>dev.cibmc.spigot.blankplugin</groupId>
  <artifactId>BlankPlugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <repositories>
      <repository>
          <id>spigot-repo</id>
          <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
      </repository>
  </repositories>
  <dependencies>
      <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.12.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
      </dependency>
  </dependencies>
  <build>
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
        <includes>
          <include>plugin.yml</include>
        </includes>
      </resource>
    </resources>
  </build>
</project>
```

もちろん、SpigotAPIのバージョンは変更することが出来る。

[projectBaseDir]/src/main にresourcesディレクトリを作成し、その中にplugin.ymlを作成する。
下記はplugin.ymlの例である。
>```
main: dev.cibmc.spigot.blankplugin.App
name: BlankPlugin
version: 0.1
```

---
ここは元の記事にはない部分
ただし自分の環境[^1]ではversinの内容はダブルクォートで囲む必要があり、api及びapi-versionという項目が必要になった。
apiはマインクラフトのバージョン(例1.16.2)、api-versionはSpigotのAPIのバージョン(例1.16)を指定する。

よって、以下のようにすることで正常に動作する。(バージョン1.16.2の場合)

>```
main: dev.cibmc.spigot.blankplugin.App
name: BlankPlugin
version: "0.1"
api: 1.16.2
api-version: 1.16
```

---

この時点でワークスペースのディレクトリツリーは以下のようになっているはず。
BlankPlugin
　┣ src
　┃　┣ main
　┃　┃　┣ java
　┃　┃　┃　┗ dev
　┃　┃　┃　　　┗ cibmc
　┃　┃　┃　　　　　┗ spigot
　┃　┃　┃　　　　　　　┗ blankplugin
　┃　┃　┃　　　　　　　　　┗ App.java
　┃　┃　┗ resources
　┃　┃　　　┗ plugin.yml
　┃　┗ test
　┣ target
　┗ pom.xml

MAVENパネルから"BrankPlugin"を右クリックし、メニューから"install"を選択する。
ターミナルに"BUILD SUCCESS"が表示されたことを確認する。

**Note：例として用意したgroupIdである"dev.cibmc.spigot.blankplugin"はあなたがプラグインを作成するときはあなた自身のgroupIdに変更すること。**

**Note 2：もし、あなたがメインクラスの名前でAPPを使いたくないのならば、ファイルをリネームし、クラス名を変更し、plugin.ymlでのmainの定義を変更すること。**

## blank pluginを作成
前章で作成したディレクトリでApp.javaファイルを開く。(もしくはファイルをリネームしていればそのファイル)
下記は例のコードである。
>```java
package dev.cibmc.spigot.blankplugin;
import org.bukkit.plugin.java.JavaPlugin;
public class App extends JavaPlugin {
    @Override
    public void onEnable() {
        getLogger().info("Hello, SpigotMC!");
    }
    @Override
    public void onDisable() {
        getLogger().info("See you again, SpigotMC!");
    }
}
```

"Classpath is incomplete. Only syntax errors will be reported."がVSCodeの右下に表示されるときは、MAVENパネルから"BrankPlugin"を右クリックして、メニューから"custom goals ..."を選択する。
その後、VSCodeウインドウの上部の入力欄に"eclipse:eclipse"を入力してEnterキーを押す。

最後にMAVENパネルから"BrankPlugin"を右クリックして"install"をもう一度選択する。
ビルドが成功するとtargetディレクトリにSpigotプラグインが生成されている。

##blank pluginを実行する
作成したプラグインをpluginディレクトリにコピーし、サーバーを起動する。
すると、下のようなサーバーログが表示される。
>```
[HH:MM:SS] [Server thread/INFO]: [BlankPlugin] Enabling BlankPlugin v1.0-SNAPSHOT
[HH:MM:SS] [Server thread/INFO]: [BlankPlugin] Hello, SpigotMC!
```

コンソールでstopコマンドを実行すると、下のようなログが表示される。
>```
[HH:MM:SS] [Server thread/INFO]: [BlankPlugin] Disabling BlankPlugin v1.0-SNAPSHOT
[HH:MM:SS] [Server thread/INFO]: [BlankPlugin] See you again, SpigotMC!
```

#参考文献
SpigotMC公式wiki(https://www.spigotmc.org/wiki/creating-a-blank-spigot-plugin-in-vs-code/)
[^1]: windows10,マイクラver1.16.x
[^2]: 自分の場合はつけてなくてもうまく動いた。
[^3]: 後ろにjdk-8等ついている場合があるが気にしなくてもOK