Guida

Come creare un plugin Minecraft in Kotlin

Aggiornato il 18 ottobre 2026

Kotlin gira sulla JVM, quindi un plugin in Kotlin usa la stessa API di Paper o Spigot, lo stesso plugin.yml e la stessa cartella plugins/ di uno in Java. Il codice è più corto e null-safe. L'unica cosa di cui i plugin Java non devono preoccuparsi è la libreria standard di Kotlin: il server non la include, quindi deve portarla il plugin.

Parti da questo esempio.

Generalo con Codexe

Passo per passo

  1. 1.Crea un progetto Gradle con Kotlin DSL

    Un build.gradle.kts con il plugin kotlin("jvm"), una toolchain Java adatta alla tua versione di Minecraft (17, 21 o 25) e il repository di PaperMC.

  2. 2.Aggiungi l'API del server

    compileOnly("io.papermc.paper:paper-api:<version>"). Come in Java, è il server a fornirla durante l'esecuzione, quindi non viene mai inclusa nel .jar.

  3. 3.Scrivi la classe principale

    class MyPlugin : JavaPlugin() con override fun onEnable(). Registra comandi e listener esattamente come in Java.

  4. 4.Porta con te la libreria standard di Kotlin

    Includila nel .jar con il plugin Shadow, oppure lascia che il server la scarichi all'avvio tramite la lista libraries in plugin.yml. Senza una delle due il plugin si ferma con NoClassDefFoundError: kotlin/....

  5. 5.Scrivi il plugin.yml

    Lo stesso file di un plugin Java: nome, versione, main (la classe Kotlin), api-version, comandi e permessi.

  6. 6.Compila e prova

    ./gradlew shadowJar (o build), copia il .jar da build/libs/ su un server di prova e leggi la console all'avvio.

Portare Kotlin sul server

  • Includila (shading): il plugin Gradle Shadow copia nel tuo .jar la libreria standard di Kotlin e le altre librerie che servono a runtime. Funziona su ogni versione ed è la scelta più comune.
  • libraries in plugin.yml: da Spigot 1.16.5 un plugin può elencare librerie di Maven Central che il server scarica e carica per lui. Il .jar resta piccolo, ma al primo avvio il server deve avere accesso a internet.
  • Librerie che aggiungi tu: kotlinx-coroutines è una libreria a parte, non fa parte della libreria standard, e va inclusa anche lei. Rilocarla in un tuo package evita conflitti con altri plugin che ne includono un'altra versione.

Coroutine e thread principale

Le coroutine sono un modo pulito per caricare dati da un database senza bloccare il server, ma l'API di Bukkit (mondi, entità, inventari) va comunque usata dal thread principale. Fai il lavoro lento su un dispatcher in background, poi torna al thread del server con lo scheduler prima di toccare il gioco. Lega lo scope delle coroutine al plugin, così viene annullato in onDisable().

Java o Kotlin?

FunzioneJavaKotlin
APIPaper / SpigotLa stessa API di Paper / Spigot
BuildMaven o GradleGradle con build.gradle.kts
Extra a runtimeNienteLibreria standard di Kotlin, inclusa o caricata
Tutorial ed esempiLa maggior parteMeno, ma gli esempi in Java si traducono direttamente

Con Codexe

Scegli Bukkit/Spigot/Paper (Kotlin). Codexe genera un progetto Gradle con build.gradle.kts, l'API di Paper, il plugin Shadow per includere quello che il server non fornisce, e le coroutine incluse e rilocate quando il codice le usa. Compila il plugin prima di dichiararlo pronto, e i plugin Kotlin si possono provare su un server di prova e far controllare ai giocatori di prova come quelli Java. Vedi il generatore di plugin Kotlin.

"Un plugin per Paper 1.21.4 in Kotlin chiamato Bounties: /bounty set <player> <amount> tramite Vault, chi uccide riceve la taglia, /bounty top mostra le 10 più alte, dati salvati in SQLite con le coroutine per l'accesso al database. Usa data class ed extension function, tieni le chiamate all'API di Bukkit sul thread principale."

Domande

Un plugin in Kotlin è più lento di uno in Java?

Nessuna differenza che si noti: entrambi vengono compilati in bytecode JVM. Il .jar è più grande quando include la libreria standard.

Posso mescolare Java e Kotlin in un plugin?

Sì, Gradle compila entrambi nello stesso progetto, e il codice Kotlin chiama direttamente le classi Java.

Perché ricevo NoClassDefFoundError per le classi kotlin?

La libreria standard di Kotlin non è nel .jar o non viene caricata. Compila con shadowJar e installa quel .jar, oppure aggiungi la libreria a libraries in plugin.yml.

Crea un plugin in Kotlin

Questo prompt si apre pronto da inviare:

“Un plugin per Paper 1.21.4 in Kotlin chiamato Bounties: /bounty set <player> <amount> con l'economia di Vault, chi uccide riceve la taglia, /bounty top mostra le 10 più alte, taglie salvate in SQLite con le coroutine per l'accesso al database, chiamate all'API di Bukkit sul thread principale, messaggi in config.yml.”

Generalo con Codexe
Come creare un plugin Minecraft in Kotlin (Paper) | Codexe