Skip to main content
The WorldLevelDat class provides access to the level.dat file, which stores world settings, game rules, spawn location, and experiments.

Constructor

const levelDat = new WorldLevelDat();

Loading and Saving

loadFromNbtBytes
(bytes: Uint8Array, context?: string) => void
Loads level.dat from NBT binary data.
const bytes = await file.getContent();
levelDat.loadFromNbtBytes(bytes, 'level.dat');
getBytes
() => Uint8Array | undefined
Serializes level.dat to NBT binary format.
const bytes = levelDat.getBytes();
persist
() => boolean
Saves current properties to the internal NBT structure.
levelDat.levelName = "My World";
levelDat.persist();
const bytes = levelDat.getBytes();

World Identification

levelName
string | undefined
World name displayed in-game.
levelDat.levelName = "Survival World";
randomSeed
string | undefined
World generation seed as a string.
levelDat.randomSeed = "3025905974105939481";

Spawn Location

spawnX
number | undefined
X coordinate of world spawn.
levelDat.spawnX = 0;
spawnY
number | undefined
Y coordinate of world spawn.
levelDat.spawnY = 100;
spawnZ
number | undefined
Z coordinate of world spawn.
levelDat.spawnZ = 0;

Game Settings

gameType
GameType | undefined
Game mode: survival (0), creative (1), or adventure (2).
import { GameType } from '@minecraft/creator-tools';

levelDat.gameType = GameType.creative;
difficulty
Difficulty | undefined
Game difficulty: peaceful (0), easy (1), normal (2), or hard (3).
import { Difficulty } from '@minecraft/creator-tools';

levelDat.difficulty = Difficulty.normal;
generator
Generator | undefined
World type: old (0), infinite (1), or flat (2).
import { Generator } from '@minecraft/creator-tools';

levelDat.generator = Generator.flat;
commandsEnabled
boolean | undefined
Whether commands/cheats are enabled.
levelDat.commandsEnabled = true;
levelDat.cheatsEnabled = true; // Alias
commandBlocksEnabled
boolean | undefined
Whether command blocks are enabled.
levelDat.commandBlocksEnabled = true;

Experiments

betaApisExperiment
boolean | undefined
Enable Beta APIs for scripting.
levelDat.betaApisExperiment = true;
deferredTechnicalPreviewExperiment
boolean | undefined
Enable Deferred Technical Preview.
levelDat.deferredTechnicalPreviewExperiment = true;
dataDrivenItemsExperiment
boolean | undefined
Enable Data Driven Items.
levelDat.dataDrivenItemsExperiment = true;
savedWithToggledExperiments
boolean | undefined
Whether experiments have been toggled.
experimentsEverUsed
boolean | undefined
Whether any experiments have been used.

Game Rules

doDaylightCycle
boolean | undefined
Whether daylight cycle advances.
levelDat.doDaylightCycle = false; // Freeze time
doWeatherCycle
boolean | undefined
Whether weather changes.
doMobSpawning
boolean | undefined
Whether mobs spawn naturally.
levelDat.doMobSpawning = false; // Disable mob spawning
doMobLoot
boolean | undefined
Whether mobs drop loot.
doTileDrops
boolean | undefined
Whether blocks drop items when broken.
doEntityDrops
boolean | undefined
Whether entities drop items.
doFireTick
boolean | undefined
Whether fire spreads.
mobGriefing
boolean | undefined
Whether mobs can destroy blocks.
keepInventory
boolean | undefined
Whether players keep inventory on death.
levelDat.keepInventory = true;
showCoordinates
boolean | undefined
Whether to show coordinates in UI.
levelDat.showCoordinates = true;
commandBlockOutput
boolean | undefined
Whether command blocks output to chat.
sendCommandFeedback
boolean | undefined
Whether commands send feedback.
randomTickSpeed
number | undefined
Random tick speed (default 1).
levelDat.randomTickSpeed = 3; // Faster crop growth

