מדריך
איך ליצור פלאגין ל-Minecraft ב-Kotlin
עודכן 18 באוקטובר 2026
Kotlin רצה על ה-JVM, ולכן פלאגין ב-Kotlin משתמש באותו API של Paper או Spigot, באותו plugin.yml ובאותה תיקיית plugins/ כמו פלאגין ב-Java. הקוד קצר יותר ובטוח מבחינת null. הדבר היחיד שפלאגינים ב-Java לא צריכים לדאוג לגביו הוא הספרייה הסטנדרטית של Kotlin: השרת לא מגיע איתה, ולכן הפלאגין צריך להביא אותה.
התחילו מהדוגמה הזו.
צרו את זה עם Codexeשלב אחר שלב
1.צרו פרויקט Gradle עם Kotlin DSL
build.gradle.ktsעם הפלאגיןkotlin("jvm"), Java toolchain שמתאים לגרסת ה-Minecraft שלכם (17, 21 או 25) ומאגר PaperMC.2.הוסיפו את ה-API של השרת
compileOnly("io.papermc.paper:paper-api:<version>"). כמו ב-Java, השרת מספק אותו בזמן הריצה, ולכן הוא אף פעם לא נארז.3.כתבו את המחלקה הראשית
class MyPlugin : JavaPlugin()עםoverride fun onEnable(). רשמו פקודות ומאזינים בדיוק כמו ב-Java.4.הביאו את הספרייה הסטנדרטית של Kotlin
ארזו אותה בתוך ה-.jar עם הפלאגין Shadow, או תנו לשרת להוריד אותה בעלייה דרך רשימת
librariesב-plugin.yml. בלי אחת מהדרכים האלה הפלאגין נכשל עםNoClassDefFoundError: kotlin/....5.כתבו plugin.yml
אותו קובץ כמו בפלאגין Java: name, version, main (מחלקת ה-Kotlin),
api-version, פקודות והרשאות.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?
| יכולת | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | אותו API של Paper / Spigot |
| בנייה | Maven או Gradle | Gradle עם 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