Server Properties
The Lumo server automatically generates server.properties from environment variables. This page explains how the generation works and how to customize it.
How It Works
Section titled “How It Works”The entrypoint.sh script generates server.properties on startup using environment variables. This means:
- No manual editing needed - Configure via ENV vars
- Updates persist - Changes survive container restarts
- Defaults provided - Sensible defaults for all properties
Generated Properties
Section titled “Generated Properties”Server Basics
Section titled “Server Basics”These are generated from environment variables:
| Property | ENV Variable | Default |
|---|---|---|
max-players | MAX_PLAYERS | 20 |
motd | MOTD | Welcome to the Lumo Universe! |
difficulty | DIFFICULTY | normal |
gamemode | GAMEMODE | survival |
hardcore | HARDCORE | false |
pvp | PVP | true |
online-mode | ONLINE_MODE | true |
World Configuration
Section titled “World Configuration”| Property | ENV Variable | Default |
|---|---|---|
level-name | - | world |
level-type | - | default |
level-seed | - | (random) |
view-distance | VIEW_DISTANCE | 12 |
simulation-distance | SIMULATION_DISTANCE | 10 |
spawn-protection | SPAWN_PROTECTION | 0 |
Entity Spawning
Section titled “Entity Spawning”| Property | ENV Variable | Default |
|---|---|---|
spawn-animals | SPAWN_ANIMALS | true |
spawn-monsters | SPAWN_MONSTERS | true |
spawn-npcs | SPAWN_NPCS | true |
Performance
Section titled “Performance”| Property | ENV Variable | Default |
|---|---|---|
max-tick-time | MAX_TICK_TIME | -1 |
network-compression-threshold | NETWORK_COMPRESSION_THRESHOLD | 256 |
entity-broadcast-range-percentage | ENTITY_BROADCAST_RANGE | 100 |
Server Behavior
Section titled “Server Behavior”| Property | ENV Variable | Default |
|---|---|---|
allow-flight | ALLOW_FLIGHT | true |
enable-command-block | ENABLE_COMMAND_BLOCK | true |
white-list | WHITELIST | false |
enforce-whitelist | ENFORCE_WHITELIST | false |
player-idle-timeout | PLAYER_IDLE_TIMEOUT | 0 |
| Property | ENV Variable | Default |
|---|---|---|
enable-rcon | ENABLE_RCON | true |
rcon.password | RCON_PASSWORD | minecraft |
rcon.port | RCON_PORT | 25575 |
Manual Customization
Section titled “Manual Customization”If you need properties not covered by environment variables, you can:
Option 1: Edit After First Start
Section titled “Option 1: Edit After First Start”- Start the container once to generate the file
- Stop the container
- Edit the file in the volume
- Restart
# Start containerdocker run -d --name minecraft -e EULA=true -v minecraft_data:/data ghcr.io/lucasilverentand/lumo-server:latest
# Wait for server to startsleep 60
# Stop serverdocker stop minecraft
# Edit server.properties (requires docker cp or volume inspection)docker run --rm -v minecraft_data:/data -it alpine vi /data/server.properties
# Restartdocker start minecraftOption 2: Mount Custom File
Section titled “Option 2: Mount Custom File”Create your own server.properties:
max-players=50difficulty=hardgamemode=survivalmotd=My Custom Server# ... other properties ...Mount it into the container:
docker run \ -e EULA=true \ -v /path/to/server.properties:/data/server.properties:ro \ ghcr.io/lucasilverentand/lumo-server:latestAdvanced Properties
Section titled “Advanced Properties”Some properties are set automatically and shouldn’t be changed:
| Property | Value | Reason |
|---|---|---|
server-port | 25565 | Docker port mapping handles external port |
server-ip | 0.0.0.0 | Binds to all interfaces (required in container) |
enable-query | false | Not needed with RCON |
enable-status | true | Required for server list |
Port Configuration
Section titled “Port Configuration”The server always uses port 25565 inside the container. Change the external port via Docker:
# External port 25566, internal port 25565-p 25566:25565Don’t change server-port in server.properties when using Docker.
JVM Configuration
Section titled “JVM Configuration”JVM flags are set in entrypoint.sh using Aikar’s flags:
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 --noguiTo modify JVM flags, you’ll need to build a custom image with modified entrypoint.sh.
Property Priority
Section titled “Property Priority”Properties are applied in this order (later overrides earlier):
- Default values in entrypoint.sh
- Environment variables
- Existing server.properties (if already present and not regenerated)
Examples
Section titled “Examples”Creative Server with Increased View Distance
Section titled “Creative Server with Increased View Distance”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:latestHardcore PvP Server
Section titled “Hardcore PvP Server”docker run \ -e EULA=true \ -e HARDCORE=true \ -e DIFFICULTY=hard \ -e PVP=true \ -e SPAWN_PROTECTION=0 \ ghcr.io/lucasilverentand/lumo-server:latestWhitelisted Private Server
Section titled “Whitelisted Private Server”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:latestViewing Current Properties
Section titled “Viewing Current Properties”Check the generated properties:
docker exec minecraft-server cat /data/server.propertiesTroubleshooting
Section titled “Troubleshooting”Properties Not Updating
Section titled “Properties Not Updating”If environment variable changes aren’t reflected:
- Stop the container
- Remove server.properties from the volume
- Restart - it will be regenerated
docker stop minecraft-serverdocker run --rm -v minecraft_data:/data alpine rm /data/server.propertiesdocker start minecraft-serverConflicts with Plugins
Section titled “Conflicts with Plugins”Some plugins (like Multiverse) override world settings. Check plugin configs if properties seem ignored.
Next Steps
Section titled “Next Steps”- Environment Variables - Full ENV reference
- Plugin Configuration - Configure plugins
- Troubleshooting - Common issues