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 CodexePasso per passo
1.Crea un progetto Gradle con Kotlin DSL
Un
build.gradle.ktscon il pluginkotlin("jvm"), una toolchain Java adatta alla tua versione di Minecraft (17, 21 o 25) e il repository di PaperMC.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.Scrivi la classe principale
class MyPlugin : JavaPlugin()conoverride fun onEnable(). Registra comandi e listener esattamente come in Java.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
librariesinplugin.yml. Senza una delle due il plugin si ferma conNoClassDefFoundError: kotlin/....5.Scrivi il plugin.yml
Lo stesso file di un plugin Java: nome, versione, main (la classe Kotlin),
api-version, comandi e permessi.6.Compila e prova
./gradlew shadowJar(obuild), copia il .jar dabuild/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?
| Funzione | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | La stessa API di Paper / Spigot |
| Build | Maven o Gradle | Gradle con build.gradle.kts |
| Extra a runtime | Niente | Libreria standard di Kotlin, inclusa o caricata |
| Tutorial ed esempi | La maggior parte | Meno, 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