#! /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