โปรแกรมแก้ไข NBT ของ MCPE และ Minecraft Pocket 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 และอื่น ๆ ดูรายการทั้งหมด.

Bedrock Edition เขียน NBT แบบ little-endian และไฟล์ level.dat มีส่วนหัว 8 ไบต์นำหน้า ซึ่งเก็บเวอร์ชันพื้นที่จัดเก็บและความยาวเพย์โหลด วางไฟล์ Bedrock ด้านล่าง — level.dat , .mcstructure, ค่า LevelDB หรือข้อมูลโปรโตคอล — โปรแกรมจะอ่านโดยคงส่วนหัวไว้ คำนวณความยาวใหม่เมื่อบันทึก และส่งไฟล์กลับพร้อมนำไปวางในโฟลเดอร์โลก

MCPEMCBEBedrock Dedicated ServerPocketMine-MPNukkitPowerNukkitXCloudburstDragonflyEndstone

วาง ไฟล์ level.dat ของ Bedrock ที่นี่

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

ส่วนหัว 8 ไบต์และเหตุผลที่สำคัญ

ไฟล์ Bedrock level.dat ไม่ใช่ NBT ดิบ สี่ไบต์แรกเป็นเวอร์ชันพื้นที่จัดเก็บแบบ little-endian (ที่พบคือ 8 และ 10) สี่ไบต์ถัดมาเป็นความยาวของเพย์โหลด NBT เป็นไบต์ แล้วตามด้วยแท็กที่ไม่บีบอัด หากแก้เพย์โหลดโดยไม่แก้ความยาว เกมจะปฏิเสธไฟล์ ซึ่งเกิดขึ้นเมื่อเปิดไฟล์ Bedrock ด้วยเครื่องมือ NBT ที่รองรับเฉพาะ Java

ออฟเซ็ตขนาดฟิลด์
04 ไบต์เวอร์ชันพื้นที่จัดเก็บ ค่า int แบบ little-endian
44 ไบต์ความยาวเพย์โหลดเป็นไบต์ ค่า unsigned แบบ little-endian
8ที่เหลือNBT แบบ little-endian, root compound, ไม่บีบอัด

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

แท็ก Bedrock ที่ควรรู้

Bedrock เก็บการตั้งค่าไว้โดยตรงที่รากของ level.dat แทนที่จะซ้อนไว้ใต้ Data compound แบบ Java และกฎเกมจะแยกเป็นแท็กแต่ละรายการแทนที่จะอยู่ใน GameRules ย่อย

แท็กชนิดความหมาย
LevelNameStringชื่อโลกที่แสดงในรายการโลกและเอาต์พุตเซิร์ฟเวอร์
GameTypeInt0 เอาชีวิตรอด, 1 สร้างสรรค์, 2 ผจญภัย
DifficultyInt0 สงบ … 3 ยาก
commandsEnabledByteเปิดหรือปิดคำสั่งโกง
SpawnX , SpawnY , SpawnZIntจุดเกิดของโลก
RandomSeedLongseed ของโลก เป็นค่า 64 บิตจริง
lastOpenedWithVersionรายการของ Intรุ่นไคลเอนต์หรือเซิร์ฟเวอร์ที่เขียนโลกครั้งล่าสุด
StorageVersionIntรุ่นพื้นที่จัดเก็บของโลก ซึ่งตรงกับส่วนหัว
experimentsCompoundตัวเลือกทดลองที่เปิดใช้ในโลก
keepinventory , domobspawning, …Byteกฎเกม แต่ละกฎเป็นแท็กตัวพิมพ์เล็ก

ตำแหน่งไฟล์ในแต่ละแพลตฟอร์ม

  • Android: Android/data/com.mojang.minecraftpe/files/games/com.mojang/minecraftWorlds/<id>/level.dat. Android รุ่นใหม่จำกัดการเข้าถึงโฟลเดอร์นี้ ให้ส่งออกโลกจากเกมหรือใช้ตัวจัดการไฟล์ที่มีสิทธิ์เข้าถึง
  • iOS: ส่งออกโลกเป็น .mcworld จากเกม เปิดในแอป Files แล้วแตกไฟล์ที่นั่น — level.dat อยู่ที่รากของไฟล์บีบอัด
  • Windows: %LOCALAPPDATA%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\<id>\level.dat.
  • Bedrock Dedicated Server: worlds/<World>/level.dat.
  • PocketMine-MP, Nukkit, PowerNukkitX: worlds/<World>/level.dat — ดู คู่มือสำหรับเซิร์ฟเวอร์.

ชื่อโฟลเดอร์โลกเป็น id แบบสุ่ม ไม่ใช่ชื่อโลก ให้เรียงตามเวลาแก้ไข หรือเปิดไฟล์ level.dat หลายไฟล์ที่นี่แล้วอ่าน LevelName เพื่อระบุไฟล์ที่ถูกต้อง

ข้อมูลอื่นนอกจาก level.dat

Bedrock เก็บชังก์ entity และ block entity ในฐานข้อมูล LevelDB ภายในโฟลเดอร์ db/ โดยค่าของหลาย key เป็น NBT แบบ little-endian เมื่อแยกค่าออกมา โปรแกรมจะเปิดเป็น Bedrock แบบดิบ — ไม่มีส่วนหัวและไม่บีบอัด ไฟล์โครงสร้างใช้การเข้ารหัสเดียวกัน ดู โปรแกรมแก้ไข .mcstructure ข้อมูลที่จับจากโปรโตคอลใช้รูปแบบ varint ซึ่งโปรแกรมตรวจพบเป็น เครือข่าย Bedrock

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

ทำไม level.dat ของ Bedrock จึงเปิดใน NBTExplorer ไม่ได้?

เพราะ NBTExplorer ต้องการรูปแบบ big-endian ของ Java และไม่รู้จักส่วนหัว Bedrock 8 ไบต์ โปรแกรมนี้รองรับทั้งสองแบบและเขียนความยาวส่วนหัวใหม่เมื่อบันทึก

แก้โลก MCPE บนโทรศัพท์ได้หรือไม่?

ได้ เปิดหน้านี้ในเบราว์เซอร์โทรศัพท์ เลือกไฟล์จากตัวจัดการไฟล์ แก้ไขแล้วบันทึก ไฟล์จะอยู่ในโฟลเดอร์ Downloads จากนั้นคัดลอกกลับไปทับไฟล์เดิม

storage version 8 กับ 10 ต่างกันอย่างไร?

ค่าเหล่านี้ระบุรุ่นของรูปแบบพื้นที่จัดเก็บโลก Bedrock โดยไคลเอนต์ปัจจุบันเขียนค่า 10 โปรแกรมจะคงค่าเดิมของไฟล์แทนการบังคับ เพราะการเปลี่ยนค่าไม่ได้ย้ายข้อมูลโลก

ใช้กับไฟล์ .mcworld ได้หรือไม่?

เปิดโดยตรงไม่ได้ เพราะไฟล์ .mcworld เป็นไฟล์ zip ให้แตกไฟล์ แก้ไข level.dat ที่นี่ ใส่กลับเข้าไฟล์บีบอัด แล้วเปลี่ยนชื่อกลับเป็น .mcworld.

รองรับกฎเกมของ Bedrock หรือไม่?

ได้ Bedrock เก็บแต่ละกฎเป็นแท็ก byte ตัวพิมพ์เล็กแยกกันที่ราก — keepinventory , domobspawning , showcoordinates และอื่น ๆ ตั้งค่า byte เป็น 1 หรือ 0 ดู คู่มือกฎเกม สำหรับรายการทั้งหมด

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