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 Codexe

Paso a paso

  1. 1.Crea un proyecto Gradle con Kotlin DSL

    Un build.gradle.kts con el plugin kotlin("jvm"), una toolchain de Java que coincida con tu versión de Minecraft (17, 21 o 25) y el repositorio de PaperMC.

  2. 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. 3.Escribe la clase principal

    class MyPlugin : JavaPlugin() con override fun onEnable(). Registra comandos y listeners exactamente igual que en Java.

  4. 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 libraries de plugin.yml. Sin una de las dos, el plugin falla con NoClassDefFoundError: kotlin/....

  5. 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. 6.Compila y prueba

    ./gradlew shadowJar (o build), copia el .jar de build/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ónJavaKotlin
APIPaper / SpigotLa misma API de Paper / Spigot
CompilaciónMaven o GradleGradle con build.gradle.kts
Extras en ejecuciónNingunaLibrería estándar de Kotlin, empaquetada o cargada
Tutoriales y ejemplosLa mayoríaMenos, 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
Cómo crear un plugin de Minecraft en Kotlin (Paper) | Codexe