最速で作るKotlin Minecraft Plugin開発 B-1 ライブラリの入れ方

# 概要
1. build.gradleの記述
2. ライブラリの選び方、調べ方
3. 筆者オススメ 

# build.gradleの記述

ライブラリやフレームワークというのはざっくり分かりやすく言うなら「ある物事を達成するために使いやすくされたプログラム」です。正式な定義はもう少し異なりますが、現時点ではこの理解で問題ないです。
ライブラリやフレームワークというのはそのままだと使いづらいSpigotのコマンド追加やGUI追加などを非常にやりやすくしてくれるため、使えるときはじゃんじゃん使っていきましょう。
ライブラリやフレームワークを自分のプロジェクトに導入するときはbuild.gradleに対して依存関係の追加と解決を行わなければなりません。
ライブラリやフレームワークを積極的に使うのは賛否両論ありますが
1. 早く実装できる
2. メンテナンスがしやすい
3. コードが少なくなることが多い
等の理由があるため、このシリーズでは積極的に使うことを推奨するという形にします。
大抵の場合自分がメンテナンスがめんどくさくなる確率の方がライブラリの開発元がメンテナンスを終了する確率よりも高いです。

ライブラリやフレームワークだけでなく、他のプラグインのAPIを使用したい(= 他のプラグインの機能を借りたい)時にも同様のことを行います。

---

今回はサンプルとして[Weapons Mechanics](https://github.com/WeaponMechanics/MechanicsMain)のAPIを使用するために依存関係に追加したいと思います。


現時点でbuild.gradleは多少違いはあれど、下記のようになっていると思います。

```gradle
plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm'
    id "com.github.johnrengelman.shadow" version "8.1.1"
}

group = 'com.github.ryuzu'
version = '1.0.0'

repositories {
    mavenCentral()
    maven {
        name = "papermc-repo"
        url = "https://repo.papermc.io/repository/maven-public/"
    }
    maven {
        name = "sonatype"
        url = "https://oss.sonatype.org/content/groups/public/"
    }
}

dependencies {
    compileOnly "io.papermc.paper:paper-api:1.20.6-R0.1-SNAPSHOT"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}

// 省略
```

---

Weapons MechanicsのドキュメントにはGradleに下記のように追記すればAPIが使えるよと書かれているので、追記します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629918/c84379e8-ced8-a37c-b6ef-de2177ca86d7.png)

この時、自分の持っているファイルのbuild.gradleには既にrepositoriesのカッコの中に「mvenCentral()」が既に入っているため、重複して書く必要がないことが分かります。

加えてこのドキュメントに書かれているのはbuild.gradleでの書き方ではなく、build.gradle.ktsの書き方です。親戚みたいなもので書き方が微妙に異なります。
この時は一度コピペをして既に自分持っているbuild.gradleにフォーマットを合わせるようにしましょう。
```
implementation("com.cjcrafter:weaponmechanics:3.4.1")
-->
implementation "com.cjcrafter:weaponmechanics:3.4.1" 
```
こうなりますね。

---

```gradle
plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm'
    id "com.github.johnrengelman.shadow" version "8.1.1"
}

group = 'com.github.ryuzu'
version = '1.0.0'

repositories {
    mavenCentral()
    maven {
        name = "papermc-repo"
        url = "https://repo.papermc.io/repository/maven-public/"
    }
    maven {
        name = "sonatype"
        url = "https://oss.sonatype.org/content/groups/public/"
    }
}

dependencies {
    compileOnly "io.papermc.paper:paper-api:1.20.6-R0.1-SNAPSHOT"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    implementation "com.cjcrafter:weaponmechanics:3.4.1" 
}

// 省略
```

よって最終的なbuild.gradleの中身はこうなります。

どうしても分からなければChatGPTにお願いしましょう。解説も頼むとよいと思います。

build.gradleを編集したら毎度Ctrl + Shift + oのショートカットを実行してください(右上にボヤっと出てくるgradleアイコンをクリックでもよいです。環境構築編でも同じようなことをやりましたね)


# ライブラリの選び方、調べ方
### 選び方
1. ダウンロード数、スター数などが多い
2. 長期的にメンテナンスされている(= 対応バージョンが多い。最新のバージョンまで対応している)

同じような機能を持つライブラリは多いので、上記の点を意識して選択しましょう。

### 調べ方
1. 「Spigot 〇〇 Library」で検索(例: 「Spigot Inventory Library」「Spigot Command Library」
2. [Spigotのライブラリ一覧ダウンロード数順](https://www.spigotmc.org/resources/categories/libraries-apis.26/?order=download_count)で良さそうなのを見つける。

# 筆者オススメ

ここではライブラリ、フレームワーク、API利用プラグインを紹介していきます。

-  [Command API](https://www.spigotmc.org/resources/api-commandapi-1-16-5-1-21.62353/) - コマンド実装 -
-  [Inventory Framework](https://www.spigotmc.org/resources/if-inventory-framework.57216/) - GUIの追加 -
- [Vault](https://www.spigotmc.org/resources/vault.34315/) - 通貨要素の実装 -
- [NBT API](https://www.spigotmc.org/resources/nbt-api.7939/) - NBTの編集 -
- [Protocol Lib](https://www.spigotmc.org/resources/protocollib.1997/) - パケット操作 -
- [Oraxen](https://www.spigotmc.org/resources/%E2%98%84%EF%B8%8F-oraxen-custom-items-blocks-emotes-furniture-resourcepack-and-gui-1-18-1-20-6.72448/) - 独自アイテムの追加と管理 -
-  [MythicMobs](https://mythiccraft.io/index.php?pages/official-mythicmobs-download/&version=5.6.2)
-  [Placeholder API](https://www.spigotmc.org/resources/placeholderapi.6245/) - Placeholderの簡単な追加 -
-  [UltimateAdvancement API](https://www.spigotmc.org/resources/ultimateadvancementapi-1-15-1-21.95585/) - 独自実績の追加 -


ここではMinecraft関連のものはSpigotのページを示していますが、Spigotページに詳しい使い方が書かれてない場合、Source Codeという部分に書かれているURLをクリックするとより詳しい依存関係の追加方法や開発者向けドキュメントが存在する場合があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629918/0a37cae6-cf1b-0875-0140-da105d70e6e1.png)


# 結
お疲れさまでした。

[目次](https://qiita.com/Y_RyuZU/items/c2c42fa05be49f5739d7)
[前の話](https://qiita.com/Y_RyuZU/items/bce27a3072fd5c630f66)
[次の話]()