ปลั๊กอิน Folia
มัลติเธรดแบบแบ่งภูมิภาคของ Folia เปลี่ยนวิธีที่ปลั๊กอินจัดตารางงาน Codexe สร้างปลั๊กอินที่ปลอดภัยสำหรับ Folia อย่างไร และควรใส่อะไรในคำขอ
อัปเดตเมื่อ
Folia คือ fork ของ Paper ที่ประมวลผลแต่ละภูมิภาคของโลกบนเธรดต่างกัน ไม่มี "main thread" เดียว การจัดตารางงานแบบ Bukkit ปกติ (Bukkit.getScheduler().runTask(...)) จึงใช้ไม่ได้
#สิ่งที่ Codexe ทำต่างออกไป
เมื่อคุณเลือกประเภท Folia ปลั๊กอินที่สร้างจะ:
- จัดตารางงานด้วย scheduler แบบ region, entity, global region และ async แทน scheduler ของ Bukkit
- ประกาศ
folia-supported: trueในplugin.yml - บิลด์กับ API ของ Folia (Maven)
#สิ่งที่ควรใส่ในคำขอ
ทุกอย่างจากคู่มือ Spigot และ Paper บวกกับรายละเอียดที่เกี่ยวกับจังหวะเวลา เช่น "เทเลพอร์ตหลัง 3 วินาที", "ทำซ้ำทุกนาทีสำหรับผู้เล่นออนไลน์แต่ละคน" ตรงนี้คือจุดที่โค้ด Folia ต่างออกไปมากที่สุด
#การบิลด์และการตรวจสอบ
ปลั๊กอิน Folia จะถูกคอมไพล์และตรวจเหมือนปลั๊กอินอื่นๆ ก่อนจะพร้อม การคอมไพล์พิสูจน์ว่าโค้ดบิลด์กับ API ของ Folia ได้ แต่ความปลอดภัยของเธรดตอนรันยังขึ้นกับตรรกะของโค้ด จึงควรทดสอบบนเซิร์ฟเวอร์ Folia
#ปัญหาที่พบบ่อย
| อาการ | สาเหตุที่น่าจะเป็น |
|---|---|
UnsupportedOperationException เกี่ยวกับ scheduler | โค้ด (มักมาจาก dependency) ใช้ scheduler ของ Bukkit ขอให้แชตย้ายไปใช้ scheduler แบบ region หรือ entity |
| ปลั๊กอินไม่ยอมโหลดบน Folia | ไม่มี folia-supported: true ใน plugin.yml |