Introduction to World Management

On Minecraft servers, world management is the foundation of the gameplay experience. Separate worlds for different game modes, world borders, pre-generation for performance and backups for data safety — all of it is mandatory on a professional server.

In this guide we cover multi-world management with Multiverse-Core, borders and pre-generation with WorldBorder/Chunky, automatic backup scripts and world optimization in detail.

Installing Multiverse-Core

Multiverse-Core is the most popular plugin for creating and managing multiple worlds on a Minecraft server.

Installing Multiverse-Core

cp Multiverse-Core-4.3.12.jar /opt/minecraft/plugins/
systemctl restart minecraft

We also recommend installing Multiverse-Portals (portals between worlds) and Multiverse-NetherPortals (Nether/End portal management).

  • Multiverse-Core — core world management (creating, deleting, settings)
  • Multiverse-Portals — custom portals between worlds
  • Multiverse-NetherPortals — Nether and End portal links
  • Multiverse-Inventories — per-world inventory separation

World Creation and Management Commands

The core commands used for world management with Multiverse-Core are summarised in the table below:

CommandDescriptionExample
/mv create <name> <environment>Create a new world/mv create skyblock NORMAL
/mv create <name> <environment> -g <generator>Create with a generator/mv create void NORMAL -g CleanroomGenerator:.
/mv delete <name>Delete a world/mv delete old_world
/mv import <name> <environment>Import an existing world/mv import world_backup NORMAL
/mv load <name>Load a world/mv load survival
/mv unload <name>Unload a world from memory/mv unload creative
/mv tp <world>Teleport to a world/mv tp skyblock
/mv listList all worlds/mv list
/mv info <name>Show world information/mv info survival
/mv setspawnSet the world spawn point/mv setspawn
/mv modify set <setting> <value>Change a world setting/mv modify set difficulty hard
/mv regen <name>Regenerate a world/mv regen skyblock
/mv clone <source> <target>Clone a world/mv clone survival survival_backup

World Settings

You can configure settings such as game mode, difficulty and weather separately for each world:

Game Mode and Difficulty

yaml
# plugins/Multiverse-Core/worlds.yml — World settings
worlds:
  survival:
    environment: NORMAL
    generator: DEFAULT
    gameMode: SURVIVAL
    difficulty: HARD
    pvp: true
    hunger: true
    keepSpawnInMemory: true
    allowFlight: false
    autoHeal: true
    animals:
      spawn: true
      rate: 1
    monsters:
      spawn: true
      rate: 1
  creative:
    environment: NORMAL
    gameMode: CREATIVE
    difficulty: PEACEFUL
    pvp: false
    hunger: false
    keepSpawnInMemory: false
    allowFlight: true
    animals:
      spawn: true
    monsters:
      spawn: false

Spawn Settings

You can configure the spawn point and its related settings for each world:

SettingCommandDescription
Set spawn/mv setspawnMakes your current location the spawn
Teleport to spawn/mv spawnTakes you to the world spawn point
Keep spawn in memory/mv modify set memory trueKeeps the spawn chunks in memory
First join world/mv modify set firstspawnoverride trueSends new players to this world
Bed respawn/mv modify set bedrespawn trueUse the bed spawn point

WorldBorder and World Limits

World borders are critical for server performance. An unlimited world means unlimited chunk generation, which means ever-growing disk and RAM usage. Set a sensible border for every world.

Vanilla WorldBorder Commands

CommandDescriptionExample
/worldborder center <x> <z>Set the border centre/worldborder center 0 0
/worldborder set <diameter>Set the border diameter (blocks)/worldborder set 10000
/worldborder set <diameter> <time>Gradual border change/worldborder set 20000 3600
/worldborder add <amount>Expand the border/worldborder add 2000
/worldborder damage amount <damage>Damage outside the border/worldborder damage amount 0.5
/worldborder damage buffer <distance>Distance before damage starts/worldborder damage buffer 5
/worldborder warning distance <blocks>Warning distance/worldborder warning distance 50
/worldborder warning time <sec>Warning time/worldborder warning time 15
/worldborder getCurrent border information/worldborder get

Pre-Generation with Chunky

Pre-generation creates the world's chunks before players ever explore them. That way, when players head into new territory the server does not have to generate chunks on the spot, and there is no TPS drop.

Set the Chunky pre-generation radius

/chunky world survival
/chunky center 0 0
/chunky radius 5000
/chunky start
text
Chunky command order:
1. /chunky world <world>       → Select the target world
2. /chunky center <x> <z>     → Centre coordinates
3. /chunky radius <blocks>    → Radius (in blocks)
4. /chunky shape <shape>      → square or circle
5. /chunky start              → Start pre-generation
6. /chunky pause              → Pause
7. /chunky continue           → Resume
8. /chunky cancel             → Cancel

Disk usage will grow significantly after pre-generation. The table below shows approximate figures:

Radius (blocks)Chunk Count (square)Approximate Size
1,000~3,900~500 MB
2,500~24,400~3 GB
5,000~97,600~12 GB
10,000~390,600~45 GB
20,000~1,562,500~160 GB

Automatic Backups

Backing up world data regularly is the single most effective way to prevent data loss. Below you will find a bash backup script and a cron configuration.

The Backup Script

bash
#!/bin/bash
# minecraft-backup.sh — Automatic world backup script

# Settings
SERVER_DIR="/opt/minecraft"
BACKUP_DIR="/opt/backups/minecraft"
DATE=$(date +%Y-%m-%d_%H-%M)
RETENTION_DAYS=7
SCREEN_NAME="minecraft"

