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.
Having trouble? See v0.12.2 for what your setup should look like after completing this article.
Before You Begin
Prerequisites
- Minecraft Paper Server completed
Why This Approach
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 withyes)/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)
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.