מדריך

איך ליצור פלאגין ל-Minecraft ב-Kotlin

עודכן 18 באוקטובר 2026

Kotlin רצה על ה-JVM, ולכן פלאגין ב-Kotlin משתמש באותו API של Paper או Spigot, באותו plugin.yml ובאותה תיקיית plugins/ כמו פלאגין ב-Java. הקוד קצר יותר ובטוח מבחינת null. הדבר היחיד שפלאגינים ב-Java לא צריכים לדאוג לגביו הוא הספרייה הסטנדרטית של Kotlin: השרת לא מגיע איתה, ולכן הפלאגין צריך להביא אותה.

התחילו מהדוגמה הזו.

צרו את זה עם Codexe

שלב אחר שלב

  1. 1.צרו פרויקט Gradle עם Kotlin DSL

    build.gradle.kts עם הפלאגין kotlin("jvm"), Java toolchain שמתאים לגרסת ה-Minecraft שלכם (17, 21 או 25) ומאגר PaperMC.

  2. 2.הוסיפו את ה-API של השרת

    compileOnly("io.papermc.paper:paper-api:<version>"). כמו ב-Java, השרת מספק אותו בזמן הריצה, ולכן הוא אף פעם לא נארז.

  3. 3.כתבו את המחלקה הראשית

    class MyPlugin : JavaPlugin() עם override fun onEnable(). רשמו פקודות ומאזינים בדיוק כמו ב-Java.

  4. 4.הביאו את הספרייה הסטנדרטית של Kotlin

    ארזו אותה בתוך ה-.jar עם הפלאגין Shadow, או תנו לשרת להוריד אותה בעלייה דרך רשימת libraries ב-plugin.yml. בלי אחת מהדרכים האלה הפלאגין נכשל עם NoClassDefFoundError: kotlin/....

  5. 5.כתבו plugin.yml

    אותו קובץ כמו בפלאגין Java: name, version, main (מחלקת ה-Kotlin), api-version, פקודות והרשאות.

  6. 6.בנו ובדקו

    ./gradlew shadowJar (או build), העתיקו את ה-.jar מ-build/libs/ לשרת בדיקה וקראו את הקונסולה בעלייה.

להביא את Kotlin לשרת

  • Shade: הפלאגין Shadow של Gradle מעתיק את הספרייה הסטנדרטית של Kotlin וספריות זמן ריצה אחרות לתוך ה-.jar שלכם. זה עובד בכל גרסה וזו הבחירה הנפוצה ביותר.
  • libraries ב-plugin.yml: מ-Spigot 1.16.5, פלאגין יכול לפרט ספריות מ-Maven Central שהשרת מוריד וטוען בשבילו. ה-.jar נשאר קטן, אבל השרת צריך גישה לאינטרנט בעלייה הראשונה.
  • ספריות שאתם מוסיפים: kotlinx-coroutines היא ספרייה נפרדת, לא חלק מהספרייה הסטנדרטית, וצריך לארוז גם אותה. העברתה (relocation) לחבילה משלכם מונעת התנגשויות עם פלאגינים אחרים שאורזים גרסה אחרת.

Coroutines וה-thread הראשי

Coroutines הן דרך נקייה לטעון נתונים ממסד נתונים בלי להקפיא את השרת, אבל עדיין צריך להשתמש ב-API של Bukkit (עולמות, ישויות, מלאים) מה-thread הראשי. עשו את העבודה האיטית ב-dispatcher ברקע, ואז חזרו ל-thread של השרת עם ה-scheduler לפני שאתם נוגעים במשחק. קשרו את ה-scope של ה-coroutines לפלאגין, כדי שהוא יבוטל ב-onDisable().

Java או Kotlin?

יכולתJavaKotlin
APIPaper / Spigotאותו API של Paper / Spigot
בנייהMaven או GradleGradle עם build.gradle.kts
תוספות לזמן הריצהאיןהספרייה הסטנדרטית של Kotlin, ארוזה או נטענת
מדריכים ודוגמאותרובםפחות, אבל דוגמאות ב-Java מתורגמות ישירות

עם Codexe

בחרו Bukkit/Spigot/Paper (Kotlin). Codexe יוצר פרויקט Gradle עם build.gradle.kts, ה-API של Paper, הפלאגין Shadow כדי לארוז את מה שהשרת לא מספק, ו-coroutines ארוזות ומועברות כשהקוד משתמש בהן. הוא מקמפל את הפלאגין לפני שהוא מוכן, ואת פלאגיני ה-Kotlin אפשר לנסות בשרת בדיקה ולבדוק עם שחקני בדיקה בדיוק כמו פלאגיני Java. ראו את מחולל הפלאגינים ב-Kotlin.

"פלאגין ל-Paper 1.21.4 ב-Kotlin בשם Bounties: /bounty set <player> <amount> דרך Vault, ההורג מקבל את הפרס, /bounty top מציג את 10 הגבוהים ביותר, נשמר ב-SQLite עם coroutines לגישה למסד הנתונים. השתמשו ב-data classes וב-extension functions, והשאירו את הקריאות ל-API של Bukkit ב-thread הראשי."

שאלות

האם פלאגין ב-Kotlin איטי יותר מפלאגין ב-Java?

אין הבדל משמעותי: שניהם מתקמפלים ל-bytecode של ה-JVM. ה-.jar גדול יותר כשהספרייה הסטנדרטית ארוזה בתוכו.

האם אפשר לערבב Java ו-Kotlin בפלאגין אחד?

כן, Gradle מקמפל את שתיהן באותו פרויקט, וקוד Kotlin קורא למחלקות Java ישירות.

למה מופיע NoClassDefFoundError על מחלקות של kotlin?

הספרייה הסטנדרטית של Kotlin לא נמצאת ב-.jar או לא נטענת. בנו עם shadowJar והתקינו את ה-.jar הזה, או הוסיפו את הספרייה ל-libraries ב-plugin.yml.

צרו פלאגין ב-Kotlin

הפרומפט הזה נפתח מוכן לשליחה:

“פלאגין ל-Paper 1.21.4 ב-Kotlin בשם Bounties: /bounty set <player> <amount> באמצעות כלכלת Vault, ההורג מקבל את הפרס, /bounty top מציג את 10 הגבוהים ביותר, הפרסים נשמרים ב-SQLite עם coroutines לגישה למסד הנתונים, קריאות ל-API של Bukkit ב-thread הראשי, הודעות ב-config.yml.”

צרו את זה עם Codexe
איך ליצור פלאגין ל-Minecraft ב-Kotlin (Paper) | Codexe