โปรแกรมแก้ไข NBT สำหรับ Java Edition

รองรับ 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 และอื่น ๆ ดูรายการทั้งหมด.

Minecraft Java Edition เก็บข้อมูลเป็น NBT แบบ big-endian และเกือบทุกครั้งบีบอัดด้วย gzip วางไฟล์ Java ใดก็ได้ด้านล่าง — level.dat, ไฟล์ playerdata ที่มีชื่อเป็น UUID, servers.dat, ไฟล์โครงสร้าง .nbt, หรือ schematic ของ WorldEdit — โปรแกรมจะคลายการบีบอัด อ่านแบบ big-endian และเขียนกลับพร้อมบีบอัด gzip เพื่อให้เกมยอมรับไฟล์ในรูปแบบเดิม

VanillaPaperSpigotPurpurFoliaFabricQuiltForgeNeoForgeSponge

วาง ไฟล์ NBT ของ Java ที่นี่

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

ไฟล์ที่ประกอบเป็นโลก Java

ไฟล์ทั้งหมดด้านล่างเปิดได้ด้วยโปรแกรมด้านบน ส่วนไฟล์ Region (.mca) เป็นคอนเทนเนอร์ที่รวมชังก์บีบอัดจำนวนมาก ไม่ใช่เอกสาร NBT เดียว จึงต้องแยกเพย์โหลดชังก์ก่อน โปรแกรมจะอ่าน NBT ชังก์ที่บีบอัดด้วย zlib

