docker-minecraft/start-server.sh

63 lines
1.6 KiB
Bash
Executable File

#! /bin/bash
#
# start-server.sh
# Copyright (C) 2021 Vintage Salt <rehashedsalt@cock.li>
#
# Distributed under terms of the MIT license.
#
set -e
# Download and extract a pack zip, if one is provided
if [ -n "$FORGE_PACK_ZIP" ]; then
echo "Downloading pack: $FORGE_PACK_ZIP"
tmpdir="$(mktemp -d)"
pushd "$tmpdir" > /dev/null 2>&1
curl -L "$FORGE_PACK_ZIP" -o pack.zip
unzip -q pack.zip
ls -alh
directory="$(find . -type d -iname "mods" -execdir pwd \; | sort -n | head -n 1)"
if [ -z "$directory" ]; then
echo "Unable to find mods directory"
else
echo "Found modpack directory: $directory"
fi
echo "Syncing content to /minecraft"
rsync --no-perms --no-owner --no-group --ignore-existing "$directory"/ /minecraft/
popd > /dev/null 2>&1
fi
# Then also download and extract a config repo, if one exists
if [ -n "$CONFIG_REPO" ]; then
echo "Downloading config repo: $CONFIG_REPO"
tmpdir="$(mktemp -d)"
pushd "$tmpdir" > /dev/null 2>&1
git clone "$CONFIG_REPO" .
rm -rf .git
rsync -av --delete ./ /minecraft/
popd > /dev/null 2>&1
fi
# Entrypoint will be server.jar
args="-jar server.jar nogui"
# Memory configuration
[ -n "$JRE_XMX" ] && args="-Xmx$JRE_XMX $args"
[ -n "$JRE_XMS" ] && args="-Xms$JRE_XMS $args"
[ -n "$ARGS" ] && args="$ARGS $args"
# Debugging info
java -version
echo "Invoking java with args: $args"
echo
echo "To see the server console, execute this command in the container:"
echo " screen -r minecraft"
# Start 'er up
cleanup() {
screen -p 0 -S minecraft -X stuff save-all^M
screen -p 0 -S minecraft -X stuff stop^M
}
trap cleanup EXIT
screen -DmS minecraft java $args