存档基础数据存储格式
跳转到导航
跳转到搜索
本文章所述内容仅适用于Java版。
存档基础数据存储文件是存档的核心文件,存储各种存档基础信息、维度信息和世界生成信息。
存储格式[编辑 | 编辑源代码]
存档基础数据存储文件位于<存档根目录>/level.dat
。在不同情况下,此文件会有多个副本,见下文§ 存储行为。
存档基础数据存储文件使用GZip压缩的NBT文件格式保存,其内部有下列NBT结构:
- 根标签
- *
*Data:存档基础数据。- *DataVersion:保存此存档基础数据存储文件的游戏的数据版本。如果此项不存在则游戏认为此项是-1。
- *allowCommands:存档是否启用命令。如果此项不存在,则游戏判断GameType是否为1(创造模式)。如果是则为
true
,否则为false
。 - *BorderCenterX:世界边界中心的X坐标。如果此项不存在则游戏默认为0。
- *BorderCenterZ:世界边界中心的Z坐标。如果此项不存在则游戏默认为0。
- *BorderDamagePerBlock:超出边界安全区后,玩家每远离安全区一格增加的伤害值。如果此项不存在则游戏默认0.2。
- *BorderSafeZone:超出边界后,玩家仍然不会受到伤害的安全区的宽度。如果此项不存在则游戏默认为5。
- *BorderSize:边界宽度。如果此项不存在则游戏默认为59999968。
- *BorderSizeLerpTarget:边界宽度过渡到的目标宽度。如果此项不存在则游戏默认为59999968。
- *BorderSizeLerpTime:边界宽度的过渡时间。如果此项不存在则游戏默认为0。
- *BorderWarningBlocks:玩家接近边界渲染出现红色警告框的最大距离。如果此项不存在则游戏默认为5。
- *BorderWarningTime:当玩家接近边界距离小于边界过渡速度乘以此值时渲染出现红色警告框。如果此项不存在则游戏默认为15。
- *clearWeatherTime:存档内世界晴天剩余时间,在此期间天气将保持晴天,但此值大于0不是晴天的必要条件。当此值不存在时游戏默认为0。
- CustomBossEvents:自定义Boss栏数据。
- <Boss栏命名空间ID>:一项自定义Boss栏数据。
- *
*Color:Boss栏的颜色代码,可以为pink
(粉色)、blue
(蓝色)、red
(红色)、green
(绿色)、yellow
(黄色)、purple
(紫色)和white
(白色)。 - *
*CreateWorldFog:Boss栏是否创建世界迷雾效果。 - *
*DarkenScreen:Boss栏是否会使天空变得黯淡。 - *
*Max:Boss栏的最大值。 - *
*Name:(文本组件)Boss栏所显示的文本。 - *
*Overlay:Boss栏的显示样式。可以的值有progress
(完整进度条)、notched_6
(进度条分为6段)、notched_10
(进度条分为10段)、notched_12
(进度条分为12段)和notched_20
(进度条分为20段)。 - *
*PlayBossMusic:Boss栏是否播放boss音乐。 - *
*Players:可以看见Boss栏的玩家列表。- : (UUID)一个玩家。
- *
*Value:Boss栏的当前值。 - *
*Visible:Boss栏是否对列表中的玩家可见。
- *
- <Boss栏命名空间ID>:一项自定义Boss栏数据。
- DataPacks:存档启用和禁用的数据包。此值不存在时游戏默认为仅启用
vanilla
数据包。- *
*Disabled:禁用的数据包。- :数据包名称。
- *
*Enabled:启用的数据包。- :数据包名称。
- *
- *DayTime:存档中游戏按照游戏昼夜循环而非游戏刻计算的游戏时间,可以被
/time
修改。当此值不存在时游戏默认为0。 - *Difficulty:存档的游戏难度。0-3分别为和平、简单、普通和困难。当此项不存在时游戏默认为2,即普通。
- *DifficultyLocked:此存档难度是否被锁定。当此项不存在时游戏默认为
false
。 - *DragonFight:末影龙战斗数据。
- Dragon:(UUID)当前末影龙的UUID。
- DragonKilled:末影龙是否已经死亡。如果此项不存在游戏默认为
false
。 - ExitPortalLocation:末影龙被击败后会飞往的地方,即返回传送门的位置。内部包含3个整数,分别代表XYZ坐标。
- Gateways:包含即将生成的末地折跃门的位置。刚创建世界时为20个数字,末影龙每死亡一次此列表长度减1,直到为全部清空后此项不再保存。
- :折跃门的角度,0为东方,数字按顺时针方向递增。
- IsRespawning:末影龙是否正在重生。如果此项不存在游戏默认为
false
。 - *NeedsStateScanning:此世界是否没有进入过末地。如果此项不存在游戏默认为
true
。 - *PreviouslyKilled:末影龙是否被击败过,决定下次击败末影龙获得的经验值。如果此项不存在游戏默认为
false
。
- enabled_features:启用的功能开关。此值不存在时游戏默认为仅启用
vanilla
功能开关。- :(命名空间ID)一项功能开关。
- *
*GameRules:存档的游戏规则。- <游戏规则名称>:一项游戏规则和对应的值。
- *GameType:存档的默认游戏模式,控制玩家进入世界或重生时的游戏模式。0为生存模式,1为创造模式,2为冒险模式,3为旁观模式。如果此项不存在则游戏默认为0,即生存模式。
- *hardcore:存档内玩家死亡后是否自动转变为旁观模式。当此项不存在时游戏默认为
false
。 - *initialized:存档是否被正确初始化。如果此项为false,游戏在加载存档之后会重新寻找世界出生点并重新放置奖励箱。当此项不存在时游戏默认为
true
。 - *LastPlayed:上次保存此存档的时间戳。当此项不存在时默认为0。
- *LevelName:存档的名称。当此项不存在时游戏默认为空字符串。
- Player:存档保存的玩家信息。此信息只在单人游戏存档中有效,且优先级高于玩家数据存储文件。独立服务端存档中无此数据。
- 见玩家数据格式。
- *raining:当前存档内世界是否正在降雨。如果此项不存在游戏默认为
false
。 - *rainTime:如果存档内世界目前不处于降雨天气,此值代表距离下一次降雨的时间。如果目前正处于降雨天气,此值表示距离降雨结束的时间。此值按游戏刻计算。如果此项不存在游戏默认为0。
- removed_features:此项无游戏逻辑作用,仅在崩溃中的
Removed feature flags
部分记录。- :一个字符串。
- *
*ScheduledEvents:存档内未处理的计划事件。 - *ServerBrands:打开过此存档的服务端的铭牌列表。
- :一个服务端铭牌。
- *SpawnAngle:存档世界出生点出生时所看向的水平角度,以顺时针角度计,为0时代表Z轴正方向(正南方)。如果此项不存在则游戏默认为0。
- *SpawnX:存档世界出生点的X坐标。如果此项不存在则游戏默认为0。
- *SpawnY:存档世界出生点的Y坐标。如果此项不存在则游戏默认为0。
- *SpawnZ:存档世界出生点的Z坐标。如果此项不存在则游戏默认为0。
- *thundering:当前存档内世界是否正处于雷暴天气。如果此项不存在游戏默认为
false
。 - *thunderTime:如果存档内世界目前不处于雷暴天气,此值代表距离下一次雷暴的时间。如果目前正处于雷暴天气,此值表示距离雷暴结束的时间。此值按游戏刻计算。如果此项不存在游戏默认为0。
- *Time:存档的游戏时间。此时间从存档被创建开始计时,单位为游戏刻。如果此项不存在则游戏默认为0。
- *
*version:存档区块文件的版本,对于Anvil文件格式(当前)为19133,对于MCRegion格式为19132,如果不为这两个值游戏获取存档信息时报错Unknown data version: <16进制此值>
。 - *
*Version:存储此存档时游戏的详细版本信息。- *Id:游戏的数据版本。如果此项不存在则使用当前正在加载此存档的游戏的数据版本。
- *Name:游戏的版本名称。如果此项不存在则使用当前正在加载此存档的游戏的版本名称。
- *Series:开发系列,用于标识开发分支。常规正式版和快照为
main
。如果此项不存在则使用当前正在加载此存档的游戏的开发系列。 - *Snapshot:表示此版本是否为快照版。如果此项不存在则使用当前正在加载此存档的游戏的类型。
- WanderingTraderId:(UUID)上一次成功生成的流浪商人的UUID。
- *WanderingTraderSpawnChance:游戏尝试生成流浪商人的成功概率。游戏加载时除以1000计算真实概率。如50表示5%的生成概率。如果此项不存在则游戏默认为0。
- *WanderingTraderSpawnDelay:距下次尝试生成流浪商人的时间,以游戏刻为单位。如果此项不存在则游戏默认为0。
- *WasModded:存档是否被修改过的客户端或服务端加载并保存。如果此项不存在游戏默认为
false
。 - *
*WorldGenSettings:此存档的世界生成设置。- *bouns_chest:玩家首次进入游戏时,是否在出生点附近生成奖励箱。如果此项不存在游戏默认为
false
。 - *
*dimensions:定义存档包含的所有维度及其世界生成设置。- <维度的命名空间ID>:定义维度和对应的数据。
- *
*generator:世界生成器数据。- 生成器,见维度数据格式/Generator
- *
*type:(命名空间ID)维度类型数据。
- *
- <维度的命名空间ID>:定义维度和对应的数据。
- *generate_features:世界是否生成结构。如果此项不存在游戏默认为
true
。 - legacy_custom_options:对世界生成不起到任何作用。存在此标签代表这个存档曾使用旧版自定义设置调整世界生成,在加载此存档时游戏会给出警告。
- *
*seed:数字形式的世界种子。
- *bouns_chest:玩家首次进入游戏时,是否在出生点附近生成奖励箱。如果此项不存在游戏默认为
- *
存储行为[编辑 | 编辑源代码]
每个存档都至少有一个存档基础数据存储文件。如果一个目录下不存在level.dat
和level.dat_old
文件,那么这个目录就不会被作为存档识别。
游戏有两种读取存档基础数据存储文件的方式:
- 在选择世界菜单中,游戏会读取游戏存档目录,查找所有带有存档基础数据存储文件的目录作为存档,并读取这些文件的部分基础信息显示在菜单内。
- 在游戏加载存档时,游戏会将存档基础数据存储文件的数据全部加载,并根据世界生成数据创建区块生成器等。
由于存档基础数据存储文件是存档最重要的文件,此文件在保存时会留下一个备份以减少数据损坏的可能性:
- 先将新的数据写入到
level<随机字符串>.dat
内。 - 将原先的
level.dat
移动到level.dat_old
。 - 删除
level.dat
。 - 将刚才写入的
level<随机字符串>.dat
移动到level.dat
。 - 如果有任何一步出错,都将
level.dat_old
移动回level.dat
。
备份文件与主文件的结构相同,当主文件损坏时,游戏会自动尝试恢复:
- 先将原先的
level.dat
移动到level.dat_corrupted_<时间戳>
。 - 删除
level.dat
。 - 将
level.dat_old
移动到level.dat
。 - 如果有任何一步出错,都将
level.dat_corrupted_<时间戳>
移动回level.dat
。
历史[编辑 | 编辑源代码]
Java版 | |||||||
---|---|---|---|---|---|---|---|
1.1 | 12w01a | 加入了generatorName。 | |||||
1.2 | ? | 加入了generatorVersion。 | |||||
1.3.1 | ? | 加入了allowCommands。 | |||||
加入了initialized。 | |||||||
1.4.2 | 12w32a | 加入了GameRules。 | |||||
加入了DayTime。 | |||||||
12w36a | 加入了generatorOptions,内容为超平坦世界的预设码。 | ||||||
1.8 | 14w02a | 加入了Difficulty和DifficultyLocked。 | |||||
14w07a | 加入了clearWeatherTime。 | ||||||
14w17a | 加入了BorderCenterX、BorderCenterZ和BorderSize。 | ||||||
现在generatorName可接受值customized ,此时generatorOptions为旧版自定义世界的预设码。 | |||||||
14w19a | 加入了BorderDamagePerBlock、BorderSafeZone、BorderSizeLerpTarget、BorderSizeLerpTime、BorderWarningBlocks和BorderWarningTime。 | ||||||
14w31a | 将BorderSizeLerpTime 的数据类型更改为长整型。 | ||||||
1.9 | 15w31a | 加入了DimensionData,末影龙战斗数据存于其1.DragonFight下。 | |||||
15w32a | 加入了Version和DataVersion。 | ||||||
1.13 | 17w43a | 加入了DataPacks。 | |||||
18w05a | 加入了CustomBossEvents。 | ||||||
18w16a | 现在generatorName可接受值buffet ,此时generatorOptions格式如下:{"biome_source":{"type":"minecraft:fixed","biomes":[<若干生物群系ID>]},"chunk_generator":{"type":"<生成器ID>"}} | ||||||
18w19a | 更改了generatorName为buffet 时generatorOptions的格式。
详细更改:[显示]
biome_source.type 新增可选值checkerboard 和vanilla_layered ,生成器ID重命名为surface 、caves 和floating_islands ,chunk_generator 新增options.default_block 和options.default_fluid 指定默认方块与默认流体。
| ||||||
pre8 | 移除了generatorOptions,由generatorOptions代替。 | ||||||
加入了legacy_custom_options。 | |||||||
1.14 | 19w05a | 加入了WanderingTraderSpawnChance、WanderingTraderSpawnDelay和WanderingTraderId。 | |||||
1.16 | 20w17a | 加入了BonusChest。 | |||||
20w20a | 将所有世界生成相关设置都集中到了WorldGenSettings内。
此前存储格式:[显示]
| ||||||
20w21a | 移除了SizeOnDisk。 | ||||||
末影龙战斗数据被移到Data下,而非Data.DimensionData.1下。 | |||||||
1.18 | 21w37a | 加入了Series标识开发分支。 | |||||
1.19 | 22w11a | 现在世界生成数据内的维度类型只能为命名空间ID。 | |||||
1.19.3 | 22w42a | 加入了enabled_features。 | |||||
1.20 | 23w12a | 加入了removed_features。 |
导航[编辑 | 编辑源代码]
[隐藏] | |||||
---|---|---|---|---|---|
通用文件 | |||||
客户端文件 | |||||
服务端文件 | |||||
存档文件 |
| ||||
启动器文件 | |||||
已过时文件 |