Opas

Miten tehdä Minecraft-plugin Kotlinilla

Päivitetty 18. lokakuuta 2026

Kotlin toimii JVM:ssä, joten Kotlin-plugin käyttää samaa Paper- tai Spigot-API:a, samaa tiedostoa plugin.yml ja samaa plugins/-kansiota kuin Java-plugin. Koodi on lyhyempää ja null-turvallista. Ainoa asia, josta Java-pluginien ei tarvitse huolehtia, on Kotlinin standardikirjasto: palvelin ei sisällä sitä, joten pluginin täytyy tuoda se mukanaan.

Aloita tästä esimerkistä.

Generoi tämä Codexella

Vaihe vaiheelta

  1. 1.Luo Gradle-projekti Kotlin DSL:llä

    build.gradle.kts, jossa on kotlin("jvm")-plugin, Minecraft-versiotasi vastaava Java-työkaluketju (17, 21 tai 25) ja PaperMC-repositorio.

  2. 2.Lisää palvelimen API

    compileOnly("io.papermc.paper:paper-api:<version>"). Kuten Javassa, palvelin tarjoaa sen ajon aikana, joten sitä ei koskaan paketoida mukaan.

  3. 3.Kirjoita pääluokka

    class MyPlugin : JavaPlugin() ja override fun onEnable(). Rekisteröi komennot ja kuuntelijat täsmälleen kuten Javassa.

  4. 4.Tuo Kotlinin standardikirjasto

    Paketoi se .jar-tiedostoon Shadow-pluginilla tai anna palvelimen ladata se käynnistyksessä tiedoston plugin.yml libraries-listan kautta. Ilman jompaakumpaa plugin kaatuu virheeseen NoClassDefFoundError: kotlin/....

  5. 5.Kirjoita plugin.yml

    Sama tiedosto kuin Java-pluginissa: nimi, versio, main (Kotlin-luokka), api-version, komennot ja oikeudet.

  6. 6.Kokoa ja testaa

    ./gradlew shadowJar (tai build), kopioi .jar kansiosta build/libs/ testipalvelimelle ja lue konsoli käynnistyksen aikana.

Kotlin palvelimelle

  • Shadaa se: Shadow-Gradle-plugin kopioi Kotlinin standardikirjaston ja muut ajonaikaiset kirjastot .jar-tiedostoosi. Se toimii jokaisessa versiossa ja on yleisin valinta.
  • libraries tiedostossa plugin.yml: Spigot 1.16.5:stä alkaen plugin voi listata Maven Centralin kirjastoja, jotka palvelin lataa ja ottaa käyttöön sen puolesta. .jar pysyy pienenä, mutta palvelin tarvitsee internetyhteyden ensimmäisellä käynnistyskerralla.
  • Lisäämäsi kirjastot: kotlinx-coroutines on erillinen kirjasto, ei osa standardikirjastoa, ja sekin täytyy paketoida mukaan. Sen siirtäminen omaan pakettiisi (relocate) välttää törmäykset muiden pluginien kanssa, jotka paketoivat toisen version.

Korutiinit ja pääsäie

Korutiinit ovat siisti tapa ladata dataa tietokannasta jäädyttämättä palvelinta, mutta Bukkit API:a (maailmat, entiteetit, inventaariot) täytyy silti käyttää pääsäikeestä. Tee hidas työ taustadispatcherilla ja vaihda sitten ajastimen avulla takaisin palvelimen säikeeseen ennen kuin kosket peliin. Sido korutiinien scope pluginiin, jotta se peruutetaan metodissa onDisable().

Java vai Kotlin?

OminaisuusJavaKotlin
APIPaper / SpigotSama Paper / Spigot API
KoontiMaven tai GradleGradle ja build.gradle.kts
Ajonaikaiset lisätEi mitäänKotlinin standardikirjasto, paketoituna tai ladattuna
Tutoriaalit ja esimerkitSuurin osaVähemmän, mutta Java-esimerkit kääntyvät suoraan

Codexella

Valitse Bukkit/Spigot/Paper (Kotlin). Codexe generoi Gradle-projektin, jossa on build.gradle.kts, Paper API, Shadow-plugin sen paketoimiseen, mitä palvelin ei tarjoa, sekä korutiinit paketoituina ja siirrettyinä, kun koodi käyttää niitä. Se kääntää pluginin ennen kuin se on valmis, ja Kotlin-plugineja voi kokeilla testipalvelimella ja testipelaajat voivat tarkistaa ne samoin kuin Java-pluginit. Katso Kotlin-plugingeneraattori.

"Paper 1.21.4 -plugin Kotlinilla nimeltä Bounties: /bounty set <player> <amount> Vaultin kautta, tappaja saa palkkion, /bounty top näyttää 10 suurinta, tallennus SQLiteen ja tietokantakäsittely korutiineilla. Käytä data-luokkia ja laajennusfunktioita, pidä Bukkit API -kutsut pääsäikeessä."

Kysymykset

Onko Kotlin-plugin hitaampi kuin Java-plugin?

Ei merkittävää eroa: molemmat kääntyvät JVM-tavukoodiksi. .jar on suurempi, kun standardikirjasto on paketoitu mukaan.

Voinko yhdistää Javaa ja Kotlinia yhdessä pluginissa?

Kyllä, Gradle kääntää molemmat samassa projektissa, ja Kotlin-koodi kutsuu Java-luokkia suoraan.

Miksi kotlin-luokista tulee NoClassDefFoundError?

Kotlinin standardikirjasto ei ole .jar-tiedostossa tai sitä ei ladata. Kokoa komennolla shadowJar ja asenna se .jar, tai lisää kirjasto kohtaan libraries tiedostossa plugin.yml.

Tee Kotlin-plugin

Tämä kehote aukeaa valmiina lähetettäväksi:

“Paper 1.21.4 -plugin Kotlinilla nimeltä Bounties: /bounty set <player> <amount> Vault-taloutta käyttäen, tappaja saa palkkion, /bounty top näyttää 10 suurinta, palkkiot tallennetaan SQLiteen ja tietokantaa käsitellään korutiineilla, Bukkit API -kutsut pääsäikeessä, viestit config.yml-tiedostossa.”

Generoi tämä Codexella
Miten tehdä Minecraft-plugin Kotlinilla (Paper) | Codexe