🏠
首页
🎨
创意设计
🧮
游戏计算
🖥️
服务器管理
控制台

Minecraft Java 版存档格式教程

完整介绍 Minecraft Java 版存档格式结构。每个存档都是以 level.dat 为标识的独立文件夹,并包含存放地图与区域的子目录。学习 NBT 数据结构、目录组织和世界存档机制,适合开发者与技术玩家 🗂️


🗂️ 理解 Minecraft 存档格式结构

Minecraft Java 版使用 .minecraft/saves/ 目录中的精细化结构存储世界数据。每个存档都是以 level.dat 为标识的独立文件夹,包含 NBT 格式的全局信息,以及用于区域、玩家数据、统计信息与维度内容的专用子目录。这一 Java 版特性支持高级世界编辑与技术分析。

🗂️

完整目录结构

探索 Minecraft 世界存档中的每个文件夹与文件

⚙️

NBT 数据解析

理解 Named Binary Tag 格式与世界存储机制

🌍

多维度支持

了解主世界、下界与末地的数据组织方式

🔧

开发者资源

模组开发与世界编辑的必备知识


📁 交互式世界目录结构

浏览位于 .minecraft/saves/ 的完整存档目录结构

世界根目录(.minecraft/saves/WorldName/)

📂
📄
level.dat 存储世界全局信息(NBT 格式)
📄
level.dat_new 程序写入新的全局信息,然后重命名为 level.dat
📄
level.dat_old 上一个 level.dat 的备份
📄
session.lock 用于授予最后一个修改该存档的程序写入权限
📁
playerdata/ 玩家状态数据(UUID.dat,自 1.7.6 起)
📁
stats/ 玩家统计(UUID.json,自 1.7.2 起)
📁
advancements/ 玩家进度与配方(UUID.json,自 17w13a 起)
📁
data/ 杂项世界数据文件
📁
region/ 主世界区域文件(r.x.z.mca 格式)
📁
entities/ 主世界实体文件(与 region 数据分离)
📁
poi/ 兴趣点(床、工作站、钟、传送门等)
📁
datapacks/ 世界专用数据包
📄
resources.zip 世界加载时应用的资源包

data/ 文件夹内容

📂
📄
command_storage_<namespace>.dat 通用命令存储键值(自 19w38a)
📄
chunks.dat 用途未知
📄
idcounts.dat 最新地图编号信息
📄
map_<#>.dat 单张地图内容信息
📄
raids.dat 主世界正在进行的袭击信息
📄
random_sequences.dat 战利品表与 /random 的随机序列
📄
scoreboard.dat 记分板数据:目标、分数、队伍、显示槽

维度文件夹

📂
📁
DIM-1/ 下界维度(包含 region/、entities/、poi/、data/)
📄
DIM-1/data/raids_nether.dat 下界正在进行的袭击信息
📁
DIM1/ 末地维度(包含 region/、entities/、poi/、data/)
📄
DIM1/data/raids_end.dat 末地正在进行的袭击信息
📁
dimensions/ 由数据包或模组添加的非原版维度
📁
dimensions/<namespace>/<path>/ 使用命名空间与路径结构的自定义维度文件夹
📄
dimensions/<namespace>/<path>/data/raids.dat 自定义维度的袭击信息

已弃用文件(旧版本)

📂
📄
level.dat_mcr 从 MCRegion 转换为 Anvil 前的备份
📁
players/ 玩家数据存储(1.7.6 前,已被 playerdata/ 替代)
📄
data/villages.dat 村庄信息(1.14 起由 POI 区域文件替代)
📄
data/villages_nether.dat 下界村庄数据(1.8 加入,1.14 弃用)
📄
data/villages_end.dat 末地村庄数据(1.8 加入,1.14 弃用)
📄
r.#.#.mcr MCRegion 格式文件(Anvil 转换前)
📄
c.#.#.dat Alpha 存档格式区块(MCRegion 转换前)

⚙️ level.dat 文件结构解析

level.dat 文件使用 NBT(Named Binary Tag)格式保存世界全局信息,这是存档的主配置文件。

📋 NBT 结构概览

{
    "": {                    // 根复合标签
        "Data": {            // 主数据容器
            "LevelName": "My World",
            "version": 19133,
            "DataVersion": 3465,
            "RandomSeed": -1234567890,
            "SpawnX": 0,
            "SpawnY": 64,
            "SpawnZ": 0,
            "Time": 1000L,
            "DayTime": 1000L,
            // ... 还有更多字段
        }
    }
}

基础世界信息

6 个字段 ⚙️
LevelName String

在世界选择界面显示的存档名称

version Int

存档 NBT 版本号,Anvil 格式为 19133(1.2.1+)

DataVersion Int

数据版本号

RandomSeed Long

用于生成地形的随机种子

initialized Boolean

世界创建后完成初始化则为 true

SizeOnDisk Long

存档估算大小(旧字段)

玩法与难度设置

6 个字段 ⚙️
GameType Int

默认游戏模式:0=生存,1=创造,2=冒险,3=旁观者

Difficulty Byte

当前难度:0=和平,1=简单,2=普通,3=困难(默认 2)

