Guía
Cómo crear un plugin de Minecraft en Kotlin
Actualizado el 18 de octubre de 2026
Kotlin se ejecuta en la JVM, así que un plugin en Kotlin usa la misma API de Paper o Spigot, el mismo plugin.yml y la misma carpeta plugins/ que uno en Java. El código es más corto y seguro frente a nulos. Lo único de lo que los plugins en Java no tienen que preocuparse es la librería estándar de Kotlin: el servidor no la incluye, así que el plugin tiene que llevarla.
Empieza con este ejemplo.
Genera esto con CodexePaso a paso
1.Crea un proyecto Gradle con Kotlin DSL
Un
build.gradle.ktscon el pluginkotlin("jvm"), una toolchain de Java que coincida con tu versión de Minecraft (17, 21 o 25) y el repositorio de PaperMC.2.Añade la API del servidor
compileOnly("io.papermc.paper:paper-api:<version>"). Como en Java, el servidor la aporta en tiempo de ejecución, así que nunca se empaqueta.3.Escribe la clase principal
class MyPlugin : JavaPlugin()conoverride fun onEnable(). Registra comandos y listeners exactamente igual que en Java.4.Lleva la librería estándar de Kotlin
Empaquétala en el .jar con el plugin Shadow, o deja que el servidor la descargue al arrancar mediante la lista
librariesdeplugin.yml. Sin una de las dos, el plugin falla conNoClassDefFoundError: kotlin/....5.Escribe el plugin.yml
El mismo archivo que en un plugin Java: nombre, versión, main (la clase de Kotlin),
api-version, comandos y permisos.6.Compila y prueba
./gradlew shadowJar(obuild), copia el .jar debuild/libs/a un servidor de prueba y lee la consola al arrancar.
Cómo llevar Kotlin al servidor
- Empaquétala (shade): el plugin Shadow de Gradle copia la librería estándar de Kotlin y otras librerías de ejecución dentro de tu .jar. Funciona en todas las versiones y es la opción más habitual.
- libraries en plugin.yml: desde Spigot 1.16.5, un plugin puede indicar librerías de Maven Central que el servidor descarga y carga por él. El .jar sigue siendo pequeño, pero el servidor necesita acceso a internet en el primer arranque.
- Librerías que añades tú: kotlinx-coroutines es una librería aparte, no forma parte de la librería estándar, y también hay que empaquetarla. Reubicarla en tu propio paquete evita conflictos con otros plugins que incluyen otra versión.
Corrutinas y el hilo principal
Las corrutinas son una forma limpia de cargar datos de una base de datos sin congelar el servidor, pero la API de Bukkit (mundos, entidades, inventarios) se sigue teniendo que usar desde el hilo principal. Haz el trabajo lento en un dispatcher en segundo plano y vuelve al hilo del servidor con el scheduler antes de tocar el juego. Vincula el scope de las corrutinas al plugin para que se cancele en onDisable().
¿Java o Kotlin?
| Función | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | La misma API de Paper / Spigot |
| Compilación | Maven o Gradle | Gradle con build.gradle.kts |
| Extras en ejecución | Ninguna | Librería estándar de Kotlin, empaquetada o cargada |
| Tutoriales y ejemplos | La mayoría | Menos, pero los ejemplos de Java se traducen directamente |
Con Codexe
Elige Bukkit/Spigot/Paper (Kotlin). Codexe genera un proyecto Gradle con build.gradle.kts, la API de Paper, el plugin Shadow para empaquetar lo que el servidor no aporta, y las corrutinas empaquetadas y reubicadas cuando el código las usa. Compila el plugin antes de que esté Listo, y los plugins en Kotlin se pueden probar en un servidor de prueba y los revisan los jugadores de prueba igual que los de Java. Consulta el generador de plugins en Kotlin.
«Un plugin para Paper 1.21.4 en Kotlin llamado Bounties: /bounty set <player> <amount> a través de Vault, el asesino se lleva la recompensa, /bounty top muestra las 10 más altas, guardado en SQLite con corrutinas para acceder a la base de datos. Usa data classes y funciones de extensión, y mantén las llamadas a la API de Bukkit en el hilo principal.»
Preguntas
¿Un plugin en Kotlin es más lento que uno en Java?
No hay una diferencia apreciable: los dos se compilan a bytecode de la JVM. El .jar es más grande cuando se empaqueta la librería estándar.
¿Puedo mezclar Java y Kotlin en un mismo plugin?
Sí, Gradle compila los dos en el mismo proyecto, y el código Kotlin llama directamente a las clases Java.
¿Por qué aparece NoClassDefFoundError con clases de kotlin?
La librería estándar de Kotlin no está en el .jar o no se ha cargado. Compila con shadowJar e instala ese .jar, o añade la librería a libraries en plugin.yml.
Crea un plugin en Kotlin
Este prompt se abre listo para enviar:
“Un plugin para Paper 1.21.4 en Kotlin llamado Bounties: /bounty set <player> <amount> usando la economía de Vault, el asesino se lleva la recompensa, /bounty top muestra las 10 más altas, recompensas guardadas en SQLite con corrutinas para acceder a la base de datos, llamadas a la API de Bukkit en el hilo principal, mensajes en config.yml.”
Genera esto con Codexe