Merge pull request #177 from DemonWav/cleanup

Cleanup and restructure the project
This commit is contained in:
Zach 2016-04-03 04:18:25 -05:00
commit bbfe383410
22 changed files with 332 additions and 145 deletions

17
.gitignore vendored
View File

@ -22,7 +22,16 @@ build/
bin/
dist/
manifest.mf
work/
work/1.*
work/BuildData
work/Bukkit
work/CraftBukkit
work/Paperclip
work/Spigot
work/Spigot-Server
work/Spigot-API
work/*.jar
# Mac filesystem dust
.DS_Store/
@ -37,15 +46,11 @@ work/
*~
# other stuff
Spigot-API
Spigot-Server
Paper-Server
Paper-API
PaperSpigot-Server
PaperSpigot-API
Bukkit
CraftBukkit
Paperclip
Paperclip.jar
paperclip.jar
paperclip-*.jar

22
.gitmodules vendored
View File

@ -1,15 +1,15 @@
[submodule "Bukkit"]
path = Bukkit
[submodule "work/Bukkit"]
path = work/Bukkit
url = https://hub.spigotmc.org/stash/scm/spigot/bukkit.git
[submodule "CraftBukkit"]
path = CraftBukkit
[submodule "work/CraftBukkit"]
path = work/CraftBukkit
url = https://hub.spigotmc.org/stash/scm/spigot/craftbukkit.git
[submodule "BuildData"]
path = BuildData
[submodule "work/BuildData"]
path = work/BuildData
url = https://hub.spigotmc.org/stash/scm/spigot/builddata.git
[submodule "Paperclip"]
path = Paperclip
url = https://github.com/PaperMC/Paperclip.git
[submodule "Spigot"]
path = Spigot
[submodule "work/Spigot"]
path = work/Spigot
url = https://hub.spigotmc.org/stash/scm/spigot/spigot.git
[submodule "work/Paperclip"]
path = work/Paperclip
url = https://github.com/PaperMC/Paperclip.git

@ -1 +0,0 @@
Subproject commit 6bff72410effad0b2b0b0d8471a477f42bd484ff

View File

@ -1,9 +0,0 @@
#!/bin/bash
(git submodule update --init && ./remap.sh && ./decompile.sh && ./init.sh && ./applyPatches.sh) || (
echo "Failed to build Paper"
exit 1
) || exit 1
if [ "$1" == "--jar" ]; then
(mvn clean install && ./paperclip.sh) || exit 1
fi

40
init.sh
View File

@ -1,40 +0,0 @@
#!/bin/bash
PS1="$"
basedir=`pwd`
workdir="$basedir/work"
minecraftversion=$(cat BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
decompiledir="$workdir/$minecraftversion"
nms="$decompiledir/net/minecraft/server"
cb=src/main/java/net/minecraft/server
paperjar="Paper-Server/target/paper-${minecraftversion}.jar"
vanillajar="work/${minecraftversion}/${minecraftversion}.jar"
echo -e "mcver=${minecraftversion}\npaperjar=../${paperjar}\nvanillajar=../${vanillajar}\n" > paperclip.properties
patch=$(which patch 2>/dev/null)
if [ "x$patch" == "x" ]; then
patch=$basedir/hctap.exe
fi
echo "Applying CraftBukkit patches to NMS..."
cd "$basedir/CraftBukkit"
git checkout -B patched HEAD >/dev/null 2>&1
rm -rf $cb
mkdir -p $cb
for file in $(ls nms-patches)
do
patchFile="nms-patches/$file"
file="$(echo $file | cut -d. -f1).java"
echo "Patching $file < $patchFile"
sed -i 's/\r//' "$nms/$file" > /dev/null
cp "$nms/$file" "$cb/$file"
"$patch" -s -d src/main/java/ "net/minecraft/server/$file" < "$patchFile"
done
git add src >/dev/null 2>&1 || exit 1
git commit -m "CraftBukkit $ $(date)" >/dev/null 2>&1 || exit 1
git checkout -f HEAD^ >/dev/null 2>&1 || exit 1

146
paper Executable file
View File

@ -0,0 +1,146 @@
#!/usr/bin/env bash
# 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")
paperstash() {
STASHED=$(git stash)
}
paperunstash() {
if [[ "$STASHED" != "No local changes to save" ]] ; then
git stash pop
fi
}
case "$1" in
"rbp" | "rebuild")
(
set -e
cd "$basedir"
scripts/rebuildPatches.sh "$basedir"
)
;;
"p" | "patch")
(
set -e
cd "$basedir"
scripts/build.sh "$basedir"
)
;;
"j" | "jar")
(
set -e
cd "$basedir"
scripts/build.sh "$basedir" "--jar"
)
;;
"make")
(
if [[ "$2" = "bacon" ]] ; then
set -e
cd "$basedir"
scripts/build.sh "$basedir" "--jar"
fi
)
;;
"r" | "root")
cd "$basedir"
;;
"a" | "api")
cd "$basedir/Paper-API"
;;
"s" | "server")
cd "$basedir"
;;
"e" | "edit")
case "$2" in
"s" | "server")
export LAST_EDIT="$basedir/Paper-Server"
cd "$basedir/Paper-Server"
(
set -e
paperstash
git rebase -i upstream/upstream
paperunstash
)
;;
"a" | "api")
export LAST_EDIT="$basedir/Paper-API"
cd "$basedir/Paper-API"
(
set -e
paperstash
git rebase -i upstream/upstream
paperunstash
)
;;
"c" | "continue")
cd "$LAST_EDIT"
unset LAST_EDIT
(
set -e
git add .
git commit --amend
git rebase --continue
cd "$basedir"
scripts/rebuildPatches.sh "$basedir"
)
;;
*)
echo "You must edit either the api or server."
;;
esac
;;
"setup")
if [[ -f ~/.bashrc ]] ; then
NAME="paper"
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 "PaperMC 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 " * rbp, rebuild | Rebuild patches, can be called from anywhere."
echo " * p, patch | Apply all patches to the project without building it. Can be run from anywhere."
echo " * j, jar | Apply all patches and build the project, paperclip.jar will be output. Can be run from anywhere."
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 " | . ./paper setup"
echo " | After you run this command you'll be able to just run 'paper' from anywhere."
echo " | The default name for the resulting alias is 'paper', you can give an argument to override"
echo " | this default, such as:"
echo " | . ./paper setup example"
echo " | Which will allow you to run 'example' instead."
;;
esac
unset -f paperstash
unset -f paperunstash

View File

@ -1,15 +0,0 @@
#!/usr/bin/env bash
basedir=`pwd`
workdir=$basedir/work
mcver=$(cat BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
cd ./Paperclip
mvn clean package
cd ..
cp ./Paperclip/target/paperclip-${mcver}.jar ./paperclip.jar
echo ""
echo ""
echo ""
echo "Build success!"
echo "Copied final jar to $(pwd)/paperclip.jar"

View File

@ -1,12 +1,15 @@
#!/bin/bash
#!/usr/bin/env bash
(
set -e
PS1="$"
basedir=`pwd`
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
echo "Rebuilding Forked projects.... "
function applyPatch {
what=$1
what_name=$(basename $what)
what_name=$(basename "$what")
target=$2
branch=$3
@ -21,7 +24,7 @@ function applyPatch {
cd "$basedir/$target"
echo "Resetting $target to $what_name..."
git remote rm upstream > /dev/null 2>&1
git remote add upstream $basedir/$what >/dev/null 2>&1
git remote add upstream "$basedir/$what" >/dev/null 2>&1
git checkout master 2>/dev/null || git checkout -b master
git fetch upstream >/dev/null 2>&1
git reset --hard upstream/upstream
@ -39,8 +42,8 @@ function applyPatch {
}
# Move into spigot dir
pushd Spigot
basedir=$basedir/Spigot
cd "$workdir/Spigot"
basedir=$(pwd)
# Apply Spigot
(
applyPatch ../Bukkit Spigot-API HEAD &&
@ -50,19 +53,20 @@ basedir=$basedir/Spigot
exit 1
) || exit 1
# Move out of Spigot
popd
basedir=$(dirname "$basedir")
basedir="$1"
cd "$basedir"
echo "Importing MC Dev"
./importmcdev.sh
./scripts/importmcdev.sh "$basedir"
# Apply paper
cd "$basedir"
(
applyPatch Spigot/Spigot-API Paper-API HEAD &&
applyPatch Spigot/Spigot-Server Paper-Server HEAD
applyPatch "work/Spigot/Spigot-API" Paper-API HEAD &&
applyPatch "work/Spigot/Spigot-Server" Paper-Server HEAD
) || (
echo "Failed to apply Paper Patches"
exit 1
) || exit 1
)

14
scripts/build.sh Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env bash
(
set -e
basedir="$(cd "$1" && pwd -P)"
(git submodule update --init && ./scripts/remap.sh "$basedir" && ./scripts/decompile.sh "$basedir" && ./scripts/init.sh "$basedir" && ./scripts/applyPatches.sh "$basedir") || (
echo "Failed to build Paper"
exit 1
) || exit 1
if [ "$2" == "--jar" ]; then
mvn clean install && ./scripts/paperclip.sh "$basedir"
fi
)

View File

@ -1,11 +1,13 @@
#!/bin/bash
#!/usr/bin/env bash
(
set -e
PS1="$"
basedir=`pwd`
workdir=$basedir/work
minecraftversion=$(cat BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
decompiledir=$workdir/$minecraftversion
classdir=$decompiledir/classes
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
minecraftversion=$(cat "$workdir/BuildData/info.json" | grep minecraftVersion | cut -d '"' -f 4)
decompiledir="$workdir/$minecraftversion"
classdir="$decompiledir/classes"
echo "Extracting NMS classes..."
if [ ! -d "$classdir" ]; then
@ -22,9 +24,10 @@ fi
echo "Decompiling classes..."
if [ ! -d "$decompiledir/net/minecraft/server" ]; then
cd "$basedir"
java -jar BuildData/bin/fernflower.jar -dgs=1 -hdc=0 -asc=1 -udv=0 "$classdir" "$decompiledir"
java -jar "$workdir/BuildData/bin/fernflower.jar" -dgs=1 -hdc=0 -asc=1 -udv=0 "$classdir" "$decompiledir"
if [ "$?" != "0" ]; then
echo "Failed to decompile classes."
exit 1
fi
fi
)

View File

@ -1,19 +1,21 @@
#!/usr/bin/env bash
(
set -e
nms="net/minecraft/server"
export MODLOG=""
PS1="$"
basedir=`pwd`
basedir="$(cd "$1" && pwd -P)"
workdir=$basedir/work
minecraftversion=$(cat BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
decompiledir=$workdir/$minecraftversion
workdir="$basedir/work"
minecraftversion=$(cat "$workdir/BuildData/info.json" | grep minecraftVersion | cut -d '"' -f 4)
decompiledir="$workdir/$minecraftversion"
export importedmcdev=""
function import {
export importedmcdev="$importedmcdev $1"
file="${1}.java"
target="$basedir/Spigot/Spigot-Server/src/main/java/$nms/$file"
target="$workdir/Spigot/Spigot-Server/src/main/java/$nms/$file"
base="$decompiledir/$nms/$file"
if [[ ! -f "$target" ]]; then
@ -24,7 +26,7 @@ function import {
}
(
cd Spigot/Spigot-Server/
cd "$workdir/Spigot/Spigot-Server/"
lastlog=$(git log -1 --oneline)
if [[ "$lastlog" = *"mc-dev Imports"* ]]; then
git reset --hard HEAD^
@ -59,8 +61,7 @@ import PathfinderGoalFloat
import PersistentVillage
import TileEntityEnderChest
(
cd Spigot/Spigot-Server/
git add src -A
echo -e "mc-dev Imports\n\n$MODLOG" | git commit src -F -
cd "$workdir/Spigot/Spigot-Server/"
git add src -A
echo -e "mc-dev Imports\n\n$MODLOG" | git commit src -F -
)

40
scripts/init.sh Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env bash
(
set -e
PS1="$"
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
minecraftversion=$(cat "$workdir/BuildData/info.json" | grep minecraftVersion | cut -d '"' -f 4)
decompiledir="$workdir/$minecraftversion"
nms="$decompiledir/net/minecraft/server"
cb="src/main/java/net/minecraft/server"
patch=$(which patch 2>/dev/null)
if [ "x$patch" == "x" ]; then
patch="$basedir/hctap.exe"
fi
echo "Applying CraftBukkit patches to NMS..."
cd "$workdir/CraftBukkit"
git checkout -B patched HEAD >/dev/null 2>&1
rm -rf "$cb"
mkdir -p "$cb"
for file in $(ls nms-patches)
do
patchFile="nms-patches/$file"
file="$(echo "$file" | cut -d. -f1).java"
echo "Patching $file < $patchFile"
set +e
sed -i 's/\r//' "$nms/$file" > /dev/null
set -e
cp "$nms/$file" "$cb/$file"
"$patch" -s -d src/main/java/ "net/minecraft/server/$file" < "$patchFile"
done
git add src >/dev/null 2>&1
git commit -m "CraftBukkit $ $(date)" >/dev/null 2>&1
git checkout -f HEAD^ >/dev/null 2>&1
)

View File

@ -1,14 +1,16 @@
#!/bin/bash
#!/usr/bin/env bash
(
set -e
PS1="$"
workdir=work
minecraftversion=$(cat BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
decompiledir=$workdir/$minecraftversion
nms=$decompiledir/net/minecraft/server
cb=src/main/java/net/minecraft/server
papernms=Paper-Server/src/main/java/net/minecraft/server
mcdevsrc=${decompiledir}/src/net/minecraft/server
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
minecraftversion=$(cat "$basedir/BuildData/info.json" | grep minecraftVersion | cut -d '"' -f 4)
decompiledir="$workdir/$minecraftversion"
nms="$decompiledir/net/minecraft/server"
papernms="Paper-Server/src/main/java/net/minecraft/server"
mcdevsrc="${decompiledir}/src/net/minecraft/server"
rm -rf "${mcdevsrc}"
mkdir -p "${mcdevsrc}"
cp ${nms}/*.java "${mcdevsrc}/"
@ -23,3 +25,4 @@ do
fi
done
echo "Built $decompiledir/src to be included in your project for src access";
)

22
scripts/paperclip.sh Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
(
set -e
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
mcver=$(cat "$workdir/BuildData/info.json" | grep minecraftVersion | cut -d '"' -f 4)
paperjar="../../Paper-Server/target/paper-$mcver.jar"
vanillajar="../$mcver/$mcver.jar"
(
cd "$workdir/Paperclip"
mvn clean package "-Dmcver=$mcver" "-Dpaperjar=$paperjar" "-Dvanillajar=$vanillajar"
)
cp "$workdir/Paperclip/target/paperclip-${mcver}.jar" "$basedir/paperclip.jar"
echo ""
echo ""
echo ""
echo "Build success!"
echo "Copied final jar to $(cd "$basedir" && pwd -P)/paperclip.jar"
)

View File

@ -1,7 +1,10 @@
#!/bin/bash
#!/usr/bin/env bash
(
set -e
PS1="$"
basedir=`pwd`
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
echo "Rebuilding patch files from current fork state..."
git config core.safecrlf false
@ -9,24 +12,26 @@ function cleanupPatches {
cd "$1"
for patch in *.patch; do
echo "$patch"
gitver=$(tail -n 2 $patch | grep -ve "^$" | tail -n 1)
diffs=$(git diff --staged $patch | grep -E "^(\+|\-)" | grep -Ev "(From [a-z0-9]{32,}|\-\-\- a|\+\+\+ b|.index)")
gitver=$(tail -n 2 "$patch" | grep -ve "^$" | tail -n 1)
diffs=$(git diff --staged "$patch" | grep -E "^(\+|\-)" | grep -Ev "(From [a-z0-9]{32,}|\-\-\- a|\+\+\+ b|.index)")
testver=$(echo "$diffs" | tail -n 2 | grep -ve "^$" | tail -n 1 | grep "$gitver")
if [ "x$testver" != "x" ]; then
set +e
diffs=$(echo "$diffs" | sed 'N;$!P;$!D;$d')
set -e
fi
if [ "x$diffs" == "x" ] ; then
git reset HEAD $patch >/dev/null
git checkout -- $patch >/dev/null
git reset HEAD "$patch" >/dev/null
git checkout -- "$patch" >/dev/null
fi
done
}
function savePatches {
what=$1
what_name=$(basename $what)
what_name=$(basename "$what")
target=$2
echo "Formatting patches for $what..."
@ -42,5 +47,6 @@ function savePatches {
echo " Patches saved for $what to $what_name-Patches/"
}
savePatches Spigot/Spigot-API Paper-API
savePatches Spigot/Spigot-Server Paper-Server
savePatches "$workdir/Spigot/Spigot-API" "Paper-API"
savePatches "$workdir/Spigot/Spigot-Server" "Paper-Server"
)

View File

@ -1,15 +1,17 @@
#!/bin/bash
#!/usr/bin/env bash
(
set -e
PS1="$"
basedir=`pwd`
workdir=$basedir/work
minecraftversion=$(cat BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
minecrafthash=$(cat BuildData/info.json | grep minecraftHash | cut -d '"' -f 4)
accesstransforms=BuildData/mappings/$(cat BuildData/info.json | grep accessTransforms | cut -d '"' -f 4)
classmappings=BuildData/mappings/$(cat BuildData/info.json | grep classMappings | cut -d '"' -f 4)
membermappings=BuildData/mappings/$(cat BuildData/info.json | grep memberMappings | cut -d '"' -f 4)
packagemappings=BuildData/mappings/$(cat BuildData/info.json | grep packageMappings | cut -d '"' -f 4)
jarpath=$workdir/$minecraftversion/$minecraftversion
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
minecraftversion=$(cat ${workdir}/BuildData/info.json | grep minecraftVersion | cut -d '"' -f 4)
minecrafthash=$(cat ${workdir}/BuildData/info.json | grep minecraftHash | cut -d '"' -f 4)
accesstransforms="$workdir/BuildData/mappings/"$(cat ${workdir}/BuildData/info.json | grep accessTransforms | cut -d '"' -f 4)
classmappings="$workdir/BuildData/mappings/"$(cat ${workdir}/BuildData/info.json | grep classMappings | cut -d '"' -f 4)
membermappings="$workdir/BuildData/mappings/"$(cat ${workdir}/BuildData/info.json | grep memberMappings | cut -d '"' -f 4)
packagemappings="$workdir/BuildData/mappings/"$(cat ${workdir}/BuildData/info.json | grep packageMappings | cut -d '"' -f 4)
jarpath="$workdir/$minecraftversion/$minecraftversion"
echo "Downloading unmapped vanilla jar..."
if [ ! -f "$jarpath.jar" ]; then
@ -36,7 +38,7 @@ fi
echo "Applying class mappings..."
if [ ! -f "$jarpath-cl.jar" ]; then
java -jar BuildData/bin/SpecialSource-2.jar map -i "$jarpath.jar" -m "$classmappings" -o "$jarpath-cl.jar" 1>/dev/null
java -jar "$workdir/BuildData/bin/SpecialSource-2.jar" map -i "$jarpath.jar" -m "$classmappings" -o "$jarpath-cl.jar" 1>/dev/null
if [ "$?" != "0" ]; then
echo "Failed to apply class mappings."
exit 1
@ -45,7 +47,7 @@ fi
echo "Applying member mappings..."
if [ ! -f "$jarpath-m.jar" ]; then
java -jar BuildData/bin/SpecialSource-2.jar map -i "$jarpath-cl.jar" -m "$membermappings" -o "$jarpath-m.jar" 1>/dev/null
java -jar "$workdir/BuildData/bin/SpecialSource-2.jar" map -i "$jarpath-cl.jar" -m "$membermappings" -o "$jarpath-m.jar" 1>/dev/null
if [ "$?" != "0" ]; then
echo "Failed to apply member mappings."
exit 1
@ -54,7 +56,7 @@ fi
echo "Creating remapped jar..."
if [ ! -f "$jarpath-mapped.jar" ]; then
java -jar BuildData/bin/SpecialSource.jar --kill-lvt -i "$jarpath-m.jar" --access-transformer "$accesstransforms" -m "$packagemappings" -o "$jarpath-mapped.jar" 1>/dev/null
java -jar "$workdir/BuildData/bin/SpecialSource.jar" --kill-lvt -i "$jarpath-m.jar" --access-transformer "$accesstransforms" -m "$packagemappings" -o "$jarpath-mapped.jar" 1>/dev/null
if [ "$?" != "0" ]; then
echo "Failed to create remapped jar."
exit 1
@ -62,9 +64,10 @@ if [ ! -f "$jarpath-mapped.jar" ]; then
fi
echo "Installing remapped jar..."
cd CraftBukkit # Need to be in a directory with a valid POM at the time of install.
cd "$workdir/CraftBukkit" # Need to be in a directory with a valid POM at the time of install.
mvn install:install-file -q -Dfile="$jarpath-mapped.jar" -Dpackaging=jar -DgroupId=org.spigotmc -DartifactId=minecraft-server -Dversion="$minecraftversion-SNAPSHOT"
if [ "$?" != "0" ]; then
echo "Failed to install remapped jar."
exit 1
fi
)

View File

@ -1,10 +1,13 @@
#!/bin/bash
#!/usr/bin/env bash
(
set -e
PS1="$"
basedir=`pwd`
basedir="$(cd "$1" && pwd -P)"
workdir="$basedir/work"
function update {
cd "$basedir/$1"
cd "$workdir/$1"
git fetch && git reset --hard origin/master
cd ../
git add $1
@ -13,3 +16,4 @@ function update {
update Bukkit
update CraftBukkit
update Spigot
)

View File

1
work/Paperclip Submodule

@ -0,0 +1 @@
Subproject commit 90e566f21456fb83ba33a8910ee99c2e426c6de7

View File