Kawaiiverse StudioDreams · Games · Infinite Worlds

☕ JavaDevelopmentMenengah3 menit baca

Cara Membuat Plugin Minecraft Java (Paper) untuk Pemula

Langkah awal membuat plugin Minecraft dengan Java dan Paper API, mulai dari menyiapkan JDK, IntelliJ IDEA, Gradle, plugin.yml, class utama, event listener, command pertama, sampai build menjadi file .jar dan mengujinya di server.

Oleh KawaiiVerse Studio · Diperbarui

Membuat plugin sendiri membuka kemungkinan tanpa batas: minigame, sistem quest, toko unik, atau fitur yang tidak ada di plugin mana pun. Panduan ini membuat plugin pertama bernama KVHalo yang menyapa pemain saat masuk dan menambahkan perintah /halo.

Persiapan

  • JDK dengan versi yang sama dengan yang dibutuhkan server, misalnya JDK 21. Gunakan JDK, bukan hanya JRE.
  • IntelliJ IDEA Community Edition (gratis). Editor lain bisa dipakai, tetapi IntelliJ paling nyaman untuk Java.
  • Server Paper lokal untuk uji coba (lihat membuat server Paper).
  • Pengetahuan dasar Java: class, method, dan if.

1. Struktur proyek

KVHalo/
├── build.gradle.kts
├── settings.gradle.kts
└── src/main/
    ├── java/id/kawaiiverse/halo/KVHalo.java
    └── resources/plugin.yml

2. Gradle

settings.gradle.kts:

kotlin
rootProject.name = "KVHalo"

build.gradle.kts:

kotlin
plugins {
    java
}

group = "id.kawaiiverse"
version = "1.0.0"

repositories {
    mavenCentral()
    maven("https://repo.papermc.io/repository/maven-public/")
}

dependencies {
    // Samakan dengan versi server Paper-mu
    compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
}

java {
    toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}

tasks.processResources {
    filesMatching("plugin.yml") {
        expand("version" to project.version)
    }
}

compileOnly berarti Paper API hanya dipakai saat kompilasi dan tidak ikut dimasukkan ke jar, karena server sudah menyediakannya. Ganti versi paper-api sesuai versi servermu. Daftar versi yang tersedia ada di dokumentasi Paper.

3. plugin.yml

File ini memberi tahu server nama plugin, class utama, dan daftar perintah. Simpan di src/main/resources/plugin.yml:

yaml
name: KVHalo
version: '${version}'
main: id.kawaiiverse.halo.KVHalo
api-version: '1.21'
author: KawaiiVerse Studio
description: Plugin sapaan pertama
commands:
  halo:
    description: Menyapa pemain
    usage: /halo [nama]
    permission: kvhalo.halo
permissions:
  kvhalo.halo:
    description: Boleh memakai /halo
    default: true

api-version menandakan versi API yang dipakai plugin. Tanpa nilai ini, server menganggap plugin sebagai plugin lama dan menjalankannya dalam mode kompatibilitas.

4. Class utama

src/main/java/id/kawaiiverse/halo/KVHalo.java:

java
package id.kawaiiverse.halo;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public final class KVHalo extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("KVHalo aktif!");
    }

    @Override
    public void onDisable() {
        getLogger().info("KVHalo dimatikan.");
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        player.sendMessage(Component.text("Halo, " + player.getName() + "! Selamat datang.", NamedTextColor.LIGHT_PURPLE));
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        String nama = args.length > 0 ? args[0] : sender.getName();
        sender.sendMessage(Component.text("Halo juga, " + nama + "!", NamedTextColor.GOLD));
        return true;
    }
}

Penjelasan singkat:

  • onEnable() berjalan saat plugin dinyalakan. Di sini kita mendaftarkan listener.
  • Method dengan @EventHandler dipanggil saat event terjadi. PlayerJoinEvent terjadi saat pemain masuk.
  • onCommand() menangani perintah yang terdaftar di plugin.yml. Mengembalikan false akan menampilkan teks usage.
  • Component dan NamedTextColor berasal dari Adventure, sistem teks modern yang sudah tersedia di Paper.

5. Build

Di terminal (atau panel Gradle di IntelliJ):

bash
./gradlew build

Di Windows, gunakan gradlew.bat build. Jika proyek belum punya Gradle wrapper, buat dengan gradle wrapper atau biarkan IntelliJ membuatnya. File plugin akan berada di build/libs/KVHalo-1.0.0.jar.

6. Uji di server

  1. Salin jar ke folder plugins/ server lokal.
  2. Restart server.
  3. Masuk ke server. Kamu akan disapa dengan pesan berwarna ungu.
  4. Ketik /halo Steve.

Jika plugin tidak muncul di /plugins, baca pesan error di konsol. Penyebab paling umum adalah main di plugin.yml tidak sama dengan nama package dan class.

Langkah berikutnya

Plugin pertama sudah jadi. Lanjutkan ke membuat plugin sendiri untuk mempelajari config, permission, cooldown, tab completion, dan penyimpanan data pemain.

Bacaan lanjut