diff --git a/.gitignore b/.gitignore
index b728ec1..5050018 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ lib/
target/
*.iml
.idea/
+bukkit-testserver/
diff --git a/pom.xml b/pom.xml
index f317f7f..e93a545 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,23 @@
+
+ exec-maven-plugin
+ org.codehaus.mojo
+ 1.2.1
+
+
+ Run Test Bukkit Server
+ package
+
+ exec
+
+
+ ${basedir}/scripts/test-deployment.sh
+
+
+
+
@@ -40,7 +57,14 @@
org.bukkit
bukkit
- RELEASE
+ 1.4.7-R1.0
+ jar
+ compile
+
+
+ org.bukkit
+ craftbukkit
+ 1.4.7-R1.0
jar
compile
diff --git a/scripts/minecraft.sh b/scripts/minecraft.sh
new file mode 100755
index 0000000..756ad10
--- /dev/null
+++ b/scripts/minecraft.sh
@@ -0,0 +1,160 @@
+#!/bin/bash
+
+SCRIPT_DIR=$(readlink -f $(dirname "$0"))
+SERVICE='craftbukkit*.jar'
+#USERNAME="minecraft"
+CPU_COUNT=2
+BUKKIT="$SCRIPT_DIR/../target/lib/$SERVICE"
+INVOCATION="java -Xmx1000M -Xms300M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $BUKKIT nogui"
+MCPATH="$SCRIPT_DIR/../bukkit-testserver"
+
+if [ ! -d "$MCPATH" ]; then
+ mkdir -p "$MCPATH"
+fi
+
+ME=$(whoami)
+as_user() {
+ #if [ $ME == $USERNAME ] ; then
+ bash -c "$1"
+ #else
+ #su - $USERNAME -c "$1"
+ #fi
+}
+
+mc_start() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "Tried to start but $SERVICE was already running!"
+ else
+ echo "$SERVICE was not running... starting."
+ cd "$MCPATH"
+ as_user "cd "$MCPATH" && screen -dmS minecraft $INVOCATION"
+ sleep 7
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is now running."
+ else
+ echo "Could not start $SERVICE."
+ fi
+ fi
+}
+
+mc_stop() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is running... stopping."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ sleep 2
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
+ sleep 6
+ else
+ echo "$SERVICE was not running."
+ fi
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE could not be shut down... still running."
+ else
+ echo "$SERVICE is shut down."
+ fi
+}
+
+mc_save() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is running... saving."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ else
+ echo "$SERVICE was not running."
+ fi
+}
+
+mc_reload() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is running... reloading."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"reload\"\015'"
+ else
+ echo "$SERVICE was not running."
+ fi
+}
+
+mc_reload_or_start() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE was already running! Doing a reload now!"
+ mc_reload
+ else
+ echo "$SERVICE was not running... starting."
+ cd "$MCPATH"
+ as_user "cd \"$MCPATH\" && screen -dmS minecraft $INVOCATION"
+ sleep 7
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is now running."
+ else
+ echo "Could not start $SERVICE."
+ fi
+ fi
+}
+
+mc_ddidderr_admin() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is running... making ddidder to admin and reloading permissions."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"pex user ddidderr group set admin\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"pex reload\"\015'"
+ else
+ echo "$SERVICE was not running."
+ fi
+}
+
+case "$1" in
+ start)
+ echo "Starting Minecraft..."
+ mc_start
+ echo "DONE"
+ ;;
+ stop)
+ echo "Stopping Minecraft..."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN!\"\015'"
+ mc_stop
+ echo "DONE"
+ ;;
+ restart)
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER REBOOT IN 10 SECONDS.\"\015'"
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ reload)
+ mc_reload
+ ;;
+ reload_or_start)
+ echo "Starting or reloading Minecraft..."
+ mc_reload_or_start
+ echo "DONE"
+ ;;
+ ddidderr_admin)
+ mc_ddidderr_admin
+ ;;
+ connected)
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"who\"\015'"
+ sleep 2s
+ tac "$MCPATH"/server.log | grep -m 1 "Connected"
+ ;;
+ status)
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null
+ then
+ echo "$SERVICE is running."
+ else
+ echo "$SERVICE is not running."
+ fi
+ ;;
+ save)
+ mc_save
+ ;;
+ *)
+ echo "Usage: /etc/init.d/minecraft {start|stop|restart|connected|status}"
+ exit 1
+ ;;
+esac
diff --git a/scripts/test-deployment.sh b/scripts/test-deployment.sh
new file mode 100755
index 0000000..696b903
--- /dev/null
+++ b/scripts/test-deployment.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+SCRIPT_DIR=$(readlink -f $(dirname "$0"))
+
+BUKKIT_DIR="$SCRIPT_DIR/../bukkit-testserver"
+PLUGIN_DIR="$SCRIPT_DIR/../bukkit-testserver/plugins"
+
+# TODO: This is a bad solution! Maven should write necessary information into an extra file.
+ARTIFACT_ID="$(grep -C3 'de.craftinc' "$SCRIPT_DIR/../pom.xml" | grep '' | sed 's/\s*//g' | sed 's/<\/artifactId>\s*//g')"
+
+# TODO: This is a bad solution! Maven should write necessary information into an extra file.
+VERSION="$(grep -C3 'de.craftinc' "$SCRIPT_DIR/../pom.xml" | grep '' | sed 's/\s*//g' | sed 's/<\/version>\s*//g')"
+
+
+mkdir -p "$PLUGIN_DIR"
+
+cp "$SCRIPT_DIR/../target/$ARTIFACT_ID-$VERSION".jar "$PLUGIN_DIR/$ARTIFACT_ID".jar
+
+"$SCRIPT_DIR/minecraft.sh" reload_or_start