พาธเนื้อหาการบีบอัด
world/level.datชื่อโลก โหมดเกม กฎ จุดเกิด และ DataVersiongzip
world/level.dat_oldข้อมูลบันทึกก่อนหน้าของไฟล์เดียวกันgzip
world/playerdata/<uuid>.datช่องเก็บของ หีบ Ender ตำแหน่ง พลังชีวิต XP และ attributesgzip
world/data/raids.dat, idcounts.dat, map_*.datสถานะ Raid ตัวนับ id ของ entity และไอเท็มแผนที่gzip
world/data/scoreboard.datเป้าหมาย ทีม และคะแนนgzip
world/region/*.mcaNBT ของชังก์ภายในคอนเทนเนอร์ Regionzlib ต่อชังก์
servers.datรายการเซิร์ฟเวอร์ Multiplayer ของไคลเอนต์ไม่มี
hotbar.nbtแถบไอเท็ม creative ที่บันทึกไว้ไม่มี
*.nbt ใน datapackโครงสร้างที่วางด้วย Structure Block และ Jigsawgzip

วิธีเข้ารหัส NBT ของ Java

  • Big-endian จำนวนเต็มและ float ทุกค่าจะเก็บไบต์ที่มีนัยสำคัญสูงสุดก่อน ตรงกับ DataOutputStream.
  • มีชื่อราก ไฟล์เริ่มด้วยชนิดแท็ก 0x0A, ตามด้วยชื่อราก UTF-8 ที่มีความยาวนำหน้า ซึ่งเดิมเป็นค่าว่างใน level.dat.
  • Modified UTF-8 สตริงใช้การเข้ารหัส writeUTF ของ Java: ความยาวสองไบต์ เขียน NUL เป็น C0 80, และอักขระนอก basic plane จะแบ่งเป็นสองส่วน ส่วนละสามไบต์ (CESU-8) เครื่องมือที่อ่านเป็น UTF-8 ปกติจะทำให้อีโมจิในชื่อโลกเสีย แต่โปรแกรมนี้เข้ารหัสได้ถูกต้อง
  • ใช้ gzip โดยปริยาย NbtIo.readCompressed ต้องการสตรีม gzip ไฟล์ที่ไม่บีบอัดอาจเปิดในบางเครื่องมือได้ แต่เกมไม่รับ
  • ไม่มีชื่อรากบนเครือข่าย ตั้งแต่ 1.20.2 โปรโตคอลส่ง NBT โดยไม่มีชื่อราก ข้อมูลแพ็กเก็ตรูปแบบนี้จะถูกตรวจพบเป็น เครือข่าย Java ที่นี่

Paper, Spigot, Fabric และ Forge ใช้ไฟล์เดียวกัน

fork และ mod loader เปลี่ยนวิธีทำงานของเซิร์ฟเวอร์ แต่ไม่เปลี่ยนรูปแบบโลก Paper, Purpur, Pufferfish, Folia, Fabric, Quilt, Forge, NeoForge, Mohist, Arclight และ Sponge ใช้โครงสร้าง NBT ของ Vanilla ทุกอย่างในหน้านี้จึงใช้ได้เหมือนกัน สิ่งที่ fork เพิ่มคือไฟล์อื่นข้างโลก เช่น paper-world.yml, config ของ mod ซึ่งเป็น YAML หรือ TOML และไม่เกี่ยวกับ NBT

mod และปลั๊กอินอาจเพิ่ม compound ของตนเองใน level.dat หรือ playerdata. แท็กเหล่านั้นเปิดได้เหมือนแท็กอื่น แต่ไม่ควรแก้หากไม่ทราบว่า mod ใช้งานอย่างไร

DataVersion และการย้ายเวอร์ชัน

โลก Java มีค่า DataVersion ชนิด integer ที่ระบุรูปแบบโลกและเพิ่มขึ้นทุก snapshot ตัวอย่าง: 1.16.5 คือ 2586, 1.17.1 คือ 2730, 1.18.2 คือ 2975, 1.19.4 คือ 3337, 1.20.4 คือ 3700 และ 1.21 คือ 3953 แท็กนี้ทำให้ไคลเอนต์เก่ากว่ารุ่นที่เขียนโลกปฏิเสธการเปิด การลดค่าด้วยมือไม่ได้ลดรุ่นข้อมูลชังก์ แต่เพียงปิดการป้องกัน ใช้ค่านี้ตรวจสอบรุ่นที่เขียนโลก อย่าแก้เพื่อบังคับดาวน์เกรด

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

เปิด level.dat ของ Java ที่เกมโหลดไม่ได้ได้หรือไม่?

โดยทั่วไปเปิดได้ โปรแกรมยอมรับไบต์ส่วนเกินมากกว่าเกม และระบุตำแหน่งที่หยุดอ่านหากไฟล์ถูกตัด หากยังเปิดไม่ได้ ให้ลอง level.dat_old, ซึ่งเป็นข้อมูลบันทึกอัตโนมัติก่อนหน้า

รองรับ NBT เครือข่ายของ 1.20.2+ หรือไม่?

ได้ ตั้งแต่ 1.20.2 โปรโตคอลไม่ส่งชื่อราก ข้อมูลรูปแบบนี้จะถูกตรวจพบเป็น เครือข่าย Java และบันทึกใหม่เป็น NBT เครือข่ายหรือไฟล์ปกติที่มีชื่อรากได้

แก้ชังก์จากไฟล์ Region .mca ได้หรือไม่?

แก้ NBT ของชังก์ได้หลังแยกออกจากคอนเทนเนอร์ Region ไฟล์ .mca ประกอบด้วยดัชนีและเพย์โหลดชังก์ที่บีบอัดด้วย zlib จำนวนมาก โปรแกรมนี้ทำงานกับเอกสาร NBT เดียว ไม่ใช่คอนเทนเนอร์

การแก้ playerdata จะทำให้ข้อมูลผู้เล่นเสียหรือไม่?

จะมีปัญหาหากแก้ขณะเซิร์ฟเวอร์ทำงาน เพราะสถานะผู้เล่นอยู่ในหน่วยความจำและจะเขียนทับไฟล์เมื่อออกจากระบบ ให้ผู้เล่นออฟไลน์ก่อน แก้ไฟล์ แล้วจึงให้เชื่อมต่อใหม่ ดู โปรแกรมแก้ไข playerdata.

level.dat ต้องบีบอัดด้วย gzip หรือไม่?

ตัวโหลด Vanilla อ่าน gzip ให้บันทึกโดยตั้งการบีบอัดเป็น gzip ซึ่งเป็นค่าเริ่มต้นเมื่อไฟล์ต้นทางเป็นแบบนั้น แล้วเกมจะรับไฟล์

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