AnrDaemon / minecraft-nbt

Do What The F*ck You Want To Public License
4 stars 0 forks source link

Bedrock: can't read level.dat #2

Closed fuyutsuki closed 4 years ago

fuyutsuki commented 4 years ago
[19:26:21] [Server thread/CRITICAL]: OutOfBoundsException: "Unknown tag type 0x1f" (EXCEPTION) in "plugins/FixBrokenWorldTool/vendor/anrdaemon/minecraft-nbt/src/NBT/Dictionary" at line 40
[19:26:21] [Server thread/DEBUG]: #0 plugins/FixBrokenWorldTool/vendor/anrdaemon/minecraft-nbt/src/NBT/Tag(31): AnrDaemon\Minecraft\NBT\Dictionary::mapType(string[1] .)
[19:26:21] [Server thread/DEBUG]: #1 plugins/FixBrokenWorldTool/vendor/anrdaemon/minecraft-nbt/src/NBT/Reader(27): AnrDaemon\Minecraft\NBT\Tag::createFrom(object AnrDaemon\Minecraft\NBT\Reader)
[19:26:21] [Server thread/DEBUG]: #2 plugins/FixBrokenWorldTool/src/jp/mcbe/fuyutsuki/FixBrokenWorldTool/Main(51): AnrDaemon\Minecraft\NBT\Reader->read()
[19:26:21] [Server thread/DEBUG]: #3 plugins/FixBrokenWorldTool/src/jp/mcbe/fuyutsuki/FixBrokenWorldTool/Main(39): jp\mcbe\fuyutsuki\FixBrokenWorldTool\Main->processingFixWorld(string[3] pvp, string[33] D:\Repository\pmmp_dev\worlds\pvp)
[19:26:21] [Server thread/DEBUG]: #4 src/pocketmine/command/PluginCommand(54): jp\mcbe\fuyutsuki\FixBrokenWorldTool\Main->onCommand(object pocketmine\command\ConsoleCommandSender, object pocketmine\command\PluginCommand, string[9] fix-world, array[1])
[19:26:21] [Server thread/DEBUG]: #5 src/pocketmine/command/SimpleCommandMap(248): pocketmine\command\PluginCommand->execute(object pocketmine\command\ConsoleCommandSender, string[9] fix-world, array[1])
[19:26:21] [Server thread/DEBUG]: #6 src/pocketmine/Server(1811): pocketmine\command\SimpleCommandMap->dispatch(object pocketmine\command\ConsoleCommandSender, string[13] fix-world pvp)
[19:26:21] [Server thread/DEBUG]: #7 src/pocketmine/Server(1423): pocketmine\Server->dispatchCommand(object pocketmine\command\ConsoleCommandSender, string[13] fix-world pvp)
[19:26:21] [Server thread/DEBUG]: #8 vendor/pocketmine/snooze/src/SleeperHandler(123): pocketmine\Server->pocketmine\{closure}()
[19:26:21] [Server thread/DEBUG]: #9 vendor/pocketmine/snooze/src/SleeperHandler(85): pocketmine\snooze\SleeperHandler->processNotifications()
[19:26:21] [Server thread/DEBUG]: #10 src/pocketmine/Server(2157): pocketmine\snooze\SleeperHandler->sleepUntil(double 1594293981.0949)
[19:26:21] [Server thread/DEBUG]: #11 src/pocketmine/Server(1994): pocketmine\Server->tickProcessor()
[19:26:21] [Server thread/DEBUG]: #12 src/pocketmine/Server(1588): pocketmine\Server->start()
[19:26:21] [Server thread/DEBUG]: #13 src/pocketmine/PocketMine(273): pocketmine\Server->__construct(object BaseClassLoader, object pocketmine\utils\MainLogger, string[23] D:\Repository\pmmp_dev\, string[31] D:\Repository\pmmp_dev\plugins\)
[19:26:21] [Server thread/DEBUG]: #14 src/pocketmine/PocketMine(304): pocketmine\server()
[19:26:21] [Server thread/DEBUG]: #15 (11): require(string[78] phar://D:/Repository/pmmp_dev/PocketMine-MP.phar/src/pocketmine/PocketMine.php)

level.dat

AnrDaemon commented 4 years ago

Thanks, will see what I can do.

AnrDaemon commented 4 years ago

Can you provide an example code you are using to read the file? It seems you did not specify gzip stream first. (level.dat is a compressed stream.)

See example in https://github.com/AnrDaemon/minecraft-nbt-demos/blob/master/level-dat/level.php

AnrDaemon commented 4 years ago

To write back compressed stream, something like

$file = new NBT\Writer(new \SplFileObject('compress.zlib://' . __DIR__ . '/level.dat.new', 'wb'));
$file->write($nbt);

will do.

fuyutsuki commented 4 years ago

I'll try that, thanks

fuyutsuki commented 4 years ago

For level.dat it worked, but for .mca (Anvil file) only TAG_End is output.

Code:

$file = new Reader(new SplFileObject("compress.zlib://{$dataPath}", "rb"));
$nbt = $file->read();
unset($file);
var_dump($nbt);

Output:

object(AnrDaemon\Minecraft\NBT\TAG_End)#13117 (0) {
}

r.0.0.zip

AnrDaemon commented 4 years ago

Region files parsing is planned, but not implemented yet. Sorry for that.

AnrDaemon commented 4 years ago

If you are willing to give a hand, the issue is tracked as #3