Skip to content

Server Properties

The Lumo server automatically generates server.properties from environment variables. This page explains how the generation works and how to customize it.

The entrypoint.sh script generates server.properties on startup using environment variables. This means:

  1. No manual editing needed - Configure via ENV vars
  2. Updates persist - Changes survive container restarts
  3. Defaults provided - Sensible defaults for all properties

These are generated from environment variables:

PropertyENV VariableDefault
max-playersMAX_PLAYERS20
motdMOTDWelcome to the Lumo Universe!
difficultyDIFFICULTYnormal
gamemodeGAMEMODEsurvival
hardcoreHARDCOREfalse
pvpPVPtrue
online-modeONLINE_MODEtrue
PropertyENV VariableDefault
level-name-world
level-type-default
level-seed-(random)
view-distanceVIEW_DISTANCE12
simulation-distanceSIMULATION_DISTANCE10
spawn-protectionSPAWN_PROTECTION0
PropertyENV VariableDefault
spawn-animalsSPAWN_ANIMALStrue
spawn-monstersSPAWN_MONSTERStrue
spawn-npcsSPAWN_NPCStrue
PropertyENV VariableDefault
max-tick-timeMAX_TICK_TIME-1
network-compression-thresholdNETWORK_COMPRESSION_THRESHOLD256
entity-broadcast-range-percentageENTITY_BROADCAST_RANGE100
PropertyENV VariableDefault
allow-flightALLOW_FLIGHTtrue
enable-command-blockENABLE_COMMAND_BLOCKtrue
white-listWHITELISTfalse
enforce-whitelistENFORCE_WHITELISTfalse
player-idle-timeoutPLAYER_IDLE_TIMEOUT0
PropertyENV VariableDefault
enable-rconENABLE_RCONtrue
rcon.passwordRCON_PASSWORDminecraft
rcon.portRCON_PORT25575

If you need properties not covered by environment variables, you can:

  1. Start the container once to generate the file
  2. Stop the container
  3. Edit the file in the volume
  4. Restart
Terminal window
# Start container
docker run -d --name minecraft -e EULA=true -v minecraft_data:/data ghcr.io/lucasilverentand/lumo-server:latest
# Wait for server to start
sleep 60
# Stop server
docker stop minecraft
# Edit server.properties (requires docker cp or volume inspection)
docker run --rm -v minecraft_data:/data -it alpine vi /data/server.properties
# Restart
docker start minecraft

Create your own server.properties:

server.properties
max-players=50
difficulty=hard
gamemode=survival
motd=My Custom Server
# ... other properties ...

Mount it into the container:

Terminal window
docker run \
-e EULA=true \
-v /path/to/server.properties:/data/server.properties:ro \
ghcr.io/lucasilverentand/lumo-server:latest

Some properties are set automatically and shouldn’t be changed:

PropertyValueReason
server-port25565Docker port mapping handles external port
server-ip0.0.0.0Binds to all interfaces (required in container)
enable-queryfalseNot needed with RCON
enable-statustrueRequired for server list

The server always uses port 25565 inside the container. Change the external port via Docker:

Terminal window
# External port 25566, internal port 25565
-p 25566:25565

Don’t change server-port in server.properties when using Docker.

JVM flags are set in entrypoint.sh using Aikar’s flags:

Terminal window
java -Xms${MEMORY} -Xmx${MEMORY} \
-XX:+AlwaysPreTouch \
-XX:+DisableExplicitGC \
-XX:+ParallelRefProcEnabled \
-XX:+PerfDisableSharedMem \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseG1GC \
-XX:G1HeapRegionSize=8M \
-XX:G1HeapWastePercent=5 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1MixedGCCountTarget=4 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1NewSizePercent=30 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:G1ReservePercent=20 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:MaxGCPauseMillis=200 \
-XX:MaxTenuringThreshold=1 \
-XX:SurvivorRatio=32 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar paper.jar --nogui

To modify JVM flags, you’ll need to build a custom image with modified entrypoint.sh.

Properties are applied in this order (later overrides earlier):

  1. Default values in entrypoint.sh
  2. Environment variables
  3. Existing server.properties (if already present and not regenerated)

Creative Server with Increased View Distance

Section titled “Creative Server with Increased View Distance”
Terminal window
docker run \
-e EULA=true \
-e GAMEMODE=creative \
-e DIFFICULTY=peaceful \
-e VIEW_DISTANCE=16 \
-e ALLOW_FLIGHT=true \
-e SPAWN_MONSTERS=false \
ghcr.io/lucasilverentand/lumo-server:latest
Terminal window
docker run \
-e EULA=true \
-e HARDCORE=true \
-e DIFFICULTY=hard \
-e PVP=true \
-e SPAWN_PROTECTION=0 \
ghcr.io/lucasilverentand/lumo-server:latest
Terminal window
docker run \
-e EULA=true \
-e WHITELIST=true \
-e ENFORCE_WHITELIST=true \
-e WHITELIST_USERS="Player1,Player2,Player3" \
-e ONLINE_MODE=true \
ghcr.io/lucasilverentand/lumo-server:latest

Check the generated properties:

Terminal window
docker exec minecraft-server cat /data/server.properties

If environment variable changes aren’t reflected:

  1. Stop the container
  2. Remove server.properties from the volume
  3. Restart - it will be regenerated
Terminal window
docker stop minecraft-server
docker run --rm -v minecraft_data:/data alpine rm /data/server.properties
docker start minecraft-server

Some plugins (like Multiverse) override world settings. Check plugin configs if properties seem ignored.