123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #!/bin/bash
- cd /home/minecraft
- # https://github.com/itzg/dockerfiles/blob/master/minecraft-server/start-minecraft.sh
- if [ ! -e eula.txt ]; then
- if [ "$EULA" != "" ]; then
- echo "# Generated via Docker at $(date)" > eula.txt
- echo "eula=TRUE" >> eula.txt
- else
- echo "Accept the Minecraft EULA at"
- echo " https://account.mojang.com/documents/minecraft_eula"
- echo "by adding -e EULA=TRUE"
- exit 1
- fi
- fi
- SERVER_PROPERTIES=server.properties
- function setProp {
- local prop=$1
- local var=$2
- if [ -n "$var" ]; then
- echo "Setting $prop to $var"
- sed -i "/$prop\s*=/ c $prop=$var" server.properties
- fi
- }
- if [ ! -e server.properties ]; then
- echo "Creating server.properties"
- cp base.properties server.properties
- if [ -n "$WHITELIST" ]; then
- echo "Whitelist enable. You need to create the whitelist.json maunally, or disable and add users with /whitelist nick"
- fi
- setProp "motd" "$MOTD"
- setProp "allow-nether" "$ALLOW_NETHER"
- setProp "announce-player-achievements" "$ANNOUNCE_PLAYER_ACHIEVEMENTS"
- setProp "enable-command-block" "$ENABLE_COMMAND_BLOCK"
- setProp "spawn-animals" "$SPAWN_ANIMAILS"
- setProp "spawn-monsters" "$SPAWN_MONSTERS"
- setProp "spawn-npcs" "$SPAWN_NPCS"
- setProp "generate-structures" "$GENERATE_STRUCTURES"
- setProp "spawn-npcs" "$SPAWN_NPCS"
- setProp "view-distance" "$VIEW_DISTANCE"
- setProp "hardcore" "$HARDCORE"
- setProp "max-build-height" "$MAX_BUILD_HEIGHT"
- setProp "force-gamemode" "$FORCE_GAMEMODE"
- setProp "hardmax-tick-timecore" "$MAX_TICK_TIME"
- setProp "enable-query" "$ENABLE_QUERY"
- setProp "query.port" "$QUERY_PORT"
- setProp "enable-rcon" "$ENABLE_RCON"
- setProp "rcon.password" "$RCON_PASSWORD"
- setProp "rcon.port" "$RCON_PORT"
- setProp "max-players" "$MAX_PLAYERS"
- setProp "max-world-size" "$MAX_WORLD_SIZE"
- setProp "level-name" "$LEVEL"
- setProp "level-seed" "$SEED"
- setProp "pvp" "$PVP"
- setProp "generator-settings" "$GENERATOR_SETTINGS"
- setProp "online-mode" "$ONLINE_MODE"
- if [ -n "$LEVEL_TYPE" ]; then
- # uppercase
- LEVEL_TYPE=$( echo ${LEVEL_TYPE} | tr '[:lower:]' '[:upper:]' )
- echo "Setting level type to $LEVEL_TYPE"
- case $LEVEL_TYPE in
- DEFAULT|FLAT|LARGEBIOMES|AMPLIFIED|CUSTOMIZED|BIOMESOP)
- setProp "level-type" "$LEVEL_TYPE"
- ;;
- *)
- echo "Invalid LEVEL_TYPE: $LEVEL_TYPE"
- echo "Try: DEFAULT FLAT LARGEBIOMES AMPLIFIED CUSTOMZED or BIOMESOP"
- exit 1
- ;;
- esac
- fi
- if [ -n "$DIFFICULTY" ]; then
- case $DIFFICULTY in
- peaceful|0)
- DIFFICULTY=0
- ;;
- easy|1)
- DIFFICULTY=1
- ;;
- normal|2)
- DIFFICULTY=2
- ;;
- hard|3)
- DIFFICULTY=3
- ;;
- *)
- echo "DIFFICULTY must be peaceful, easy, normal, or hard."
- exit 1
- ;;
- esac
- echo "Setting difficulty to $DIFFICULTY"
- setProp "difficulty" "$DIFFICULTY"
- fi
- if [ -n "$MODE" ]; then
- echo "Setting mode"
- MODE_LC=$( echo $MODE | tr '[:upper:]' '[:lower:]' )
- case $MODE_LC in
- 0|1|2|3)
- ;;
- su*)
- MODE=0
- ;;
- c*)
- MODE=1
- ;;
- a*)
- MODE=2
- ;;
- sp*)
- MODE=3
- ;;
- *)
- echo "ERROR: Invalid game mode: $MODE"
- exit 1
- ;;
- esac
- setProp "gamemode" "$MODE"
- fi
- fi
- if [ -n "$OPS" -a ! -e ops.txt.converted ]; then
- echo "Setting ops"
- echo $OPS | awk -v RS=, '{print}' >> ops.txt
- fi
- # There whitelist code https://github.com/itzg/dockerfiles/blob/master/minecraft-server/start-minecraft.sh#L540
- # but it doesn't work. See https://www.beastnode.com/portal/knowledgebase/6/Setting-Up-a-Whitelist-or-Make-Your-Server-Private.html
- # on using /whitelist add username (to actually setup and use the whitelist.json file) :P
- if [ ! -e banned-players.json ]; then
- echo '[]' > banned-players.json
- fi
- if [ ! -e banned-ips.json ]; then
- echo '[]' > banned-ips.json
- fi
- EXTRA_ARGS=""
- # Optional disable console
- if [[ ${CONSOLE} = false || ${CONSOLE} = FALSE ]]; then
- EXTRA_ARGS+="--noconsole"
- fi
- # Optional disable GUI for headless servers
- if [[ ${GUI} = false || ${GUI} = FALSE ]]; then
- EXTRA_ARGS="${EXTRA_ARGS} nogui"
- fi
- # put these prior JVM_OPTS at the end to give any memory settings there higher precedence
- echo "Setting initial memory to ${INIT_MEMORY:-${MEMORY}} and max to ${MAX_MEMORY:-${MEMORY}}"
- JVM_OPTS="-Xms${INIT_MEMORY:-${MEMORY}} -Xmx${MAX_MEMORY:-${MEMORY}} ${JVM_OPTS}"
- exec java $JVM_XX_OPTS $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS
|