คู่มือ
วิธีอัปเดตปลั๊กอินเป็น Minecraft เวอร์ชันใหม่
อัปเดตเมื่อ 18 ตุลาคม 2569
เมื่อเซิร์ฟเวอร์ของคุณย้ายไป Minecraft เวอร์ชันใหม่ ปลั๊กอินหลายตัวยังใช้ได้โดยไม่ต้องแก้ เพราะ Bukkit API มีความเสถียร แต่บางตัวโหลดไม่ขึ้นหรือพังเล็กๆ น้อยๆ ถ้าผู้สร้างยังไม่อัปเดตปลั๊กอินและคุณมีซอร์สโค้ด คุณอัปเดตเองได้: นี่คือสิ่งที่เปลี่ยนและลำดับที่ควรทำ
อธิบายว่ามันควรทำงานอย่างไรบนเวอร์ชันใหม่
สร้างสิ่งนี้ด้วย Codexeทีละขั้นตอน
1.ลอง .jar เดิมก่อน
ใส่ไว้บนเซิร์ฟเวอร์ทดสอบของเวอร์ชันใหม่แล้วอ่านคอนโซล ถ้าโหลดได้และใช้งานได้ คุณอาจไม่ต้องแก้อะไรเลย
2.เปลี่ยน dependency ของ API
ใน
pom.xmlหรือbuild.gradleตั้งpaper-apiหรือspigot-apiเป็นเวอร์ชันใหม่3.อัปเดต api-version และ Java
ตั้ง
api-versionในplugin.yml(เช่น'1.21') และคอมไพล์สำหรับ Java ที่เวอร์ชันใหม่ต้องการ: Java 17 ก่อน 1.20.5, Java 21 ตั้งแต่ 1.20.5 และ Java 25 สำหรับ 26.x4.แก้ส่วนที่คอมไพล์ไม่ผ่านแล้ว
บิลด์แล้วไล่แก้ข้อผิดพลาด: วัสดุที่ถูกเปลี่ยนชื่อ เมธอดที่ถูกลบ คลาสอีเวนต์ที่เปลี่ยนไป คอมไพเลอร์จะแสดงรายการพร้อมไฟล์และบรรทัด
5.อัปเดต dependency
ปลั๊กอินที่ปลั๊กอินของคุณใช้ (Vault, PlaceholderAPI, ProtocolLib, WorldGuard) ต้องเป็นเวอร์ชันที่รองรับ Minecraft เวอร์ชันใหม่ด้วย ทั้งในไฟล์บิลด์และบนเซิร์ฟเวอร์
6.ทดสอบบนเวอร์ชันใหม่
โหลดบนเซิร์ฟเวอร์เวอร์ชันใหม่ที่มีปลั๊กอินชุดเดียวกัน แล้วลองทุกคำสั่งและทุกฟีเจอร์ ไม่ใช่แค่ตอนเริ่มทำงาน
สิ่งที่มักพัง
- ชื่อวัสดุและ enum: การอัปเดต 1.13 เปลี่ยนชื่อไอเทมและบล็อกส่วนใหญ่ เวอร์ชันหลังจากนั้นก็เพิ่ม เปลี่ยนชื่อ หรือลบบางตัว โค้ดที่ใช้ชื่อเก่าหรือ id ที่เป็นตัวเลขจะล้มเหลว
- เมธอด deprecated ถูกลบ: เมธอดที่ถูกทำเครื่องหมาย deprecated มาหลายเวอร์ชันจะหายไปในที่สุด
- ข้อมูลไอเทม: ตั้งแต่ 1.20.5 NBT ของไอเทมถูกแทนที่ด้วย data component ปลั๊กอินที่แก้ NBT ของไอเทมโดยตรงต้องเขียนส่วนนั้นใหม่ ส่วน API
ItemMetaปกติยังใช้ได้ - NMS และ reflection: โค้ดที่ใช้คลาสภายในของเซิร์ฟเวอร์จะพังแทบทุกเวอร์ชัน ให้แทนที่ด้วย API ถ้าเป็นไปได้ หรือด้วยไลบรารีอย่าง ProtocolLib
- เวอร์ชันของไลบรารี: ไลบรารีที่ shade ไว้ซึ่งบิลด์สำหรับ Java รุ่นเก่าอาจล้มเหลวบนรุ่นใหม่
การอัปเดตข้ามหลายเวอร์ชัน
การย้ายจาก 1.8 หรือ 1.12 ไป 1.21 ใกล้เคียงกับการเขียนส่วนที่เกี่ยวกับไอเทม บล็อก และพาร์ทิเคิลใหม่มากกว่าการอัปเดต ทำทีเดียวกับ API ใหม่ ไม่ต้องไล่ทีละเวอร์ชัน และเตรียมใจว่าไฟล์คอนฟิกก็ต้องใช้ชื่อวัสดุใหม่ด้วย
ถ้าปลั๊กอินต้องรองรับหลายเวอร์ชันพร้อมกัน ให้คอมไพล์กับเวอร์ชันเก่าที่สุดที่คุณรองรับและหลีกเลี่ยง API ที่เพิ่มเข้ามาทีหลัง หรือใช้บิลด์แยกต่อเวอร์ชัน
ด้วย Codexe
ในแพ็กเกจ Pro ขึ้นไป คุณนำเข้าซอร์สโค้ดของปลั๊กอินเป็น ZIPได้ แล้วขอ เช่น "นี่คือปลั๊กอิน Paper 1.20.4 ของฉัน อัปเดตเป็น Paper 1.21.4 ให้หน่อย" Codexe จะอ่านเวอร์ชัน Minecraft จากไฟล์บิลด์ บิลด์ด้วย Java ที่เวอร์ชันนั้นต้องการ และซ่อมข้อผิดพลาดการคอมไพล์โดยใช้ signature จริงของ API ที่บิลด์ด้วย สำหรับปลั๊กอินที่คุณทำบน Codexe ให้ขอเวอร์ชันใหม่ในแชตของโปรเจกต์
การคอมไพล์พิสูจน์ว่าปลั๊กอินบิลด์ได้บน API ใหม่ จากนั้นให้ลองบนเซิร์ฟเวอร์ทดสอบ เพราะพฤติกรรมที่เปลี่ยนไปในแต่ละเวอร์ชันไม่ได้แสดงเป็นข้อผิดพลาดการคอมไพล์
คำถาม
อัปเดตปลั๊กอินโดยไม่มีซอร์สโค้ดได้ไหม?
ทำได้ไม่น่าเชื่อถือ การดีคอมไพล์ .jar ได้โค้ดที่ดูแลยากและอาจละเมิดสัญญาอนุญาตของผู้สร้าง มองหาเวอร์ชันที่อัปเดตแล้วหรือ fork ที่ยังมีคนดูแลก่อน
ปลั๊กอิน 1.21.1 ใช้กับ 1.21.4 ได้ไหม?
ส่วนใหญ่ได้ ภายในเวอร์ชันหลักเดียวกัน ยกเว้นใช้ NMS หรือ API ที่เปลี่ยนไป ทดสอบก่อนนำไปใช้จริง
ทำไมเซิร์ฟเวอร์ขึ้นว่า "Unsupported API version"?
นั่นเป็นกรณีกลับกัน: ปลั๊กอินตั้งเป้าไว้ที่ API ที่ใหม่กว่าเซิร์ฟเวอร์ บิลด์ให้ตรงกับเวอร์ชันของเซิร์ฟเวอร์คุณ หรืออัปเดตเซิร์ฟเวอร์
บิลด์ปลั๊กอินใหม่สำหรับเวอร์ชันของคุณ
พรอมต์นี้จะเปิดขึ้นพร้อมส่งได้ทันที:
“ปลั๊กอิน TreeFeller ของฉันสำหรับ Spigot 1.12.2 ในเวอร์ชัน Paper 1.21.4: ทุบท่อนไม้ล่างสุดของต้นไม้ด้วยขวานแล้วต้นไม้ทั้งต้นจะถูกทุบ เสียความทนทานต่อท่อนไม้ ใช้ได้กับไม้ทุกชนิดของ 1.21 รวมถึง cherry และ mangrove เปิดปิดด้วย /treefeller การตั้งค่าอยู่ใน config.yml”
สร้างสิ่งนี้ด้วย Codexe