𝔩𝔢𝔩𝕠𝔭𝔢𝔷
Theme

Homelab

Minecraft Import Existing World

Importing an Existing World into Your Minecraft Kubernetes Server

Overview

This article walks through restoring an existing Minecraft world and plugin configurations from a backup into your Kubernetes server. You will install plugins first to ensure proper config recognition, then restore world data and plugin configurations from your backup.

Tip

Having trouble? See v0.12.2 for what your setup should look like after completing this article.

Before You Begin

Prerequisites

Why This Approach

Note

Minecraft automatically upgrades worlds when loaded on a newer server version. Downgrading (newer world → older server) is not supported and may corrupt the world.

Phase 1: Install plugins before restoring world data so plugin configs are recognized.

Phase 2: Restore worlds and plugin data.

Add Plugins Configuration

HelmRelease (Plugins)

Add rcon.enabled under minecraftServer:

minecraftServer:
    # ... existing settings ...
    rcon:
        enabled: true

Add plugin configuration to extraEnv:

extraEnv:
    JVM_XX_OPTS: "..." # existing flags
    # BentoBox Classic Skyblock bundle (extracts with correct folder structure)
    MODPACK: "https://download.bentobox.world/api/generate?downloads=%5B%22BSkyBlock%22%2C%22Challenges%22%2C%22Level%22%2C%22Warps%22%2C%22ControlPanel%22%2C%22DimensionalTrees%22%2C%22Biomes%22%2C%22Bank%22%5D"
    # Plugins from Modrinth (auto-updated)
    MODRINTH_PROJECTS: |
        paper:viaversion
    # Plugins via direct URLs (Geyser/DirectionHUD not on Modrinth for Paper 1.21.11)
    PLUGINS: |
        https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
        https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
        https://hangarcdn.papermc.io/plugins/other/DirectionHUD/versions/1.8.1.2%2B1.21.7/PAPER/directionhud-paper-1.8.1.2%2B1.21.7.jar
    REMOVE_OLD_MODS: "TRUE"

Deploy Plugins

Commit Changes

git add k8s/apps/minecraft/helmrelease.yaml
git commit -m "feat(minecraft): add plugins configuration"
git push

Reconcile Flux

flux reconcile source git flux-system && flux reconcile kustomization sync

Verify Plugins

Plugin Files

# Wait for HelmRelease to be ready
flux get helmreleases -n minecraft -w

# Wait for pod to be running (2/2 containers)
kubectl get pods -n minecraft -w

# Check main plugins
kubectl exec -n minecraft deploy/minecraft -- ls /data/plugins/

# Check BentoBox addons
kubectl exec -n minecraft deploy/minecraft -- ls /data/plugins/BentoBox/addons/

# Check all plugins enabled successfully
kubectl exec -n minecraft deploy/minecraft -- cat /data/logs/latest.log | grep -iE "(Enabling|Done)" | head -30

Expected:

  • Main plugins: BentoBox, floodgate, ViaVersion, DirectionHUD, Geyser-Spigot
  • BentoBox addons: BSkyBlock, Challenges, Level, Warps, ControlPanel, DimensionalTrees, Biomes, Bank
  • "Done (XXs)! For help, type help" at the end

Test Plugins In-Game

Connect to the server, then check logs for your username:

kubectl logs -n minecraft -l app=minecraft -c minecraft --tail=10 | grep -i "joined"

Make yourself an operator (via rcon):

kubectl exec -it -n minecraft deploy/minecraft -- rcon-cli "op <your-username>"
  • Verify plugins work (in-game):

    • /island - Opens BentoBox island menu
    • /bsb challenges - Opens challenges admin (select "Import Template", confirm with yes)
    • /hud - DirectionHUD settings
    • /dest add "test" - Save a destination
  • Check console for any errors:

    kubectl logs -n minecraft -l app=minecraft -c minecraft --tail=20

    Once plugins are verified, proceed to restore world data.

    Restore World Data

    Backup Current Server

    Optional but recommended before restoring.

    POD=$(kubectl get pod -n minecraft -l app=minecraft -o jsonpath='{.items[0].metadata.name}')
    mkdir -p ~/minecraft-backup-current
    kubectl cp minecraft/$POD:/data ~/minecraft-backup-current/

    Extract Backup

    mkdir -p ~/minecraft-restore
    tar -xzf /path/to/server-backup.tar.gz -C ~/minecraft-restore
    ls ~/minecraft-restore/

    Upload Worlds

    What gets restored:

    • World data (world, world_nether, world_the_end)
    • BentoBox island worlds (bskyblock_world, bskyblock_world_nether, bskyblock_world_the_end)
    Note

    Any .jar files in the backup will be overwritten on restart by the chart's MODPACK/PLUGINS config.

    POD=$(kubectl get pod -n minecraft -l app=minecraft -o jsonpath='{.items[0].metadata.name}')
    
    for world in world world_nether world_the_end bskyblock_world bskyblock_world_nether bskyblock_world_the_end; do
      kubectl exec -n minecraft $POD -- rm -rf /data/$world
      kubectl cp ~/minecraft-restore/$world minecraft/$POD:/data/$world
      echo "Copied $world"
    done

    Restore Plugin Configs

    for dir in ~/minecraft-restore/plugins/*/; do
      dirname=$(basename "$dir")
      kubectl cp "$dir" minecraft/$POD:/data/plugins/$dirname
      echo "Copied plugins/$dirname"
    done

    Verify Uploads

    # Check worlds uploaded
    kubectl exec -n minecraft $POD -- ls /data/ | grep world
    
    # Check BentoBox Players (compare count with backup)
    ls ~/minecraft-restore/plugins/BentoBox/database/Players/
    kubectl exec -n minecraft $POD -- ls /data/plugins/BentoBox/database/Players/
    
    # If files missing, copy individually:
    # kubectl cp ~/minecraft-restore/plugins/BentoBox/database/Players/<uuid>.json minecraft/$POD:/data/plugins/BentoBox/database/Players/

    Restart Server

    kubectl rollout restart deployment -n minecraft minecraft
    kubectl get pods -n minecraft -w

    Verify Restore

    kubectl logs -n minecraft -l app=minecraft -c minecraft | grep -iE "(bentobox|Done)" | tail -10

    Log in and run /island to verify your island data restored.

    Next Steps

    With your world imported, add Bedrock support for cross-platform play.

    See: Minecraft Bedrock Support

    Previous
    Minecraft playit.gg Public Access