Поэтому я пытаюсь создать свой собственный редактор карт Minecraft в Unity3d, который использует c #.Я использую это как ссылку https://minecraft.gamepedia.com/Region_file_format. Я могу проанализировать таблицу чанков файла региона, и затем я могу использовать эту таблицу, чтобы найти сжатые чанки, начиная с магических байтов zlib 78 9C
.Моя идея состоит в том, чтобы использовать System.IO.Compression.DeflateStream
для распаковки этого фрагмента данных, но когда я делаю это, я получаю ошибку IOException: Corrupted data ReadInternal
, исходящую из CheckResult
метода DelfateStreamNative
.Если я экспортирую порцию во временный файл и использую nodejs zlib для его раздувания, то он работает, но я думаю, что он пропускает контрольную сумму, потому что независимо от того, сколько данных я ему даю, он работает и возвращает мне что-то.
Я не могу себе представить, что инфлятор .NET сломан, поэтому я должен что-то делать не так.Длина сжатого чанка, который я анализирую до того, как сжатые данные кажутся неправильными, потому что мой первый чанк, как говорят, имеет размер 644 байта, но когда я смотрю на файл в шестнадцатеричном формате, у меня есть 1230 байт до заполнения нулями.К сожалению, 3-битный заголовок блока zlib указывает, что блок динамически сжимается, поэтому я не могу легко определить код EOB, и я действительно не понимаю RFC 1951, поэтому выяснение, где заканчивается буфер дефляции и начинается контрольная сумма, мне не под силу.И снова nodejs zlib не волнует, если я дам ему 644 байта или 1230, но чтобы получить полный распакованный кусок, я предполагаю, что мне нужно предоставить ему все сжатые данные.
Есть кто-нибудь, у кого есть распакованные фрагменты Minecraftв файлах области наковальни дают мне некоторое понимание?