Guia

Como criar um plugin de Minecraft em Kotlin

Atualizado em 18 de outubro de 2026

O Kotlin roda na JVM, então um plugin em Kotlin usa a mesma API do Paper ou do Spigot, o mesmo plugin.yml e a mesma pasta plugins/ de um plugin em Java. O código é mais curto e tem null safety. A única coisa com que os plugins em Java não precisam se preocupar é a biblioteca padrão do Kotlin: o servidor não a inclui, então o plugin precisa levá-la.

Comece por este exemplo.

Gere isto com o Codexe

Passo a passo

  1. 1.Crie um projeto Gradle com Kotlin DSL

    Um build.gradle.kts com o plugin kotlin("jvm"), uma toolchain Java que corresponda à sua versão do Minecraft (17, 21 ou 25) e o repositório do PaperMC.

  2. 2.Adicione a API do servidor

    compileOnly("io.papermc.paper:paper-api:<version>"). Como em Java, o servidor a fornece em tempo de execução, então ela nunca é empacotada.

  3. 3.Escreva a classe principal

    class MyPlugin : JavaPlugin() com override fun onEnable(). Registre comandos e listeners exatamente como em Java.

  4. 4.Leve a biblioteca padrão do Kotlin

    Empacote-a no .jar com o plugin Shadow ou deixe o servidor baixá-la na inicialização pela lista libraries do plugin.yml. Sem uma das duas, o plugin falha com NoClassDefFoundError: kotlin/....

  5. 5.Escreva o plugin.yml

    O mesmo arquivo de um plugin em Java: nome, versão, main (a classe Kotlin), api-version, comandos e permissões.

  6. 6.Compile e teste

    ./gradlew shadowJar (ou build), copie o .jar de build/libs/ para um servidor de teste e leia o console na inicialização.

Como levar o Kotlin para o servidor

  • Faça o shade: o plugin Shadow do Gradle copia a biblioteca padrão do Kotlin e outras bibliotecas de runtime para o seu .jar. Funciona em todas as versões e é a escolha mais comum.
  • libraries no plugin.yml: a partir do Spigot 1.16.5, um plugin pode listar bibliotecas do Maven Central que o servidor baixa e carrega para ele. O .jar fica pequeno, mas o servidor precisa de acesso à internet na primeira inicialização.
  • Bibliotecas que você adiciona: o kotlinx-coroutines é uma biblioteca separada, não faz parte da biblioteca padrão, e também precisa ser empacotado. Fazer o relocate dele para o seu próprio pacote evita conflitos com outros plugins que empacotam outra versão.

Coroutines e a thread principal

As coroutines são um jeito limpo de carregar dados de um banco de dados sem travar o servidor, mas a API do Bukkit (mundos, entidades, inventários) ainda precisa ser usada na thread principal. Faça o trabalho lento em um dispatcher de segundo plano e depois volte para a thread do servidor com o scheduler antes de mexer no jogo. Vincule o escopo das coroutines ao plugin, para que ele seja cancelado no onDisable().

Java ou Kotlin?

RecursoJavaKotlin
APIPaper / SpigotA mesma API do Paper / Spigot
BuildMaven ou GradleGradle com build.gradle.kts
Extras de runtimeNenhumaBiblioteca padrão do Kotlin, empacotada ou carregada
Tutoriais e exemplosA maioria delesMenos, mas os exemplos em Java se traduzem diretamente

Com o Codexe

Escolha Bukkit/Spigot/Paper (Kotlin). O Codexe gera um projeto Gradle com build.gradle.kts, a API do Paper, o plugin Shadow para empacotar o que o servidor não fornece e as coroutines empacotadas e realocadas quando o código as usa. Ele compila o plugin antes de ficar Pronto, e os plugins em Kotlin podem ser testados em um servidor de teste e verificados por jogadores de teste como os de Java. Veja o gerador de plugins em Kotlin.

"Um plugin para Paper 1.21.4 em Kotlin chamado Bounties: /bounty set <player> <amount> pelo Vault, quem mata recebe a recompensa, /bounty top mostra as 10 maiores, salvas em SQLite com coroutines para o acesso ao banco de dados. Use data classes e extension functions, mantenha as chamadas da API do Bukkit na thread principal."

Perguntas

Um plugin em Kotlin é mais lento que um plugin em Java?

Não há diferença relevante: os dois compilam para bytecode da JVM. O .jar fica maior quando a biblioteca padrão é empacotada.

Posso misturar Java e Kotlin em um plugin?

Sim, o Gradle compila os dois no mesmo projeto, e o código Kotlin chama as classes Java diretamente.

Por que NoClassDefFoundError para classes kotlin?

A biblioteca padrão do Kotlin não está no .jar ou não foi carregada. Compile com shadowJar e instale esse .jar, ou adicione a biblioteca a libraries no plugin.yml.

Crie um plugin em Kotlin

Este prompt abre pronto para enviar:

“Um plugin para Paper 1.21.4 em Kotlin chamado Bounties: /bounty set <player> <amount> usando a economia do Vault, quem mata recebe a recompensa, /bounty top mostra as 10 maiores, recompensas salvas em SQLite com coroutines para o acesso ao banco de dados, chamadas da API do Bukkit na thread principal, mensagens no config.yml.”

Gere isto com o Codexe
Como criar um plugin de Minecraft em Kotlin (Paper) | Codexe