מדריך

איך ליצור פלאגין ל-Folia

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

Folia הוא fork של Paper שמחלק את העולם לאזורים ומריץ את ה-ticks שלהם ב-threads שונים, כך ששרתים גדולים יכולים לנצל הרבה ליבות מעבד. אין יותר thread ראשי אחד, וזה שובר את ה-scheduler הרגיל של Bukkit. פלאגין ל-Folia הוא פלאגין ל-Paper שנכתב למודל הזה, והוא חייב לציין זאת ב-plugin.yml שלו.

דוגמה עם פרטי התזמון ש-Folia צריך.

צרו את זה עם Codexe

שלב אחר שלב

  1. 1.בדקו שאתם באמת צריכים Folia

    Folia עוזר לשרתים עם הרבה שחקנים שמפוזרים ברחבי העולם. רוב השרתים מריצים Paper; הרבה פלאגינים פופולריים לא תומכים ב-Folia, אז בדקו קודם את אלה שאתם תלויים בהם.

  2. 2.בנו מול ה-API של Folia

    השתמשו בתלות folia-api לגרסה שלכם ממאגר PaperMC, בהיקף provided, בפרויקט Maven או Gradle.

  3. 3.החליפו את ה-scheduler של Bukkit

    Bukkit.getScheduler() לא עובד ב-Folia. השתמשו ב-region scheduler לעבודה במיקום מסוים, ב-entity scheduler לעבודה על שחקן או יצור, ב-global region scheduler למשימות ברמת העולם כולו, וב-async scheduler לקלט/פלט.

  4. 4.געו בדברים רק מתוך האזור שלהם

    שנו בלוק או ישות רק ב-thread שמחזיק בהם. השתמשו ב-teleportAsync במקום teleport, ותזמנו לאזור של היעד לפני שאתם משנים אותו.

  5. 5.הצהירו על תמיכה ב-Folia

    הוסיפו folia-supported: true ל-plugin.yml. בלעדיו Folia מסרב לטעון את הפלאגין.

  6. 6.בדקו על שרת Folia

    קומפילציה מוכיחה שהקוד נבנה מול ה-API של Folia, לא שהוא בטוח לעבודה עם threads. הריצו אותו על שרת בדיקה של Folia עם כמה שחקנים במקומות שונים.

ארבעת ה-schedulers

מתזמןאיך מקבלים אותולמה משתמשים בו
אזורBukkit.getRegionScheduler()עבודה במיקום בעולם: הנחת בלוקים, הופעת יצורים
ישותentity.getScheduler()עבודה על שחקן או יצור אחד, הוא עוקב אחריהם בין אזורים
אזור גלובליBukkit.getGlobalRegionScheduler()שעת העולם, מזג האוויר, דברים שלא קשורים למיקום
אסינכרוניBukkit.getAsyncScheduler()מסד נתונים, קבצים, בקשות רשת, אף פעם לא העולם

מה בדרך כלל נשבר

  • משימות חוזרות לכל השחקנים: לולאה אחת על כל השחקנים המחוברים כבר לא עובדת; במקום זאת תזמנו משימה ב-entity scheduler של כל שחקן.
  • שיגורים וזמני המתנה: "שיגור אחרי 3 שניות" צריך את ה-entity scheduler ואת teleportAsync.
  • נתונים משותפים: מפות ומונים שמשמשים מכמה אזורים חייבים להיות בטוחים לעבודה עם threads, למשל concurrent collections.
  • תלויות: ספרייה שקוראת ל-scheduler של Bukkit זורקת UnsupportedOperationException ב-Folia.

פלאגין אחד ל-Paper ול-Folia

ה-schedulers של אזור, ישות, גלובלי ואסינכרוני הם גם חלק מה-API של Paper בגרסאות הנוכחיות, ולכן פלאגין שמשתמש רק בהם ומצהיר folia-supported: true יכול לרוץ גם על Paper וגם על Folia. זה לרוב היעד הטוב ביותר: .jar אחד לכל שרת.

עם Codexe

בחרו בסוג Folia. הפלאגין שנוצר מתזמן עבודה עם ה-schedulers של אזור, ישות, אזור גלובלי ואסינכרוני, מצהיר folia-supported: true ונבנה מול ה-API של Folia עם Maven. הוא מקומפל ונבדק לפני שהוא מוכן.

כתבו בבקשה את פרטי התזמון ("כל דקה לכל שחקן מחובר", "שיגור אחרי 3 שניות"): כאן קוד ל-Folia שונה הכי הרבה. נסו עכשיו עדיין לא מריץ שרתי Folia, אז בדקו את ה-.jar על שרת Folia משלכם.

שאלות

האם פלאגינים ל-Paper רצים על Folia?

רק אם הם נכתבו בשבילו ומצהירים folia-supported: true. פלאגין Paper רגיל שמשתמש ב-scheduler של Bukkit נדחה או נכשל.

האם פלאגין ל-Folia רץ על Paper?

כן, כשהוא משתמש רק ב-API שקיימים גם ב-Paper, ובהם ה-schedulers של Folia בגרסאות הנוכחיות של Paper.

הפלאגין שלי ל-Folia זורק חריגה על ה-scheduler

קוד כלשהו, לרוב מספרייה, עדיין משתמש ב-scheduler של Bukkit. בקשו בצ'אט של הפרויקט להעביר אותו ל-region scheduler או ל-entity scheduler.

צרו פלאגין ל-Folia

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

“פלאגין ל-Folia 1.21.4 בשם RTP: /rtp משגר את השחקן למיקום בטוח אקראי בטווח 5000 בלוקים אחרי המתנה של 3 שניות שמתבטלת בתנועה, באמצעות ה-entity scheduler ו-teleportAsync, זמן המתנה של 10 דקות לכל שחקן שנשמר ב-SQLite, folia-supported: true, רדיוס, זמן המתנה והודעות ב-config.yml.”

צרו את זה עם Codexe
איך ליצור פלאגין ל-Folia (region schedulers) | Codexe