Minecraft基岩WIN10世界由于缺少db / MANIFEST文件而损坏

问题描述

我最近遇到了一个非常具体的问题,该问题导致了我的世界minecraft基岩世界被破坏了(实际上,我的世界中缺少了大块)。原来,问题是因为我使用的是通过7zip使用以下命令创建的备份:

7z.exe a -r minecraftWorlds.7z %LOCALAPPDATA%\Packages\Microsoft.minecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\*.*

…这不是在没有扩展名的情况下添加文件,尤其是MANIFEST目录中的{worldID}/db文件

我不得不卸载Windows 10的minecraft,该版本删除了所有资源包并保存了世界,但是我认为我很好,因为我有一个每天进行备份的脚本。因此,我重新安装了minecraft并还原了备份,然后加载了我的世界,就像我说的那样,我的世界中只剩下了整整一块。

因此,我创建了一个新世界,并将其保存文件夹与还原的文件夹进行了比较,那时我注意到我的世界缺少MANIFEST子目录中的/db文件

在我的调查中,我发现了很多针对损坏的世界的修复程序,但它们都与损坏的level.dat文件有关,与db目录中丢失的文件无关。

由于缺少MANIFEST文件,像MCCToolchest这样的工具都无法打开世界数据文件

那么有什么事要做吗?

解决方法

首先,使用7-zip备份Minecraft Bedrock(Windows 10)世界的正确命令是:

7z.exe a -r minecraftWorlds.7z %LOCALAPPDATA%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\*

…最后没有“。*”。这将创建存储在minecraftWorlds目录中的所有文件的备份。

我做的研究越多,看来《我的世界》世界数据是以称为leveldb的数据库格式保存的。这是一个基于键/值对的数据库,已加载到内存中并存储在{worldID}/db文件夹中的一系列文件中。

以下是我能够恢复工作的MANIFEST文件并恢复世界的方式!

您将需要POSIX操作系统。由于没有人,我通过Ubuntu 18.04 LTS安装了“ Windows-subsystem-for-linux”,可以从Microsoft Store应用免费安装。

一旦安装,配置并启动了此应用程序,基本上就会进入bash命令提示符。

  • 首先,安装构建工具
sudo apt-get install git cmake g++ libsnappy-dev
git clone --recurse-submodules https://github.com/google/leveldb.git
cd leveldb && mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .

构建成功后,您将需要使用喜爱的linux编辑器创建以下c ++程序,并将文件另存为ldbrpr.cc

#include <cstdlib>
#include <leveldb/db.h>

int main(int argc,char *argv[])
{
    if(argc==2)
    {
        leveldb::Options o;
        leveldb::Status s=leveldb::RepairDB(argv[1],o);
        return s.ok()?EXIT_SUCCESS:EXIT_FAILURE;
    }
    else return EXIT_FAILURE;
}

保存文件后,需要对其进行编译。

g++ -o ldbrpr ldbrpr.cc -lleveldb -lpthread -L ~/leveldb/lib -I ~/leveldb/include

执行此命令后,您应该找到一个名为ldbrpr

的可执行文件。
ls -las

您现在需要为每个保存世界的文件夹执行该程序。这是通过以下命令完成的:

./ldbrpr /mnt/c/Users/DEV/AppData/Local/Packages/Microsoft.MinecraftUWP_8wekyb3d8bbwe/LocalState/games/com.mojang/minecraftWorlds/{worldsavefoldername}/db

将{worldsavefoldername}替换为您要恢复的每个世界的文件夹名称。如果您没有运行Windows-子系统-Linux,则路径可能会有所不同。如果您在其他计算机或VM上运行这些命令,则需要将保存世界的文件夹复制到该实例。

现在,下一部分至关重要。 Minecraft使用专有版本的leveldb,因此它似乎仅还原一个数据文件,并将所有其他数据文件放置在名为lost的子目录中。

由于我们的数据文件实际上并未遭到破坏,因此只有我们的MANIFEST文件在Windows资源管理器中打开每个世界的保存文件夹,并在db子文件夹中删除*.ldb文件,以及LOG文件。这应该只剩下两个MANIFEST文件和一个名为lost的文件夹。现在,将所有文件从db\lost文件夹复制回db文件夹。

现在启动Minecraft,您的世界应该就好了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...