แก้ไขข้อผิดพลาด Minecraft EncoderException: ข้อผิดพลาดของ Netty Codec และ Packet
หาก Minecraft Java Edition ตัดการเชื่อมต่อโดยมีข้อความEncoderExceptionหรือข้อความ Netty codec ให้ตรวจสอบก่อนว่าเกิดขึ้นกับเซิร์ฟเวอร์เดียวหรือทุกเซิร์ฟเวอร์ หากเกิดขึ้นกับเซิร์ฟเวอร์เดียว มักบ่งชี้ว่าซอฟต์แวร์ ส่วนเสริม พร็อกซี หรือข้อมูลแพ็กเก็ตของเซิร์ฟเวอร์นั้นมีปัญหา หากเกิดขึ้นกับหลายเซิร์ฟเวอร์ ให้ลองทดสอบด้วยโปรไฟล์เกมที่สะอาด และตรวจสอบเวอร์ชันไคลเอ็นต์และม็อดของคุณก่อนที่จะเปลี่ยนการตั้งค่าเครือข่าย ข้อความดังกล่าวระบุถึงความล้มเหลวในการเข้ารหัสแพ็กเก็ต ไม่ได้หมายความว่าการเชื่อมต่ออินเทอร์เน็ตของคุณทำให้แพ็กเก็ตเสียหายเสมอไป
ข้อผิดพลาด EncoderException ใน Minecraft หมายความว่าอย่างไร
Netty คือไลบรารีเครือข่ายที่ Minecraft Java Edition ใช้ในการส่งข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ ใน API ของ Netty นั้นEncoderExceptionคือข้อยกเว้นของโคเดกที่เกิดจากตัวเข้ารหัส ตัวเข้ารหัสจะแปลงข้อมูลเกมเป็นไบต์เพื่อส่ง ข้อยกเว้นนี้อาจเกิดขึ้นเมื่อซอฟต์แวร์ไม่สามารถเข้ารหัสข้อมูลที่พยายามส่งได้ เช่น เนื่องจากเวอร์ชันหรือส่วนขยายไม่ตรงกันเกี่ยวกับแพ็กเก็ตหรือเนื้อหาของแพ็กเก็ต อ่าน stack trace ทั้งหมดและบรรทัด "Caused by" เพื่อหาเบาะแสที่เป็นประโยชน์ "Internal Exception" เพียงอย่างเดียวไม่ถือเป็นการวินิจฉัยที่ถูกต้อง
ข้อความio.netty.handler.codecใน stack trace ระบุชื่อแพ็กเกจ codec ของ Netty ไม่ใช่การตั้งค่าในเกมที่สามารถรีเซ็ตได้ วลีค้นหา “Netty I/O exception” เป็นวลีที่กว้างเกินไป ดังนั้นให้ใช้คลาสของ exception ที่ตรงกันเพื่อเลือกการตรวจสอบถัดไป
ทิศทางมีความสำคัญ หากคอนโซลของเซิร์ฟเวอร์บันทึกข้อผิดพลาดขณะส่งแพ็กเก็ต การติดตามการทำงานของเซิร์ฟเวอร์ (stack trace) คือจุดเริ่มต้นที่ดีที่สุด ผู้เล่นอาจเห็นเพียงหน้าจอการตัดการเชื่อมต่อ หากบันทึกของไคลเอ็นต์รายงานDecoderExceptionนั่นคือความล้มเหลวที่เกี่ยวข้องแต่แตกต่างกันขณะอ่านข้อมูลขาเข้า บันทึกการเผยแพร่ Minecraft เวอร์ชัน 1.20.5 ยังระบุด้วยว่าข้อมูลแพ็กเก็ตเซิร์ฟเวอร์ที่ไม่ถูกต้องอาจทำให้ไคลเอ็นต์ตัดการเชื่อมต่อ ดังนั้นการตัดการเชื่อมต่อจึงไม่ได้หมายความว่าการติดตั้งของผู้เล่นเสียหายโดยอัตโนมัติ
คู่มือนี้ใช้สำหรับMinecraft: Java Editionเท่านั้น Bedrock Edition ใช้เส้นทางการเชื่อมต่อเครือข่ายที่แตกต่างกัน ดังนั้นคำแนะนำของ Netty สำหรับ Java จึงใช้ไม่ได้กับรหัสข้อผิดพลาดของ Bedrock Edition
โปรดอ่านเอกสารอ้างอิง API ของ Netty EncoderExceptionและบันทึกการเผยแพร่ Minecraft Java Edition 1.20.5สำหรับคำจำกัดความและหมายเหตุเกี่ยวกับโปรโตคอลที่เกี่ยวข้อง
ใช้ข้อมูลอาการเพื่อเลือกวิธีแก้ไขที่เหมาะสม
| เกิดอะไรขึ้น | เริ่มต้นด้วยการตรวจสอบ |
|---|
| เกิดข้อผิดพลาดบนเซิร์ฟเวอร์เครื่องหนึ่ง แต่เซิร์ฟเวอร์อื่นใช้งานได้ปกติ | เวอร์ชันของเซิร์ฟเวอร์, ม็อดหรือปลั๊กอิน, พร็อกซี และบันทึกของเซิร์ฟเวอร์ |
| เซิร์ฟเวอร์ที่ดัดแปลงใช้งานไม่ได้ แต่โปรไฟล์ที่ไม่มีการดัดแปลงใช้งานได้ปกติ | ตัวโหลดม็อดและความเข้ากันได้ของส่วนเสริมทั้งฝั่งไคลเอนต์และเซิร์ฟเวอร์ |
| เซิร์ฟเวอร์หลายแห่งที่ไม่เกี่ยวข้องกันล้มเหลวเมื่อใช้โปรไฟล์ที่ไม่มีการดัดแปลง | ขั้นตอนการติดตั้งเกม เลือกเวอร์ชัน เลือกตัวเรียกใช้งาน และเส้นทางเครือข่าย |
| คอนโซลของเซิร์ฟเวอร์แสดงข้อความ “EncoderException” สำหรับผู้เล่นหลายคน | ข้อมูลแพ็กเก็ตฝั่งเซิร์ฟเวอร์ ปลั๊กอิน ม็อด พร็อกซี หรือบั๊กในเกม |
| ข้อความดังกล่าวเป็นการหมดเวลาหรือหมดเวลาในการอ่าน โดยไม่มีสแต็กตัวเข้ารหัส | ความเสถียรของการเชื่อมต่อและความพร้อมใช้งานของเซิร์ฟเวอร์ นี่เป็นเบาะแสอีกอย่างหนึ่ง |
วิธีแก้ไขข้อผิดพลาดแพ็กเก็ต Minecraft ทีละขั้นตอน
1. ตรวจสอบว่าเป็นเซิร์ฟเวอร์เดียวหรือทุกเซิร์ฟเวอร์
ปิด Minecraft และตัวเรียกใช้งาน แล้วเปิดใหม่อีกครั้ง จากนั้นลองเชื่อมต่อกับเซิร์ฟเวอร์อื่นที่คุณได้รับอนุญาตให้ใช้ ใช้โปรไฟล์เกมเดียวกันสำหรับการเปรียบเทียบนี้ หากมีเพียงเซิร์ฟเวอร์เดียวที่ล้มเหลว ให้หลีกเลี่ยงการติดตั้ง Minecraft ใหม่ก่อน: เจ้าของเซิร์ฟเวอร์อาจต้องตรวจสอบแพ็กเก็ต การกำหนดค่า ม็อด ปลั๊กอิน หรือพร็อกซีสแต็ก หากคุณไม่สามารถทดสอบเซิร์ฟเวอร์อื่นได้ ให้บันทึกความไม่แน่นอนนั้นไว้และดำเนินการตรวจสอบในเครื่องต่อไปตามด้านล่าง
การทดสอบกับเซิร์ฟเวอร์ตัวที่สองช่วยแยกแยะปัญหาแพ็กเก็ตเฉพาะเซิร์ฟเวอร์ออกจากปัญหาที่ส่งผลกระทบต่อการเชื่อมต่อทุกการเชื่อมต่อ
2. จับคู่รุ่น เวอร์ชัน และตัวโหลดให้ตรงกัน
ตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งาน Minecraft Java Editionไม่ใช่ Bedrock และเปรียบเทียบเวอร์ชัน Minecraft ที่แสดงโดยเซิร์ฟเวอร์และไคลเอนต์ เวอร์ชัน Release, Snapshot หรือ Modded Profile อาจไม่สามารถใช้แทนกันได้ สำหรับเซิร์ฟเวอร์ที่มี Modded ให้ตรวจสอบ Loader ที่จำเป็น (เช่น Fabric, Forge หรือ NeoForge) และเวอร์ชัน Modpack ที่ระบุไว้ในเซิร์ฟเวอร์ Add-on ที่แลกเปลี่ยนข้อมูลโดยทั่วไปจำเป็นต้องมีเวอร์ชันที่เข้ากันได้ทั้งสองฝั่ง
อย่าติดตั้ง Java runtime เวอร์ชันใหม่กว่าเพื่อแก้ไขปัญหาโดยรวม Minecraft Java 1.20.5 กำหนดให้ต้องใช้ Java 21 เวอร์ชันก่อนหน้ามีข้อกำหนดที่แตกต่างกัน หากคุณใช้ตัวเรียกใช้งานอย่างเป็นทางการ โปรดหลีกเลี่ยงการเปลี่ยนแปลงไฟล์ปฏิบัติการ Java หรือการเพิ่มแฟล็ก JVM แบบสุ่ม เว้นแต่ว่าตัวเรียกใช้งานหรือคำแนะนำเฉพาะของชุดม็อดจะระบุไว้ โปรดดูหมายเหตุทางเทคนิคอย่างเป็นทางการของเวอร์ชัน 1.20.5และ ข้อกำหนด สำหรับโหมดผู้เล่นหลายคนของ Minecraft
เปรียบเทียบเวอร์ชันเกมและตัวโหลดม็อดในทั้งสองฝั่ง การจับคู่ตัวเลขอย่างเดียวอาจไม่เพียงพอสำหรับเซิร์ฟเวอร์ที่มีม็อด
3. สร้างโปรไฟล์ใหม่ที่สะอาดและแยกต่างหาก
ใน Minecraft Launcher ให้เปิดInstallationsและสร้างการติดตั้งใหม่สำหรับเวอร์ชันเดียวกันกับที่เซิร์ฟเวอร์ต้องการ หาก Launcher มีช่องให้ใส่ไดเร็กทอรีเกมว่างเปล่า ให้เริ่มโปรไฟล์โดยไม่มีม็อด ไคลเอนต์แบบกำหนดเอง หรือแพ็กทรัพยากรและข้อมูลเพิ่มเติม จากนั้นลองเชื่อมต่อเซิร์ฟเวอร์อีกครั้ง นี่เป็นการทดสอบที่สามารถย้อนกลับได้: มันจะรักษาอินสแตนซ์ปกติไว้และช่วยตรวจสอบว่าไฟล์ในเครื่องหรือส่วนเสริมมีส่วนเกี่ยวข้องหรือไม่ บทความสนับสนุน Launcher ของ Mojang อธิบายถึงการสร้างการติดตั้ง Java ใหม่สำหรับการแก้ไขปัญหา
ใช้โฟลเดอร์เกมแยกต่างหากสำหรับการทดสอบเวอร์ชันดั้งเดิม เพื่อให้ม็อดและการตั้งค่าที่มีอยู่ยังคงไม่เปลี่ยนแปลง
4. แยกส่วนเสริมและม็อดอย่างเป็นระบบ
หากเชื่อมต่อโปรไฟล์ที่สะอาดแล้ว ให้สำรองข้อมูลอินสแตนซ์และโลกที่แก้ไขแล้วก่อนที่จะเปลี่ยนแปลงไฟล์ ตรวจสอบเวอร์ชัน Minecraft และตัวโหลดที่รองรับของแต่ละม็อด จากนั้นอัปเดตเฉพาะเวอร์ชันที่เข้ากันได้กับชุดค่าผสมนั้นอย่างชัดเจน ทดสอบด้วยม็อดที่จำเป็นขั้นต่ำก่อน เพิ่มม็อดที่เหลือกลับเข้าไปทีละกลุ่มเล็กๆ หากข้อผิดพลาดกลับมา ให้แยกกลุ่มนั้นออกและทำซ้ำจนกว่าคุณจะพบข้อขัดแย้ง วิธีการ "ทีละครึ่ง" นี้เร็วกว่าการเดาจากรายการที่ยาวเหยียด
อย่าสรุปว่าม็อดปรับปรุงประสิทธิภาพตัวใดตัวหนึ่งเป็นสาเหตุของข้อผิดพลาดเพียงเพราะว่ามันติดตั้งอยู่แล้ว ให้ความสนใจกับการตั้งค่าเครือข่าย การเชื่อมต่อโปรโตคอล เนื้อหา และส่วนขยายฝั่งเซิร์ฟเวอร์ แต่ให้ใช้บันทึกและทดสอบซ้ำได้เพื่อระบุสาเหตุที่แท้จริง ทั้งไคลเอนต์และเซิร์ฟเวอร์อาจต้องการส่วนเสริมที่ตรงกัน
หากการตั้งค่าโปรไฟล์ที่สะอาดใช้งานได้ ให้เพิ่มม็อดกลับเข้าไปทีละกลุ่มเล็กๆ เพื่อระบุไฟล์ที่ไม่เข้ากัน
5. อ่านบันทึกการทำงานของไคลเอ็นต์และเซิร์ฟเวอร์ทั้งหมด
เปิดlogsโฟลเดอร์ภายในไดเร็กทอรีเกมที่ใช้งานอยู่และตรวจสอบlatest.logในช่วงเวลาที่เกิดการตัดการเชื่อมต่อ หากใช้ไดเร็กทอรีเกมแบบกำหนดเอง ไฟล์บันทึกอาจไม่ได้อยู่ใน.minecraftโฟลเดอร์เริ่มต้น ค้นหาEncoderExceptionชื่อแพ็กเก็ตและข้อความ "Caused by" ที่ซ้อนกันบรรทัดแรก หากคุณเป็นผู้ดูแลเซิร์ฟเวอร์ ให้เปรียบเทียบคอนโซลหรือบันทึกของเซิร์ฟเวอร์ในช่วงเวลาเดียวกัน ชื่อคลาสและตัวระบุแพ็กเก็ตที่อยู่รอบๆ ข้อยกเว้นจะมีประโยชน์มากกว่าข้อความแจ้งการตัดการเชื่อมต่อบรรทัดสุดท้าย
หากข้อความแสดงข้อผิดพลาด (stack trace) ระบุถึงปลั๊กอิน ม็อด เพย์โหลดแบบกำหนดเอง ไอเทม ข้อความแชท หรือแพ็กเก็ต ให้ลองจำลองปัญหาโดยเปลี่ยนเฉพาะส่วนประกอบนั้น หากปัญหาเกิดขึ้นเฉพาะหลังจากการกระทำบางอย่าง เช่น การเปิดช่องเก็บของ หรือการส่งข้อความเฉพาะ ให้แจ้งเจ้าของเซิร์ฟเวอร์อย่างละเอียดว่าการกระทำใดเป็นตัวกระตุ้นให้เกิดปัญหา
เปรียบเทียบบันทึกของไคลเอ็นต์กับคอนโซลของเซิร์ฟเวอร์ในช่วงเวลาเดียวกัน และตรวจสอบสาเหตุทั้งหมดอย่างละเอียด
6. ทดสอบการเชื่อมต่อเฉพาะเมื่อมีหลักฐานชี้ไปในทิศทางนั้น
การตรวจสอบเครือข่ายเป็นสิ่งที่มีประโยชน์เมื่อมีเซิร์ฟเวอร์หลายเครื่องได้รับผลกระทบหรือการเชื่อมต่อหลุดเป็นระยะๆ หากอุปกรณ์อื่นๆ ก็มีปัญหาเช่นกัน ให้รีสตาร์ทเราเตอร์ จากนั้นลองเปรียบเทียบคอมพิวเตอร์เครื่องเดียวกันนั้นผ่านสาย Ethernet หรือเครือข่ายที่เชื่อถือได้อื่นๆ หากคุณใช้ VPN หรือพร็อกซี ให้ลองทดสอบโดยตัดการเชื่อมต่อก่อน จากนั้นจึงเชื่อมต่อใหม่ตามปกติ เปิดใช้งานไฟร์วอลล์ไว้เสมอ หากบันทึกหรือการเปรียบเทียบที่ควบคุมได้ชี้ไปที่การบล็อกในเครื่อง ให้ใช้การตั้งค่าอนุญาตแอปที่ระบุไว้ในระบบปฏิบัติการของคุณแทนการปิดใช้งานไฟร์วอลล์ การเปลี่ยนแปลงเครือข่ายอาจช่วยแก้ปัญหาการหมดเวลาการเชื่อมต่อได้ แต่จะไม่สามารถแก้ไขตัวเข้ารหัสเซิร์ฟเวอร์ที่สร้างแพ็กเก็ตที่ไม่ถูกต้องได้
ลองใช้เส้นทางการเชื่อมต่อเครือข่ายอื่นเฉพาะในกรณีที่ไคลเอนต์และเซิร์ฟเวอร์ทำงานไม่สอดคล้องกันบนการเชื่อมต่อปัจจุบันเท่านั้น
7. หากคุณเป็นเจ้าของเซิร์ฟเวอร์ ให้ทำการอัปเดตและทดสอบส่วนประกอบทีละส่วน
สำรองข้อมูลโลกและการตั้งค่าเซิร์ฟเวอร์ก่อนทำการบำรุงรักษา ตรวจสอบให้แน่ใจว่าไฟล์ jar ของเซิร์ฟเวอร์ ตัวโหลดม็อด ม็อดหรือปลั๊กอิน และพร็อกซีหรือบริดจ์โปรโตคอลใดๆ รองรับ Minecraft เวอร์ชันเดียวกัน อัปเดตส่วนประกอบหลังจากตรวจสอบหมายเหตุความเข้ากันได้แล้ว รีสตาร์ท และทดสอบก่อนดำเนินการเปลี่ยนแปลงถัดไป หากข้อผิดพลาดเริ่มเกิดขึ้นทันทีหลังจากการอัปเดต ให้ย้อนกลับส่วนประกอบที่เปลี่ยนแปลงล่าสุดในการทดสอบแบบควบคุม อย่าเพิ่มระยะการมองเห็นหรือติดตั้งปลั๊กอินข้ามเวอร์ชันเพื่อแก้ไข EncoderException ทั่วไป เนื่องจากวิธีเหล่านี้ไม่ได้แก้ไขปัญหาการเข้ารหัสแพ็กเก็ตทุกกรณี
เมื่อพบปัญหาจากบันทึกเซิร์ฟเวอร์ ผู้ดูแลระบบอาจต้องแก้ไขซอฟต์แวร์ที่ส่งข้อมูล หรือรายงานปัญหาที่สามารถจำลองซ้ำได้ไปยังผู้ดูแลซอฟต์แวร์นั้นระบบติดตามปัญหา อย่างเป็นทางการของ Minecraft เหมาะสำหรับบั๊กในเกมเวอร์ชันดั้งเดิมที่สามารถจำลองซ้ำได้ ส่วนความล้มเหลวของม็อดหรือปลั๊กอินนั้นควรแจ้งไปยังผู้ดูแลม็อดหรือปลั๊กอินนั้นๆ
เจ้าของเซิร์ฟเวอร์ควรสำรองข้อมูลก่อน และอัปเดตส่วนประกอบที่เข้ากันได้ทีละรายการ
8. แบ่งปันรายงานที่เป็นประโยชน์โดยไม่เปิดเผยข้อมูลส่วนตัว
หากปัญหายังคงอยู่ โปรดระบุเวอร์ชัน Minecraft ระบบปฏิบัติการ ตัวเรียกใช้งาน ตัวโหลด และเวอร์ชันส่วนเสริมอย่างละเอียด ไม่ว่าจะเป็นเซิร์ฟเวอร์เดียวหรือหลายเซิร์ฟเวอร์ การกระทำที่ทำให้เกิดปัญหา และข้อมูลการติดตามการทำงานทั้งหมดที่เกี่ยวข้อง ขอให้เจ้าของเซิร์ฟเวอร์ตรวจสอบบันทึกที่ตรงกัน ก่อนที่จะแชร์บันทึกต่อสาธารณะ โปรดลบโทเค็นการเข้าถึง ตัวระบุบัญชี ที่อยู่เซิร์ฟเวอร์ส่วนตัว และเส้นทางไฟล์ส่วนตัวออก ห้ามโพสต์โทเค็นเซสชันตัวเรียกใช้งานหรือข้อมูลประจำตัวเด็ดขาดคู่มือการแก้ไขปัญหาผู้เล่นหลายคนของ Minecraft Javaก็เป็นรายการตรวจสอบอย่างเป็นทางการที่มีประโยชน์เช่นกัน
ลบที่อยู่ ข้อมูลระบุตัวตนบัญชี โทเค็น และเส้นทางไฟล์ส่วนตัวออกก่อนที่จะเผยแพร่บันทึกข้อมูลสู่สาธารณะ
คำถามที่พบบ่อย
ข้อผิดพลาด EncoderException ใน Minecraft เกิดจากปัญหาอินเทอร์เน็ตของฉันเสมอหรือไม่?
ไม่ครับ มันเป็นข้อผิดพลาดในการเข้ารหัส ดังนั้นควรตรวจสอบความไม่เข้ากันของเวอร์ชันหรือซอฟต์แวร์ และข้อมูลแพ็กเก็ตฝั่งเซิร์ฟเวอร์ก่อน ทดสอบกับเซิร์ฟเวอร์อื่นและตรวจสอบบันทึกทั้งหมดก่อนที่จะเปลี่ยนการตั้งค่าเครือข่ายหรือไฟร์วอลล์
ฉันควรลบโฟลเดอร์ .minecraft หรือติดตั้ง Java ใหม่ดี?
ไม่ควรใช้เป็นขั้นตอนแรก การสร้างโปรไฟล์ตัวเรียกใช้งานที่สะอาดและแยกต่างหากนั้นปลอดภัยกว่า และโดยปกติจะให้ข้อมูลการวินิจฉัยเพิ่มเติม สำรองข้อมูลโลกและการกำหนดค่าก่อนทำการลบด้วยตนเอง และอย่าเปลี่ยน Java เว้นแต่ว่าเวอร์ชัน Minecraft หรือตัวเรียกใช้งานที่คุณเลือกใช้จะต้องการ
เจ้าของเซิร์ฟเวอร์สามารถแก้ไขข้อผิดพลาดนี้ได้หรือไม่?
ใช่แล้ว เมื่อบันทึกของเซิร์ฟเวอร์แสดงว่าตัวเข้ารหัสล้มเหลวขณะส่งแพ็กเก็ต เจ้าของควรตรวจสอบแพ็กเก็ตและสาเหตุในรายละเอียดการทำงานทั้งหมด จากนั้นทดสอบม็อดเซิร์ฟเวอร์ ปลั๊กอิน พร็อกซี หรือเวอร์ชันเกมที่เป็นสาเหตุ ผู้เล่นไม่สามารถซ่อมแซมซอฟต์แวร์ฝั่งเซิร์ฟเวอร์จากตัวเรียกใช้งานของตนเองได้
จะทำอย่างไรต่อไป
สำหรับข้อผิดพลาดของโคเด็ค Netty ใน Minecraftขั้นแรกให้เปรียบเทียบเซิร์ฟเวอร์ เวอร์ชัน โหลดเดอร์ และบันทึกต่างๆ โปรไฟล์ที่สะอาดจะบอกคุณว่าม็อดในเครื่องของคุณมีส่วนเกี่ยวข้องหรือไม่ การติดตามสแต็กฝั่งเซิร์ฟเวอร์จะบอกผู้ดูแลระบบว่าควรตรวจสอบที่ใด ควรทำการทดสอบเครือข่ายเฉพาะเมื่อมีหลักฐานของปัญหาเส้นทาง และหลีกเลี่ยงขั้นตอนการติดตั้งใหม่ที่ทำลายระบบจนกว่าการตรวจสอบที่ง่ายกว่าจะช่วยระบุสาเหตุได้