#!/bin/bash
# This script assumes that you have prepared various versions of
# Minecraft bin folders in your $MC_HOME like this:
# ${MC_HOME}/bin-version (example: ${MC_HOME}/bin-1.2.5)
# 
# The script tries to preserve the various versions of the bin folder
# by copying the selected bin folder to a "working folder", to prevent
# accidental updates on launch.
#
# Use at your own risk, changing minecraft versions around may result in
# unexpected and undesirable behaviour. You may lose your saves.
# This script does not handle backups of the world data, I suggest using
# deja-dup or similar backup software. It's good for you.

# Written by Einar Jørgen Haraldseid <einar@haraldseid.net> 
# inspired by a similar idea by Lars Erik Pedersen

# Released to the public under the WTFPL: http://sam.zoy.org/wtfpl/COPYING

# CONFIG STUFF - change these to suit your system
# Minecraft home folder, where the binaries and saves and stuff are stored:
MC_HOME="${HOME}/.minecraft"
# Location and filename for the Minecraft launcher jar:
MC_LAUNCHER="${HOME}/bin/minecraft.jar"
# Command line to run to start Minecraft:
MC_COMMAND="java -Xmx2048M -Xms1024M -cp ${MC_LAUNCHER} net.minecraft.LauncherFrame"

# This might be needed to fix 64bit java on Linux (path to your 64bit java libs)
# Uncomment this if not suitable.
export LD_LIBRARY_PATH="/usr/java/latest/lib/amd64/"


# Here comes the code

UPDATEMC=0

if [ ${#} -lt 1 ]; then
	echo "Usage: 'minecraft <version>' or 'minecraft --add <version>'"
	exit 1
fi

if [ "${1}" == "--add" ]; then
	if [ "${#}" -ne 2 ]; then
		echo "You must supply what version you are adding: 'minecraft --add <version>'"
		exit 1
	else
		MC_NEW_FOLDER="${MC_HOME}/bin-${2}"
		read -p "Will save new bin-folder called bin-${2}, press update when prompted."
		UPDATEMC=1
	fi
fi

if [ -z ${MC_HOME} ]; then
	echo "Minecraft home folder not set! Baaaad idea!"
	exit 1
fi

if [ ! -d ${MC_HOME} ]; then
	echo "Minecraft home folder (${MC_HOME}) not found!"
	exit 1
fi

if [ ${UPDATEMC} -ne 1 ]; then
	MC_VERSION_FOLDER="${MC_HOME}/bin-${1}"
else
	MC_VERSION_FOLDER=$(ls -d ${MC_HOME}/bin-* | tail -n 1)
fi

MC_WORKING_FOLDER="${MC_HOME}/bin"

if [ ! -d "${MC_VERSION_FOLDER}" ]; then
	echo "Could not find that version folder (${MC_VERSION_FOLDER})"
	echo -e "\nAvailable Minecraft versions are:"
	echo "---------------------------------"
	ls -d ${MC_HOME}/bin-* | cut -d "-" -f 2
	exit 1
fi

if [ -d "${MC_WORKING_FOLDER}" ]; then
	rm -rf ${MC_WORKING_FOLDER}
elif [ ! -d "${MC_WORKING_FOLDER}" ]; then
	echo "Minecraft bin folder (${MC_WORKING_FOLDER}) is not a directory, bailing out."
	exit 1
fi

if [ ! -e "${MC_WORKING_FOLDER}" ]; then
	cp -r ${MC_VERSION_FOLDER} ${MC_WORKING_FOLDER}
        ${MC_COMMAND}
	if [ ${UPDATEMC} == 1 ]; then
		cp -r ${MC_WORKING_FOLDER} ${MC_NEW_FOLDER}
	fi
fi
