服务器地图大小限制
地图文件夹的目录结构
Vanilla 服务端的地图目录结构
一个典型的Java版世界存档文件夹内通常包含以下重要内容:
- level.dat: 这个文件存储了该世界的全局核心信息,如世界名称、种子、游戏时间、天气周期等。
- region/: 这个文件夹储存了主世界的区块数据(.mca文件),每个文件包含32x32个区块。
- DIM-1/: 这是下界(地狱) 维度的数据文件夹,其内部也包含相应的 region 等文件夹。
- DIM1/: 这是末地维度的数据文件夹。
- playerdata/: 存储玩家的数据信息,例如血量、经验值、物品栏等。
- data/: 存储一些其他世界数据,如村民信息、地图数据等。
- advancements/: 存储玩家的成就进度数据。
- stats/: 存储玩家在此世界的统计信息。
- poi/: (1.14+)存储世界内与村民工作站及探索点相关的数据。
PaperMC服务端的地图目录结构
# 主世界
world
├── advancements
├── data
├── datapacks
├── entities
├── generated
├── playerdata
├── poi
├── region
└── stats
# 下界
world_nether
├── data
└── DIM-1
# 终末之地
world_the_end
├── data
└── DIM1
如何计算服务器地图占用磁盘的大小
默认情况下,minecraft 服务器配置文件server.properties
中指定:
max-world-size=29999984 # 单位为方块,表示地图的最大半径
max-build-height=256 # 单位为方块,表示地图的最大高度
Minecraft地图是正方形的,是按 区块(block) 为单位进行存储的,一个区块的默认尺寸为: 16x16x256(长x宽x高)。也就是说一个区块存放:65536 个方块。按照默认设置,地图总共会有:
((2 * max-world-size) ^ 2) * max-build-height = 921599016960262144
个方块,也就是 14062485000004 个区块。
按照一个高度为256的区块在磁盘中的存储大小约为:4M 来计算,共需要磁盘空间约为:53644124 GB
所以,要开一个可维护的Minecraft服务器,需要控制好磁盘使用。就必须有一个磁盘容量上限。按目前云服务器一般配备50GB磁盘空间来算,除去10GB系统占用,可供开服存储地图的磁盘空间仅有40GB, 按地图默认高度max-build-height=256计算,地图的最大半径值为:max-world-size=810 这是假设玩家会经过所有方块的场景的理想情况。显然这种计算是不符合实际情况的。假设一个方块地图玩家只会经过其中的10%,那么max-world-size=2561。这显然,也不能反映实际情况。所以需要统计一下,区块使用率,用来指导设置世界大小
地图备份文件占用磁盘太大解决方案
目前服务器托管平台,提供自动优化地图大小的能力。地图中玩家没有呆过的区块会被不定时的清理掉,保证地图文件的大小可控。 如果你的地图文件太大,可以使用工具 mcaselector 进行区域按条件筛选后, 进行删除,可以显著减小地图文件占用空间。
可以使用CLI命令行模式进行操作,参考文档:mcaselector CLI 模式
备份地图的命令:
# 仅导出玩家待了5分钟以上的方块
java -jar \
mcaselector-2.5.3.jar \
--mode export \
--query "InhabitedTime > 5min" \
--world <directory_of_world> \
--output-world <directory_for_backup>
# 在原始地图上直接操作,删除所有玩家没待满5分钟以上的方块
java -jar \
mcaselector-2.5.3.jar \
--mode delete \
--query "InhabitedTime <= 5min" \
--world <directory_of_world>
CLI命令使用参数速查图: