ماینکرافت

آموزش کدنویسی پلاگین ماینکرافت با جاوا

آموزش ساخت اولین پلاگین ماینکرافت با جاوا و Paper API: نصب ابزارها، پروژه‌ی Maven، فایل plugin.yml، کلاس اصلی، دستور و رویداد، ساخت jar و تست روی سرور.

زمان مطالعه: ۱۰ دقیقه

اگر جاوا بلدید، ساخت پلاگین ماینکرافت سریع شروع می‌شود. این آموزش یک پلاگین ساده با یک دستور و یک رویداد می‌سازد و مسیر ساخت و تست را نشان می‌دهد.

ابزارها

  • JDK: نسخه‌ی مناسب نسخه‌ی ماینکرافت هدف (مثلاً ۲۱ برای نسخه‌های جدید). نسخه‌ی لازم در مستندات Paper نوشته شده است.
  • IntelliJ IDEA (نسخه‌ی Community کافی است).
  • Maven یا Gradle برای ساخت پروژه (در این آموزش Maven).
  • یک سرور Paper آزمایشی؛ آموزش راه‌اندازی سرور.

مرحله ۱: پروژه‌ی Maven

در IntelliJ یک پروژه‌ی Maven بسازید و در pom.xml مخزن و وابستگی Paper را اضافه کنید (عدد نسخه را با نسخه‌ی هدف خودتان عوض کنید):

<repositories>
  <repository>
    <id>papermc</id>
    <url>https://repo.papermc.io/repository/maven-public/</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>io.papermc.paper</groupId>
    <artifactId>paper-api</artifactId>
    <version>1.21.4-R0.1-SNAPSHOT</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

مقدار provided یعنی API هنگام اجرا از خود سرور می‌آید و داخل jar شما قرار نمی‌گیرد.

مرحله ۲: فایل plugin.yml

در src/main/resources/plugin.yml این را بنویسید. فیلد main باید دقیقاً نام کامل کلاس اصلی باشد و api-version با نسخه‌ی هدف بخواند:

name: HelloPlugin
version: 1.0
main: ir.nothingx.hello.HelloPlugin
api-version: '1.21'
commands:
  hello:
    description: Say hello

مرحله ۳: کلاس اصلی

package ir.nothingx.hello;

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 class HelloPlugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("HelloPlugin enabled");
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        event.getPlayer().sendMessage("Welcome to the server!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("hello")) {
            if (sender instanceof Player player) {
                player.sendMessage("Hello, " + player.getName());
            } else {
                sender.sendMessage("This command is for players.");
            }
            return true;
        }
        return false;
    }
}

مرحله ۴: ساخت و تست

  1. در ترمینال IntelliJ دستور mvn package را بزنید.
  2. فایل jar ساخته‌شده را از پوشه‌ی target بردارید و در plugins سرور آزمایشی بگذارید.
  3. سرور را ریستارت کنید؛ پیام «HelloPlugin enabled» باید در کنسول دیده شود.
  4. داخل بازی بنویسید /hello و پیام را ببینید.

نکات حرفه‌ای

  • رشته‌ی اصلی را قفل نکنید: کارهای سنگین مثل دیتابیس و درخواست وب را روی ترد غیرهمگام (async) انجام دهید تا تیک‌های سرور کند نشود.
  • کانفیگ: با saveDefaultConfig() فایل config.yml بسازید تا مدیر سرور بدون کد تنظیمات را عوض کند.
  • مجوزها: برای هر دستور حساس یک permission تعریف کنید تا از طریق LuckyPerms کنترل شود (راهنما).
  • تست روی نسخه‌ی هدف: بعد از هر به‌روزرسانی ماینکرافت پلاگین را تست کنید.

اگر وقت یا تجربه‌ی کدنویسی ندارید، سفارش پلاگین اختصاصی راه سریع‌تری است و برای اجرا هم سرور ماینکرافت مناسب است.

سوالات پرتکرار

باید با Maven شروع کنم یا Gradle؟
برای شروع هر دو مناسب‌اند. Maven ساده‌تر است و Gradle بیشتر در پروژه‌های بزرگ استفاده می‌شود.
پلاگین نسخه‌ی قدیمی روی سرور جدید اجرا می‌شود؟
گاهی اجرا می‌شود ولی تضمینی نیست؛ api-version و کدهایی که از API حذف‌شده استفاده می‌کنند باید بازبینی شوند.