【Bukkit,Spigot,Paper】plugin.yml も build.gradle.kts を書く

## plugin-yml
https://github.com/Minecrell/plugin-yml

これを使います。例には `build.gralde` もあるのでそちらがいい人はやってみてください。

ちなみに、kotlin-dsl の例は間違っています。コマンドやパーミッションの設定が出来ません。
`"test"` を `register("test")`
`"testplugin.*"` を `register("testplugin.*")` 
に変更すればできます。詳しくはこの記事の下の方で解説しています。

## Gradle
build.gradle.kts だけを用意してあります。~~build.gradle の例、誰か書いてくれませんかね~~
自分に合ったものを選んで ▶ を押してください。
**`@TODO` になっている箇所を編集してください**

### build.gradle (Groovy)
待ってます。

### build.gradle.kts (Kotlin)

`build.gradle` になっている人はファイル名を変更して、`build.gradle.kts` にしてください。
文法が少し違うので、修正しないとエラーになると思います。

#### 例

<details><summary><b>Spigot 1.15.2 + Java</b></summary><div>

```build.gradle.kts
plugins {
    java
    id("net.minecrell.plugin-yml.bukkit") version "0.3.0"
}

group = "" // @TODO ここを編集
version = "1.0" // @TODO ここを編集

repositories {
    mavenCentral()
    maven {
        url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots")
    }
    maven {
        url = uri("https://oss.sonatype.org/content/repositories/snapshots")
    }
}

dependencies {
    implementation("org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT")
}

bukkit {
    // 詳しく説明します
}

val jar by tasks.getting(Jar::class) {
    from(configurations.compileOnly.get().map {
        if (it.isDirectory) it else zipTree(it)
    })
}
```

</div>
</details>

<details><summary><b>Paper 1.15.2 + Kotlin</b></summary><div>

```build.gradle.kts
plugins {
    kotlin("jvm") version "1.3.72"
    id("net.minecrell.plugin-yml.bukkit") version "0.3.0"
}

group = "" // @TODO ここを編集
version = "1.0" // @TODO ここを編集

repositories {
    mavenCentral()
    maven {
        url = uri("https://papermc.io/repo/repository/maven-public/")
    }
}

dependencies {
    implementation("com.destroystokyo.paper:paper-api:1.15.2-R0.1-SNAPSHOT")
    compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}

bukkit {
    // 詳しく説明します
}

tasks {
    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
}

val jar by tasks.getting(Jar::class) {
    from(configurations.compileOnly.get().map {
        if (it.isDirectory) it else zipTree(it)
    })
}
```
</div>
</details>

#### bukkit {} を書く
##### 最低限

```kotlin
bukkit {
    main = "" // @TODO JavaPlugin を継承してるクラスへのパス
    apiVersion = "1.15"
        // 1.13.X なら 1.13
        // 1.14.X なら 1.14
        // 1.15.X なら 1.15
        // 1.16.X なら 1.16
}
```

でも、`author` くらいは書いておいた方がいいと思います。

##### 例のやつ
GitHubのものを適当に修正しました。対応させられれば完璧に書けますね。

```kotlin
bukkit {
    main = "com.example.testplugin.TestPlugin"
    apiVersion = "1.13"
    load = BukkitPluginDescription.PluginLoadOrder.STARTUP // or POSTWORLD 
    authors = listOf("Notch", "Notch2")
    depend = listOf("WorldEdit")
    softDepend = listOf("Essentials")
    loadBefore = listOf("BrokenPlugin")
    prefix = "TEST"
    defaultPermission = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP
    
    commands {
        register("test") {
            description = "This is a test command!"
            aliases = listOf("t")
            permission = "testplugin.test"
            usage = "Just run the command!"
            // permissionMessage = "You may not test this command!" 
        }
        // ...
    }
    
    permissions {
        register("testplugin.*") {
            children = listOf("testplugin.test")
        }
        register("testplugin.test") {
            description = "Allows you to run the test command"
            default = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP
        }
        // ...
    }
}
```


## 最後に
編集する場所が減るのは素晴らしいですね。Bukkit だけではなく、BungeeCord や Nukkitにも対応してます。
プロジェクトの更新(バージョンアップとか)への対応も楽になるので、是非使ってみてください。
説明が足りない部分もあるかと思うので、編集リクエストは遠慮せずしてください。