# Create the backup folder
mkdir -p "$BACKUP_DIR"

# Announce the backup and turn off auto-saving
screen -S $SCREEN_NAME -p 0 -X stuff "say §6Backup starting, you may notice a brief delay...$(printf '\r')"
screen -S $SCREEN_NAME -p 0 -X stuff "save-off$(printf '\r')"
screen -S $SCREEN_NAME -p 0 -X stuff "save-all$(printf '\r')"
sleep 5

# Compress the worlds
cd "$SERVER_DIR"
tar -czf "$BACKUP_DIR/worlds_$DATE.tar.gz" \
  world/ world_nether/ world_the_end/ \
  survival/ creative/ skyblock/ \
  --exclude='*.tmp' --exclude='session.lock'

# Turn saving back on
screen -S $SCREEN_NAME -p 0 -X stuff "save-on$(printf '\r')"
screen -S $SCREEN_NAME -p 0 -X stuff "say §aBackup complete!$(printf '\r')"

# Clean up old backups
find "$BACKUP_DIR" -name "worlds_*.tar.gz" -mtime +$RETENTION_DAYS -delete

echo "[$DATE] Backup complete: $BACKUP_DIR/worlds_$DATE.tar.gz"

Scheduling with Cron

To run the script automatically with cron:

Add a cron job

# Back up every day at 04:00
0 4 * * * /opt/minecraft/minecraft-backup.sh >> /var/log/mc-backup.log 2>&1

# Back up every 6 hours
0 */6 * * * /opt/minecraft/minecraft-backup.sh >> /var/log/mc-backup.log 2>&1

Do not forget to make the script executable:

Make the script executable

chmod +x /opt/minecraft/minecraft-backup.sh

World Optimization

World settings directly affect server performance. Entity management and chunk operations in particular need to be optimised.

Entity Limits

yaml
# bukkit.yml — Entity spawn limits
spawn-limits:
  monsters: 50        # Default: 70
  animals: 8           # Default: 10
  water-animals: 3     # Default: 5
  water-ambient: 10    # Default: 20
  water-underground-creature: 3  # Default: 5
  axolotls: 3          # Default: 5
  ambient: 1           # Default: 15

ticks-per:
  animal-spawns: 400   # Default: 400
  monster-spawns: 4    # Default: 1 — raise it to save CPU

Chunk GC (Garbage Collection)

Clearing unused chunks out of memory optimises RAM usage:

yaml
# paper-world-defaults.yml (Paper 1.19+)
chunks:
  max-auto-save-chunks-per-tick: 8
  auto-save-interval: 6000     # every 5 minutes
  delay-chunk-unloads-by: 10s  # chunk unload delay
  prevent-moving-into-unloaded-chunks: true
  entity-per-chunk-save-limit:
    arrow: 16
    ender_pearl: 8
    experience_orb: 16
    fireball: 8
    snowball: 8
    small_fireball: 8

Managing the Nether and the End

The Nether and End worlds need special attention. Limiting them and resetting them regularly is important.

Nether/End Links with Multiverse

You can manage Nether and End portal links with the Multiverse-NetherPortals plugin:

yaml
# plugins/Multiverse-NetherPortals/config.yml
worlds:
  survival:
    nether: survival_nether
    end: survival_the_end
  creative:
    nether: creative_nether
    end: creative_the_end

Resetting the End World Periodically

Resetting the End world periodically keeps the Elytra and Shulker Box economy in balance:

bash
#!/bin/bash
# end-reset.sh — End world reset script
SERVER_DIR="/opt/minecraft"
SCREEN_NAME="minecraft"

# Warn the players
screen -S $SCREEN_NAME -p 0 -X stuff "say §c[!] The End world will be reset in 5 minutes!$(printf '\r')"
sleep 300

# Teleport players in the End back to spawn
screen -S $SCREEN_NAME -p 0 -X stuff "mv tp survival world_the_end$(printf '\r')"
sleep 5

# Unload and delete the world
screen -S $SCREEN_NAME -p 0 -X stuff "mv unload world_the_end$(printf '\r')"
sleep 3
screen -S $SCREEN_NAME -p 0 -X stuff "mv delete world_the_end$(printf '\r')"
screen -S $SCREEN_NAME -p 0 -X stuff "mv confirm$(printf '\r')"
sleep 5

# Recreate it
screen -S $SCREEN_NAME -p 0 -X stuff "mv create world_the_end THE_END$(printf '\r')"
sleep 10

screen -S $SCREEN_NAME -p 0 -X stuff "say §aThe End world has been reset! Happy exploring.$(printf '\r')"

Importing and Exporting Worlds

Follow the steps below to bring existing worlds onto the server or export them from it:

Importing a World

  • Copy the world folder into the server root directory (e.g. /opt/minecraft/map_name/)
  • Make sure the folder contains a level.dat file
  • Import it with the /mv import map_name NORMAL command
  • Test it with /mv tp map_name

Exporting a World

Archive the world

cd /opt/minecraft
tar -czf survival_export.tar.gz survival/ --exclude=session.lock

Frequently Asked Questions

How do I check the size of a world?

Check the world size

du -sh /opt/minecraft/survival/
du -sh /opt/minecraft/world_nether/
du -sh /opt/minecraft/world_the_end/

How do I repair a corrupted chunk?

Corrupted chunks can be repaired with the MCA Selector tool or the --forceUpgrade parameter. Always take a backup first:

Upgrade the world chunks and clear the cache

cd /opt/minecraft && java -jar paper.jar --forceUpgrade --eraseCache