Damage Settings

fallDamage
boolean | undefined
Whether fall damage is enabled.
fireDamage
boolean | undefined
Whether fire damage is enabled.
drowningDamage
boolean | undefined
Whether drowning damage is enabled.
freezeDamage
boolean | undefined
Whether freeze damage is enabled.

Player Abilities

mayFly
boolean | undefined
Whether player can fly.
flying
boolean | undefined
Whether player is currently flying.
instaBuild
boolean | undefined
Whether player has instant build.
invulnerable
boolean | undefined
Whether player is invulnerable.
flySpeed
number | undefined
Fly speed multiplier (default 0.5).
walkSpeed
number | undefined
Walk speed multiplier (default 0.1).

Multiplayer

multiplayerGame
boolean | undefined
Whether multiplayer is enabled.
multiplayerGameIntent
boolean | undefined
Intent for multiplayer.
lanBroadcast
boolean | undefined
Whether to broadcast on LAN.
pvp
boolean | undefined
Whether PvP is enabled.

Version Information

lastPlayed
bigint | undefined
Timestamp of last play session.
minimumCompatibleClientVersion
number[] | undefined
Minimum client version required [major, minor, patch, build, revision].
levelDat.minimumCompatibleClientVersion = [1, 20, 0, 0, 0];
lastOpenedWithVersion
number[] | undefined
Last version that opened this world.
storageVersion
number | undefined
LevelDB storage version (usually 10).

Flat World Settings

flatWorldLayers
IFlatWorldLayerSet | undefined
Layer configuration for flat worlds.
levelDat.flatWorldLayers = {
  biome_id: 1,
  block_layers: [
    { block_name: "minecraft:bedrock", count: 1 },
    { block_name: "minecraft:dirt", count: 2 },
    { block_name: "minecraft:grass", count: 1 }
  ],
  encoding_version: 6,
  structure_options: null,
  world_version: "version.post_1_18"
};

Methods

ensureDefaults
() => void
Sets default values for all undefined properties.
levelDat.ensureDefaults();
// All properties now have sensible defaults
applyFromWorldSettings
(settings: IWorldSettings) => void
Applies settings from an IWorldSettings object.
levelDat.applyFromWorldSettings({
  name: "New World",
  gameType: GameType.creative,
  difficulty: Difficulty.peaceful,
  betaApisExperiment: true
});

Example: Modifying World Settings

import { WorldLevelDat, GameType, Difficulty } from '@minecraft/creator-tools';

async function configureWorld(levelDatFile: IFile) {
  // Load existing level.dat
  await levelDatFile.loadContent();
  const bytes = levelDatFile.content as Uint8Array;
  
  const levelDat = new WorldLevelDat();
  levelDat.loadFromNbtBytes(bytes);
  
  // Modify settings
  levelDat.levelName = "Creative Build World";
  levelDat.gameType = GameType.creative;
  levelDat.difficulty = Difficulty.peaceful;
  levelDat.commandsEnabled = true;
  levelDat.betaApisExperiment = true;
  levelDat.showCoordinates = true;
  levelDat.doDaylightCycle = false;
  levelDat.doWeatherCycle = false;
  levelDat.doMobSpawning = false;
  
  // Save changes
  levelDat.persist();
  const newBytes = levelDat.getBytes();
  
  if (newBytes) {
    levelDatFile.setContent(newBytes);
    await levelDatFile.saveContent();
    console.log('World settings saved');
  }
}

Enums

enum GameType {
  survival = 0,
  creative = 1,
  adventure = 2
}

enum Generator {
  old = 0,
  infinite = 1,
  flat = 2
}

enum Difficulty {
  peaceful = 0,
  easy = 1,
  normal = 2,
  hard = 3
}

enum PlayerPermissionsLevel {
  visitor = 0,
  member = 1,
  operator = 2,
  custom = 3
}

Build docs developers (and LLMs) love