blob: a1b06a1f1d9f568c31b54b299593773edc5cb50c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#!/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)
windows="$([[ "$OSTYPE" == "cygwin" || "$OSTYPE" == "msys" ]] && echo "true" || echo "false")"
decompiledir="$workdir/Minecraft/$minecraftversion"
spigotdecompiledir="$decompiledir/spigot"
forgedecompiledir="$decompiledir/forge"
forgeflowerversion="1.5.380.19"
forgeflowerurl="http://files.minecraftforge.net/maven/net/minecraftforge/forgeflower/$forgeflowerversion/forgeflower-$forgeflowerversion.jar"
# temp use patched version
forgeflowerurl="https://zachbr.keybase.pub/paper/forgeflower-patched/forgeflower-1.5.380.19.jar?dl=1"
forgeflowerbin="$workdir/ForgeFlower/$forgeflowerversion.jar"
# TODO: Make this better? We don't need spigot compat for this stage
forgefloweroptions="-dgs=1 -hdc=0 -asc=1 -udv=1 -jvn=1"
forgeflowercachefile="$decompiledir/forgeflowercache"
forgeflowercachevalue="$forgeflowerurl - $forgeflowerversion - $forgefloweroptions";
classdir="$decompiledir/classes"
versionjson="$workdir/Minecraft/$minecraftversion/$minecraftversion.json"
if [[ ! -f "$versionjson" ]]; then
echo "Downloading $minecraftversion JSON Data"
verescaped=$(echo ${minecraftversion} | sed 's/\-pre/ Pre-Release /g' | sed 's/\./\\./g')
urlescaped=$(echo ${verescaped} | sed 's/ /_/g')
verentry=$(curl -s "https://launchermeta.mojang.com/mc/game/version_manifest.json" | grep -oE "\{\"id\": \"${verescaped}\".*${urlescaped}\.json")
jsonurl=$(echo $verentry | grep -oE https:\/\/.*\.json)
curl -o "$versionjson" "$jsonurl"
echo "$versionjson - $jsonurl"
fi
function downloadLibraries {
group=$1
groupesc=$(echo ${group} | sed 's/\./\\./g')
grouppath=$(echo ${group} | sed 's/\./\//g')
libdir="$decompiledir/libraries/${group}/"
mkdir -p "$libdir"
shift
for lib in "$@"
do
jar="$libdir/${lib}-sources.jar"
destlib="$libdir/${lib}"
if [ ! -f "$jar" ]; then
libesc=$(echo ${lib} | sed 's/\./\\]./g')
ver=$(grep -oE "${groupesc}:${libesc}:[0-9\.]+" "$versionjson" | sed "s/${groupesc}:${libesc}://g")
echo "Downloading ${group}:${lib}:${ver} Sources"
curl -s -o "$jar" "https://libraries.minecraft.net/${grouppath}/${lib}/${ver}/${lib}-${ver}-sources.jar"
set +e
grep "<html>" "$jar" && grep -oE "<title>.*?</title>" "$jar" && rm "$jar" && echo "Failed to download $jar" && exit 1
set -e
fi
if [ ! -d "$destlib/$grouppath" ]; then
echo "Extracting $group:$lib Sources"
mkdir -p "$destlib"
(cd "$destlib" && jar xf "$jar")
fi
done
}
downloadLibraries "com.mojang" datafixerupper authlib brigadier
# prep folders
mkdir -p "$workdir/ForgeFlower"
mkdir -p "$spigotdecompiledir"
mkdir -p "$forgedecompiledir"
echo "Extracting NMS classes..."
if [ ! -d "$classdir" ]; then
mkdir -p "$classdir"
cd "$classdir"
set +e
jar xf "$decompiledir/$minecraftversion-mapped.jar" net/minecraft/server
if [ "$?" != "0" ]; then
cd "$basedir"
echo "Failed to extract NMS classes."
exit 1
fi
set -e
fi
#needsDecomp=0
#if [ ! -f "$forgeflowercachefile" ]; then
# needsDecomp=1
#elif [ "$(cat ${forgeflowercachefile})" != "$forgeflowercachevalue" ]; then
# needsDecomp=1
#fi
#if [ "$needsDecomp" == "1" ]; then
# # our local cache is now invalidated, we can update forgeflower to get better deobfuscation
# rm -rf "$forgedecompiledir/net"
#fi
## Forge (for Paper mc-dev imports, and dev src folders for unimported files)
#if [ ! -d "$forgedecompiledir/net" ] ; then
# echo "Decompiling classes (stage 1)..."
# cd "$basedir"
#
# if [ ! -f "$forgeflowerbin" ]; then
# echo "Downloading ForgeFlower ($forgeflowerversion)..."
# curl -s -o "$forgeflowerbin" "$forgeflowerurl"
# fi
#
# set +e
# java -Ddecomp.renameparams=true -jar "$forgeflowerbin" ${forgefloweroptions} -ind=' ' "$classdir" "$forgedecompiledir"
# if [ "$?" != "0" ]; then
# rm -rf "$forgedecompiledir/net"
# echo "Failed to decompile classes."
# exit 1
# fi
# echo "$forgeflowercachevalue" > "$forgeflowercachefile"
# set -e
#fi
# Spigot (for CraftBukkit patches)
# if we see the old net folder, copy it to spigot to avoid redecompiling
if [ -d "$decompiledir/net" ]; then
cp -r "$decompiledir/net" "$spigotdecompiledir/"
fi
if [ ! -d "$spigotdecompiledir/net" ]; then
echo "Decompiling classes (stage 2)..."
cd "$basedir"
set +e
java -jar "$workdir/BuildData/bin/fernflower.jar" -dgs=1 -hdc=0 -asc=1 -udv=0 -rsy=1 -aoa=1 "$classdir" "$spigotdecompiledir"
if [ "$?" != "0" ]; then
rm -rf "$spigotdecompiledir/net"
echo "Failed to decompile classes."
exit 1
fi
set -e
fi
# set a symlink to current
currentlink="$workdir/Minecraft/current"
if ([ ! -e "$currentlink" ] || [ -L "$currentlink" ]) && [ "$windows" == "false" ]; then
set +e
echo "Pointing $currentlink to $minecraftversion"
rm -rf "$currentlink" || true
ln -sfn "$minecraftversion" "$currentlink" || echo "Failed to set current symlink"
fi
)
|