DifficultyLocked Boolean

难度是否锁定(默认 false)

hardcore Boolean

为 true 时单人死亡后以旁观者模式重生

allowCommands Boolean

1 或 0(true/false)- 是否开启作弊

MapFeatures Boolean

是否生成结构(村庄、要塞、废弃矿井)

时间与天气系统

8 个字段 ⚙️
Time Long

从世界开始以来的游戏刻数

DayTime Long

时间:0=日出,6000=正午,12000=日落,18000=午夜,继续超过 24000

LastPlayed Long

上次加载存档的 Unix 毫秒时间戳

raining Boolean

当前是否下雨/下雪与云层覆盖

rainTime Int

切换“下雨”前的刻数

thundering Boolean

是否雷暴(仅在 raining 为 true 时生效)

thunderTime Int

切换“雷暴”前的刻数

clearWeatherTime Int

结束“晴天”的剩余刻数

世界边界配置

9 个字段 ⚙️
BorderCenterX Double

边界中心 X 坐标(默认 0)

BorderCenterZ Double

边界中心 Z 坐标(默认 0)

BorderSize Double

边界宽度与长度(默认 60000000)

BorderSafeZone Double

边界安全距离(默认 5)

BorderSizeLerpTarget Double

边界过渡目标大小(默认 60000000)

BorderSizeLerpTime Long

边界过渡时间(默认 0)

BorderDamagePerBlock Double

超出边界每格造成伤害(默认 0.2)

BorderWarningBlocks Double

边界警告显示距离(默认 5)

BorderWarningTime Double

边界警告显示时间(默认 15)

出生点与位置

3 个字段 ⚙️
SpawnX Int

世界出生点 X 坐标

SpawnY Int

世界出生点 Y 坐标

SpawnZ Int

世界出生点 Z 坐标

高级数据结构

8 个字段 ⚙️
DataPacks Compound

数据包选项,包含 Enabled 与 Disabled 数组

GameRules Compound

世界使用的游戏规则(所有值均为字符串)

CustomBossEvents Compound

自定义 Boss 血条集合

DimensionData Compound

维度相关数据(末影龙战斗等)

WorldGenSettings Compound

各维度生成设置(1.16+)

Player Compound

单人玩家状态(覆盖 UUID.dat)

WanderingTraderId Int Array

当前流浪商人 UUID(四个 int 组成)

Version Compound

保存存档的 Minecraft 版本信息

🗺️ 区域文件系统(Anvil 格式)

区域文件(.mca)使用 Anvil 格式存储 32×32 区块。每个区域包含地形、实体与方块数据。

📍 文件命名规则

区域文件遵循 r.x.z.mca 格式:

  • r - 表示区域文件
  • x - 区域 X 坐标
  • z - 区域 Z 坐标
  • .mca - Anvil 格式扩展名
示例: r.0.0.mca 覆盖 X、Z 方向 0-31 的区块

🏗️ 区块组织

每个区域文件包含最多 1,024 个区块(32×32):

  • 区域内区块坐标:0-31
  • 世界区块坐标:region * 32 + local
  • 每个区块覆盖 16×16 方块
  • 高度范围为 Y=-64 到 Y=319
计算: 区域 (1,1) 本地 (5,10) 的区块 = 世界区块 (37,42)

💾 数据存储

区域文件存储压缩后的区块数据:

  • 压缩:Zlib 或 Gzip
  • 格式:NBT 复合结构
  • 包含:方块、生物群系、实体、方块实体
  • 光照:方块光与天光数据
大小: 典型区域文件大小约 100KB 到 10MB

🧮 坐标计算器

计算区域与区块坐标:

区块: 0, 0
区域: r.0.0.mca
本地区块: 0, 0

🌌 多维度架构

Minecraft 支持多个维度,每个维度都有独立的数据文件夹和特性。

🌍

主世界

文件夹: 世界根目录

ID: minecraft:overworld

特性: 完整地形生成、村庄、结构

高度: Y=-64 到 Y=319

region/ entities/ poi/ data/
🔥

下界

文件夹: DIM-1/

ID: minecraft:the_nether

特性: 下界地形、堡垒、堡垒遗迹

高度: Y=0 到 Y=127

DIM-1/region/ DIM-1/entities/ DIM-1/poi/
🌟

末地

文件夹: DIM1/

ID: minecraft:the_end

特性: 末地岛、末地城、末影龙战斗

高度: Y=0 到 Y=255

DIM1/region/ DIM1/entities/ DIM1/poi/
🔮

自定义维度

文件夹: dimensions/namespace/path/

ID: 自定义 namespace:path

特性: 由数据包或模组定义

高度: 可配置

dimensions/

🔐 会话锁格式

session.lock 文件防止多个程序同时访问同一存档。

📄 文件内容

包含一个字符:

U+2603 ☃ 雪人
以 UTF-8 编码为 (E2 98 83)

1.16 之前: 包含一个大端 64 位整数时间戳

⚡ 加锁流程

  1. 程序打开 session.lock
  2. 写入雪人字符(\u2603)
  3. 尝试获取文件锁
  4. 如果锁失败,程序终止
  5. 程序继续访问世界数据

