โปรแกรมแก้ไข level.dat สำหรับ PocketMine-MP และเซิร์ฟเวอร์ Bedrock

รองรับ Minecraft Bedrock Edition และ Java Edition — รวมถึงซอฟต์แวร์เซิร์ฟเวอร์ทุกแบบของทั้งสองรุ่น ไม่ว่าจะเป็นที่นิยมหรือเฉพาะทาง: Vanilla, Paper, Spigot, Purpur, Folia, Fabric, Forge, NeoForge, Mohist, Sponge, Bedrock Dedicated Server, PocketMine-MP, Nukkit, PowerNukkitX, Cloudburst, Dragonfly, Endstone, LeviLamina และอื่น ๆ ดูรายการทั้งหมด.

ซอฟต์แวร์เซิร์ฟเวอร์ Bedrock ได้แก่ PocketMine-MP, Nukkit, PowerNukkitX, Cloudburst, Dragonfly และ Bedrock Dedicated Server ทางการ ล้วนอ่านไฟล์ level.dat แบบ little-endian พร้อมส่วนหัว 8 ไบต์จาก worlds/<World>/. วางไฟล์ด้านล่างเพื่อแก้ชื่อโลกหลังทำสำเนาโฟลเดอร์ ย้ายจุดเกิด เปลี่ยนกฎเกม หรือตรวจสอบรุ่นที่เขียนโลกครั้งล่าสุด

PocketMine-MPNukkitPowerNukkitXCloudburstBedrock Dedicated ServerDragonflyEndstoneWaterdogPE

วาง worlds/<World>/level.dat ที่นี่

level.dat · .nbt · .mcstructure · .schem · .schematic · .dat · ข้อมูลชังก์ที่แยกออกมา

ปัญหาชื่อโลกซ้ำ

ผู้ดูแลเซิร์ฟเวอร์ Bedrock มักพบปัญหานี้ เมื่อคัดลอก worlds/hub ไปเป็น worlds/hub2 เพื่อสร้างสนามที่สอง แต่คอนโซล ตัวจัดการโลก และปลั๊กอินที่รายงานชื่อโลกยังเรียกทั้งสองว่า hub. ชื่อโฟลเดอร์เปลี่ยนแล้ว แต่ LevelName ภายใน level.dat ยังไม่เปลี่ยน

ผลกระทบไม่ได้มีแค่ชื่อ ปลั๊กอินที่ค้นหาโลกด้วยชื่อภายใน เช่น จุดเทเลพอร์ต config แยกโลก หรือระบบป้องกันพื้นที่ อาจเลือกโลกผิด และคำสั่งจัดการโลกจะกำกวม แก้โดยแก้แท็กนี้: วางไฟล์ด้านบนแล้วโปรแกรมจะไปยัง LevelName และเปิดให้แก้ไข

  1. หยุดเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่ทำงานอยู่จะเขียน level.dat ใหม่เมื่อบันทึกและทำให้การแก้ไขหาย
  2. ดาวน์โหลด worlds/<World>/level.dat ผ่าน SFTP หรือจากตัวจัดการไฟล์ในแผงควบคุม
  3. วางในโปรแกรมแก้ไข แล้วเปลี่ยน LevelName เป็นชื่อใหม่และบันทึก
  4. อัปโหลดกลับไปทับไฟล์เดิม โดยเก็บไฟล์เก่าเป็นข้อมูลสำรอง
  5. เริ่มเซิร์ฟเวอร์และตรวจบรรทัดคอนโซลที่รายงานโลกที่โหลด

หมายเหตุแยกตามซอฟต์แวร์

