#!/usr/bin/env bash # exit immediately if a command exits with a non-zero status set -e # get base dir regardless of execution location SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" SOURCE="$(readlink "$SOURCE")" [[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located done SOURCE=$([[ "$SOURCE" = /* ]] && echo "$SOURCE" || echo "$PWD/${SOURCE#./}") basedir=$(dirname "$SOURCE") . "$basedir"/scripts/init.sh paperstash() { STASHED=$(git stash) } paperunstash() { if [[ "$STASHED" != "No local changes to save" ]] ; then git stash pop fi } case "$1" in "rb" | "rbp" | "rebuild") ( set -e cd "$basedir" scripts/rebuildpatches.sh "$basedir" ) ;; "p" | "patch" | "apply") ( set -e cd "$basedir" if [ "$2" != "fast" ]; then scripts/upstream.sh fi scripts/apply.sh "$basedir" ) ;; "b" | "bu" | "build") ( basedir mvn -N install cd ${FORK_NAME}-API && mvn -e clean install cd ../Paper/Paper-MojangAPI && mvn -e clean install cd ../../${FORK_NAME}-Server && mvn -e clean install ) ;; "jar" | "paperclip") ( basedir cd "$basedir" if [ "$2" != "fast" ]; then scripts/upstream.sh fi ./scripts/apply.sh "$basedir" cd "$basedir" mvn -N install cd ${FORK_NAME}-Common && mvn -e clean install cd ../${FORK_NAME}-API && mvn -e clean install cd ../Paper/Paper-MojangAPI && mvn -e clean install cd ../../${FORK_NAME}-Server && mvn -e clean install cd "$basedir" ./scripts/paperclip.sh ) ;; "i" | "install") ( basedir mvn -N install cd ${FORK_NAME}-Common mvn clean install cd ../${FORK_NAME}-API mvn clean install cd ../Paper/Paper-MojangAPI mvn clean install cd ../../${FORK_NAME}-Server mvn clean install ) ;; "ghjar") ( # github install because workflows are dumb basedir cd "$basedir" if [ "$2" != "fast" ]; then scripts/upstream.sh fi ./scripts/apply.sh "$basedir" cd "$basedir" mvn -N install cd ${FORK_NAME}-Common && mvn -e clean install -Dmaven.javadoc.skip=true cd ../${FORK_NAME}-API && mvn -e clean install -Dmaven.javadoc.skip=true cd ../Paper/Paper-MojangAPI && mvn -e clean install cd ../../${FORK_NAME}-Server && mvn -e clean install cd "$basedir" ./scripts/paperclip.sh ) ;; "d" | "deploy") ( basedir mvn -N deploy cd ${FORK_NAME}-Common mvn clean deploy cd ../${FORK_NAME}-API mvn clean deploy cd ../${FORK_NAME}-Server mvn clean deploy ) ;; "up" | "upstream") ( cd "$basedir" scripts/upstream.sh "$2" ) ;; "r" | "root") cd "$basedir" ;; "a" | "api") cd "$basedir/Parchment-API" ;; "s" | "server") cd "$basedir/Parchment-Server" ;; "setup") if [[ -f ~/.bashrc ]] ; then NAME="parchment" if [[ ! -z "${2+x}" ]] ; then NAME="$2" fi (grep "alias $NAME=" ~/.bashrc > /dev/null) && (sed -i "s|alias $NAME=.*|alias $NAME='. $SOURCE'|g" ~/.bashrc) || (echo "alias $NAME='. $SOURCE'" >> ~/.bashrc) alias "$NAME=. $SOURCE" echo "You can now just type '$NAME' at any time to access the paper tool." fi ;; *) echo "Parchment build tool command. This provides a variety of commands to build and manage the PaperMC build" echo "environment. For all of the functionality of this command to be available, you must first run the" echo "'setup' command. View below for details. For essential building and patching, you do not need to do the setup." echo "" echo " Normal commands:" echo " * rb, rebuild | Rebuild patches, can be called from anywhere." echo " * p, patch | Apply all patches to top of Paper without building it. Can be run from anywhere." echo " * up, upstream | Build Paper upstream, pass arg up to update paper. Can be run from anywhere." echo " * b, build | Build API and Server but no deploy. Can be ran anywhere." echo " * j, jar | Apply all patches and build the project, parchment-paperclip.jar will be output. Can be run from anywhere." echo " * i, install | Build and install API jar and build Server. Can be ran anywhere." echo " * d, deploy | Deploy the API, Server, and Common." echo "" echo " These commands require the setup command before use:" echo " * r, root | Change directory to the root of the project." echo " * a. api | Move to the Paper-API directory." echo " * s, server | Move to the Paper-Server directory." echo " * e, edit | Use to edit a specific patch, give it the argument \"server\" or \"api\"" echo " | respectively to edit the correct project. Use the argument \"continue\" after" echo " | the changes have been made to finish and rebuild patches. Can be called from anywhere." echo "" echo " * setup | Add an alias to .bashrc to allow full functionality of this script. Run as:" echo " | . ./parchment setup" echo " | After you run this command you'll be able to just run 'parchment' from anywhere." echo " | The default name for the resulting alias is 'parchment', you can give an argument to override" echo " | this default, such as:" echo " | . ./parchment setup example" echo " | Which will allow you to run 'example' instead." ;; esac unset -f paperstash unset -f paperunstash