⚠️ 重要说明

  • 防止并发访问导致的存档损坏
  • 在外部编辑前完全关闭 Minecraft
  • Minecraft 崩溃时可能出现问题
  • 存档无法加载时可删除 session.lock
  • 旧版本使用时间戳监测

📍 兴趣点(POI)格式

POI 文件使用类似 Anvil 的 .mca 文件存储村民工作站、床等重要位置。

📊 POI 文件结构

{
    "": {                           // 根复合标签
        "Data": {                   // 主数据容器
            "Sections": {           // 按 Y 坐标的区块分段
                "2": {              // 分段 Y=2(方块 Y=32-47)
                    "Valid": 1,     // 正确加载时为 true
                    "Records": [    // POI 记录数组
                        {
                            "pos": [100, 64, 200],    // X, Y, Z 坐标
                            "type": "minecraft:bed",   // POI 类型
                            "free_tickets": 1          // 可用票据
                        }
                    ]
                }
            },
            "DataVersion": 3465        // 数据格式版本
        }
    }
}

🏠 村民 POI 类型

  • minecraft:armorer - 高炉
  • minecraft:butcher - 烟熏炉
  • minecraft:cartographer - 制图台
  • minecraft:cleric - 炼药台
  • minecraft:farmer - 堆肥桶
  • minecraft:fisherman - 木桶
  • minecraft:fletcher - 制箭台
  • minecraft:leatherworker - 炼药锅
  • minecraft:librarian - 讲台
  • minecraft:mason - 切石机
  • minecraft:shepherd - 织布机
  • minecraft:toolsmith - 锻造台
  • minecraft:weaponsmith - 砂轮

🏘️ 特殊 POI 类型

  • minecraft:home - 村民床(票据上限:1)
  • minecraft:meeting - 村庄铃(票据上限:32)
  • minecraft:beehive - 蜂巢/蜂箱(票据上限:0)
  • minecraft:nether_portal - 传送门方块(票据上限:0)
  • minecraft:lightning_rod - 避雷针(票据上限:0)
  • minecraft:lodestone - 磁石(票据上限:0)

🎫 票据系统

free_tickets 表示可用性:

  • 0 - 无村民可认领该 POI
  • 1 - 1 名村民可使用(多数工作站)
  • 32 - 多名村民可使用(仅铃)

非村民 POI 类型(蜂巢、传送门)始终为 free_tickets = 0

📐 坐标系统

POI 坐标存储为:

  • pos: [X, Y, Z] - 精确方块坐标
  • Sections: 按区块分段 Y 坐标组织
  • Y 坐标计算: 分段 Y=2 覆盖方块 Y=32 到 Y=47
  • 文件组织: 与区域文件类似(r.x.z.mca)

🛠️ 存档格式工具与资源

处理 Minecraft 存档和世界数据的必备工具与资源。

🔍

NBT 编辑器

查看与修改 NBT 数据结构:

  • NBTExplorer(Windows/Mac/Linux)
  • NBT Studio(跨平台)
  • 在线 NBT 查看器
  • 编程库(Python、Java、JS)
🗺️

世界编辑器

高级世界编辑工具:

  • WorldEdit(游戏内编辑)
  • MCEdit(外部世界编辑器)
  • Amulet 地图编辑器
  • 自定义脚本与程序
📊

分析工具

理解与分析世界数据:

  • 区块边界可视化
  • 区域文件分析器
  • 性能分析工具
  • 备份与迁移工具
💻

开发 API

编程接口与库:

  • Minecraft Forge 模组开发
  • Fabric 模组开发
  • Bukkit/Spigot/Paper 插件
  • NBT 解析库

📚 实践应用与使用场景

🖥️ 服务器管理

  • 世界备份与恢复策略
  • 玩家数据管理与恢复
  • 世界边界与出生点配置
  • 通过区块分析进行性能优化
  • 不同服务器平台之间迁移

🔨 模组开发

  • 自定义世界生成算法
  • 新维度创建与管理
  • 跨版本存档兼容性
  • NBT 数据结构操作
  • 区块加载与生成钩子

🎨 地图制作

  • 冒险地图制作与分发
  • 自定义地形与结构放置
  • 玩家进度追踪系统
  • 针对玩法的世界配置
  • 多维度解谜设计

🔬 数据分析

  • 玩家行为与活动追踪
  • 世界生成模式分析
  • 资源分布研究
  • 性能瓶颈定位
  • 存档损坏诊断

⚠️ 安全与最佳实践

🚨

关键安全规则

  • 编辑前务必备份存档
  • 外部编辑前完全关闭 Minecraft
  • 修改后验证文件完整性
  • 在副本中测试,不要直接编辑原件
  • 使用与你版本兼容的工具
💡

专业建议

  • 大型项目使用版本控制
  • 详细记录修改内容
  • 保留多代备份
  • 先在开发世界中测试修改
  • 修改后监控存档体积与性能
🔄

版本兼容性

  • 存档格式会在大版本之间变化
  • NBT 结构会随时间演进
  • 工具需与当前格式兼容
  • 准备版本升级的迁移策略
  • 验证备份的可用性