دليل

كيف تصنع plugin لـ Folia

حُدّث في 18 أكتوبر 2026

Folia فرع من Paper يقسّم العالم إلى مناطق ويشغّل كل منها على خيط مختلف، لتستطيع الخوادم الكبيرة استخدام أنوية معالج كثيرة. لم يعد هناك خيط رئيسي واحد، وهذا يعطّل مجدول Bukkit المعتاد. plugin الـ Folia هو plugin لـ Paper مكتوب لهذا النموذج، ويجب أن يصرّح بذلك في plugin.yml.

مثال يتضمن تفاصيل التوقيت التي يحتاجها Folia.

ولّد هذا بـ Codexe

خطوة بخطوة

  1. 1.تأكد أنك تحتاج إلى Folia

    يفيد Folia الخوادم ذات اللاعبين الكثيرين المنتشرين في أنحاء العالم. معظم الخوادم تعمل بـ Paper؛ وكثير من الـ plugins الشائعة لا تدعم Folia، لذا تحقق أولاً من تلك التي تعتمد عليها.

  2. 2.ابنِ على Folia API

    استخدم الاعتمادية folia-api لإصدارك من مستودع PaperMC، بنطاق provided، في مشروع Maven أو Gradle.

  3. 3.استبدل مجدول Bukkit

    لا يعمل Bukkit.getScheduler() على Folia. استخدم مجدول المنطقة للعمل في موقع، ومجدول الكيان للعمل على لاعب أو وحش، ومجدول المنطقة العامة للمهام على مستوى العالم كله، والمجدول غير المتزامن لعمليات الإدخال والإخراج.

  4. 4.لا تلمس الأشياء إلا من منطقتها

    غيّر الكتلة أو الكيان فقط على الخيط الذي يملكه. استخدم teleportAsync بدلاً من teleport، وجدوِل العمل على منطقة الهدف قبل تغييره.

  5. 5.صرّح بدعم Folia

    أضف folia-supported: true إلى plugin.yml. وبدونه يرفض Folia تحميل الـ plugin.

  6. 6.اختبر على خادم Folia

    التجميع يثبت أن الكود يُبنى على Folia API، لا أنه آمن مع الخيوط. شغّله على خادم Folia تجريبي مع عدة لاعبين في أماكن مختلفة.

المجدولات الأربعة

المجدولتحصل عليه عبراستخدمه لـ
المنطقةBukkit.getRegionScheduler()العمل في موقع من العالم: وضع الكتل، وإظهار الكيانات
الكيانentity.getScheduler()العمل على لاعب أو وحش واحد، ويتبعه عبر المناطق
المنطقة العامةBukkit.getGlobalRegionScheduler()وقت العالم، والطقس، والأشياء غير المرتبطة بموقع
غير متزامنBukkit.getAsyncScheduler()قاعدة البيانات، والملفات، وطلبات الويب، ولا يلمس العالم أبداً

ما الذي يتعطل عادةً

  • المهام المتكررة لكل اللاعبين: لم تعد حلقة واحدة على كل اللاعبين المتصلين تعمل؛ جدوِل مهمة على مجدول الكيان لكل لاعب بدلاً من ذلك.
  • الانتقالات والتمهيد: "الانتقال بعد 3 ثوانٍ" يحتاج إلى مجدول الكيان وteleportAsync.
  • البيانات المشتركة: الخرائط والعدّادات المستخدمة من عدة مناطق يجب أن تكون آمنة مع الخيوط، مثل المجموعات المتزامنة.
  • الاعتماديات: المكتبة التي تستدعي مجدول Bukkit ترمي UnsupportedOperationException على Folia.

plugin واحد لـ Paper وFolia

مجدولات المنطقة والكيان والعام وغير المتزامن جزء أيضاً من Paper API في الإصدارات الحالية، لذا فالـ plugin الذي يستخدمها وحدها ويصرّح بـ folia-supported: true يمكنه العمل على Paper وFolia معاً. وهذا غالباً أفضل هدف: ملف .jar واحد لكل خادم.

مع Codexe

اختر النوع Folia. يجدوِل الـ plugin المولَّد العمل بمجدولات المنطقة والكيان والمنطقة العامة وغير المتزامن، ويصرّح بـ folia-supported: true ويُبنى على Folia API بـ Maven. ويُجمَّع ويُفحص قبل أن يصبح Ready.

ضع تفاصيل التوقيت في الطلب ("كل دقيقة لكل لاعب متصل"، "الانتقال بعد 3 ثوانٍ"): فهنا يختلف كود Folia أكثر ما يختلف. لا تشغّل «جرّبه الآن» خوادم Folia بعد، لذا اختبر ملف .jar على خادم Folia الخاص بك.

أسئلة

هل تعمل plugins الـ Paper على Folia؟

فقط إذا كانت مكتوبة له وتصرّح بـ folia-supported: true. أما plugin الـ Paper العادي الذي يستخدم مجدول Bukkit فيُرفض أو يفشل.

هل يعمل plugin الـ Folia على Paper؟

نعم، عندما يستخدم فقط واجهات API موجودة أيضاً في Paper، ومنها مجدولات Folia في إصدارات Paper الحالية.

plugin الـ Folia الخاص بي يرمي استثناءً متعلقاً بالمجدول

ما زال بعض الكود، غالباً من مكتبة، يستخدم مجدول Bukkit. اطلب في محادثة المشروع نقله إلى مجدول المنطقة أو الكيان.

اصنع plugin لـ Folia

يُفتح هذا الوصف جاهزاً للإرسال:

“plugin لـ Folia 1.21.4 باسم RTP: الأمر /rtp ينقل اللاعب إلى موقع آمن عشوائي ضمن 5000 كتلة بعد تمهيد 3 ثوانٍ يُلغى عند الحركة، باستخدام مجدول الكيان وteleportAsync، ومهلة انتظار 10 دقائق لكل لاعب محفوظة في SQLite، وfolia-supported: true، ونصف القطر ومهلة الانتظار والرسائل في config.yml.”

ولّد هذا بـ Codexe
كيف تصنع plugin لـ Folia (مجدولات المناطق) | Codexe