Java 版 NBT 编辑器

支持 Minecraft 基岩版和 Java 版,也支持两者所有常见或少见的服务端核心:Vanilla、Paper、Spigot、Purpur、Folia、Fabric、Forge、NeoForge、Mohist、Sponge、Bedrock Dedicated Server、PocketMine-MP、Nukkit、PowerNukkitX、Cloudburst、Dragonfly、Endstone、LeviLamina 等。完整列表。

Minecraft Java 版以大端序 NBT 存储数据,并且几乎总是使用 gzip 压缩。将任意 Java 文件拖入下方,例如 level.dat、playerdata UUID 文件、servers.dat、结构 .nbt 或 WorldEdit 原理图;编辑器会解压文件,以大端序解析,再用 gzip 压缩写回,使游戏可以按原样接受。

VanillaPaperSpigotPurpurFoliaFabricQuiltForgeNeoForgeSponge

将Java NBT 文件拖放到这里

level.dat · .nbt · .mcstructure · .schem · .schematic · .dat · 区块转储数据

Java 世界包含哪些文件

下表中的文件都能在上方编辑器中打开。区域文件本身(.mca)是包含许多压缩区块的容器,而不是单个 NBT 文档,因此需要先提取区块负载;编辑器可读取提取出的 zlib 压缩区块 NBT。

路径内容压缩
world/level.dat世界名称、游戏模式、规则、出生点、DataVersiongzip
world/level.dat_old同一文件的上一次保存gzip
world/playerdata/<uuid>.dat物品栏、末影箱、位置、生命值、经验、属性gzip
world/data/raids.dat, idcounts.dat, map_*.dat袭击状态、实体 ID 计数器、地图物品gzip
world/data/scoreboard.dat记分项、队伍、分数gzip
world/region/*.mca区域容器内的区块 NBT每个区块使用 zlib
servers.dat客户端的多人服务器列表无
hotbar.nbt已保存的创造模式快捷栏无
数据包中的 *.nbt由结构方块和拼图方块放置的结构gzip

Java 如何编码 NBT

  • 大端序。每个整数和浮点数都先存储最高有效字节,与 Java 的 DataOutputStream 一致。
  • 有名称的根标签。文件以标签类型 0x0A 开头,之后是带 UTF-8 长度前缀的根名称;在 level.dat 中,该名称历来为空。
  • 修改版 UTF-8。字符串使用 Java 的 writeUTF 编码:长度占两个字节,NUL 写为 C0 80,基本平面以外的字符拆成两个三字节部分(CESU-8)。将其当作普通 UTF-8 的工具会破坏世界名称中的表情符号;本编辑器会正确编码。
  • 默认使用 gzip。NbtIo.readCompressed 需要 gzip 流。未压缩文件可在某些工具中加载,但游戏无法读取。
  • 网络中使用无名称根。从 1.20.2 开始,协议发送的 NBT 不含根名称。此类数据包转储会在这里被识别为Java 网络格式。

Paper、Spigot、Fabric、Forge 使用相同文件

分支和模组加载器改变服务器的运行方式,不改变世界的写入格式。Paper、Purpur、Pufferfish、Folia、Fabric、Quilt、Forge、NeoForge、Mohist、Arclight 和 Sponge 都使用 Vanilla 的 NBT 布局,因此本页内容可直接适用。分支会在世界旁添加 paper-world.yml、模组配置等额外文件,但它们属于 YAML 或 TOML,与 NBT 无关。

模组和插件可能在 level.dat 或 playerdata 内加入自己的复合标签。这些标签可以像其他标签一样打开;除非了解对应模组的处理方式,否则不要修改。

DataVersion 与版本迁移

Java 世界带有标识世界格式的 DataVersion 整数,每个快照都会递增。常用参考值:1.16.5 为 2586,1.17.1 为 2730,1.18.2 为 2975,1.19.4 为 3337,1.20.4 为 3700,1.21 为 3953。比写入世界的版本更旧的客户端会因该标签而拒绝打开;手动降低数值不会降级其后的区块数据,只会移除保护。可读取它来判断世界由哪个版本写入,但不要通过编辑它强制降级。

常见问题

可以打开游戏无法加载的 Java 的 level.dat 吗?

通常可以。编辑器比游戏更能容忍尾随字节;如果文件被截断,它会准确报告解析停止的位置。如果编辑器也拒绝,请尝试上一次自动保存的 level.dat_old。

支持 1.20.2+ 网络 NBT 吗?

支持。从 1.20.2 开始,协议会省略根名称。此类转储会被识别为Java 网络格式,可重新保存为网络 NBT,也可保存为普通的有名称根文件。

可以编辑 .mca 区域文件中的区块吗?

从区域容器提取区块 NBT 后即可编辑。.mca 本身由索引和多个 zlib 压缩的区块负载组成,而本编辑器处理单个 NBT 文档,不处理容器。

编辑 playerdata 会破坏玩家数据吗?

只有在服务器运行时编辑才容易出问题:服务器会将玩家状态保存在内存中,并在退出时写回,从而覆盖文件。先让玩家离线,完成编辑后再重新连接。请参阅 playerdata 编辑器。

level.dat 必须使用 gzip 吗?

Vanilla 加载器读取 gzip。请将压缩方式设为 gzip;如果输入文件原本如此,这也是默认设置,游戏即可正常接受。

相关工具