ซอฟต์แวร์พาธของโลกหมายเหตุ
PocketMine-MP (PM5)worlds/<World>/ตั้งโลกเริ่มต้นด้วย level-name ใน server.properties ซึ่งค่านี้ระบุโฟลเดอร์ ส่วน LevelName คือชื่อภายในของโลก
Nukkit / PowerNukkitXworlds/<World>/ใช้โครงสร้าง Bedrock เดียวกัน โดย PNX เพิ่มไฟล์ตั้งค่าของตนเองไว้ข้างกัน
Bedrock Dedicated Serverworlds/<World>/level-name ใน server.properties ใช้เลือกโฟลเดอร์ ส่วนเวอร์ชันพื้นที่จัดเก็บในส่วนหัวโดยทั่วไปคือ 10
Cloudburst / Dragonflyworlds/<World>/อ่านไฟล์ level.dat เดียวกัน โดย Dragonfly อาจเก็บสถานะเพิ่มเติมในฐานข้อมูลของตน
WaterdogPE, Geyser—เป็นพร็อกซีและไม่เก็บโลก NBT เพียงส่งผ่านเครือข่ายในรูปแบบ network NBT

ขั้นตอนที่ปลอดภัยสำหรับเซิร์ฟเวอร์ใช้งานจริง

  • สำรองทั้งโฟลเดอร์โลก ไม่ใช่เพียง level.dat. ใช้เวลาเพียงเล็กน้อยและเป็นทางเดียวที่จะย้อนคืนเมื่อแก้ผิด
  • อย่าแก้ไฟล์ที่กำลังใช้งานผ่าน SFTP ดาวน์โหลด แก้ไข และอัปโหลดขณะเซิร์ฟเวอร์หยุด การแก้ไฟล์ตรงจุดขณะเซิร์ฟเวอร์เปิดโลกอยู่ทำให้ไฟล์ถูกตัดได้
  • กำลังคัดลอกโลกสำหรับโหมดใหม่หรือไม่? เปลี่ยน LevelName ทันทีหลังคัดลอก ก่อนเซิร์ฟเวอร์อ่านไฟล์ เพื่อไม่ให้ระบบใดแคชชื่อผิด
  • ตรวจแถบไฟล์หลังโหลด แถบนี้แสดงรูปแบบและเวอร์ชันพื้นที่จัดเก็บที่ตรวจพบ หากไฟล์ Bedrock ถูกรายงานเป็นอย่างอื่นนอกจาก level.dat ของ Bedrock, แสดงว่าเลือกไฟล์ผิดหรือไฟล์เสีย

คำถามที่พบบ่อย

PocketMine-MP ใช้ level.dat แบบเดียวกับ Bedrock หรือไม่?

ใช่ PocketMine-MP ใช้รูปแบบโลก Bedrock ดังนั้นไฟล์ level.dat จึงเป็น NBT แบบ little-endian พร้อมส่วนหัว 8 ไบต์ มีรูปแบบไบต์เหมือนที่เซิร์ฟเวอร์ Bedrock แบบ Vanilla เขียน

ทำไมสองโลกจึงแสดงชื่อเดียวกันในคอนโซล?

เพราะทั้งสองโลกคัดลอกจากโฟลเดอร์เดียวและใช้ค่า LevelName โดยชื่อโฟลเดอร์และแท็กเป็นคนละค่า ให้แก้แท็ก

เปลี่ยนชื่อโลกโดยไม่เริ่มเซิร์ฟเวอร์ใหม่ได้หรือไม่?

ไม่ได้ โลกถูกโหลดในหน่วยความจำและเขียนใหม่เมื่อบันทึก การแก้ขณะทำงานจึงถูกทิ้ง ให้หยุด แก้ แล้วเริ่มเซิร์ฟเวอร์

รองรับ Nukkit และ PowerNukkitX หรือไม่?

ได้ ใช้รูปแบบ พาธไฟล์ และขั้นตอนเดียวกัน

แปลงโลก Bedrock เป็น Java ได้อย่างไร?

ใช้โปรแกรมแก้ไข NBT แปลงไม่ได้ ลำดับไบต์เป็นเพียงส่วนเล็ก เพราะโครงสร้างแท็ก พาเลตบล็อก และการเก็บชังก์ต่างกันทั้งหมด ให้ใช้โปรแกรมแปลงโลกโดยเฉพาะ แล้วใช้โปรแกรมนี้แก้ metadata ที่เหลือ

เครื่องมือที่เกี่ยวข้อง