@@ -35,6 +35,10 @@ def patchSrcDir = "${rootDir}/patchSrc"
3535def assetIndexId = ' 29'
3636def assetIndexUrl = ' https://piston-meta.mojang.com/v1/packages/568d91f5973ea84fe46311a88c93b5dc7c9fa6ec/29.json'
3737
38+ def clientJarUrl = ' https://piston-data.mojang.com/v1/objects/8e75db09feb89eec8ed7f2a2ae779b3fb1fb7f18/client.jar'
39+ def serverJarUrl = ' https://piston-data.mojang.com/v1/objects/205a55e13ce3104298dd84d1fa55bc524fb3ca51/server.jar'
40+ def vineflowerUrl = ' https://github.com/Vineflower/vineflower/releases/download/1.11.2/vineflower-1.11.2.jar'
41+
3842def decompLibs = [
3943 ' authlib-7.0.61.jar' ,
4044 ' brigadier-1.3.10.jar' ,
@@ -53,9 +57,59 @@ def buildLibArgs(String libsPath, List<String> libs) {
5357 return libs. collect { " -e=${ libsPath} /${ it} " }
5458}
5559
60+ task downloadJars {
61+ group = ' setup'
62+ description = ' Download client and server jars'
63+
64+ doLast {
65+ file(jarsDir). mkdirs()
66+ file(libsDir). mkdirs()
67+
68+ def vfDest = new File (rootDir, ' vineflower.jar' )
69+ if (! vfDest. exists()) {
70+ vfDest. bytes = new URL (vineflowerUrl). bytes
71+ }
72+
73+ def clientDest = new File (jarsDir, ' client.jar' )
74+ def serverBundler = new File (jarsDir, ' server-bundler.jar' )
75+ def serverDest = new File (jarsDir, ' server.jar' )
76+
77+ if (! clientDest. exists()) {
78+ clientDest. bytes = new URL (clientJarUrl). bytes
79+ }
80+
81+ if (! serverDest. exists()) {
82+ serverBundler. bytes = new URL (serverJarUrl). bytes
83+
84+ def zipFile = new java.util.zip.ZipFile (serverBundler)
85+ def versionsList = zipFile. getEntry(' META-INF/versions.list' )
86+ def versionsContent = zipFile. getInputStream(versionsList). text. trim()
87+ def parts = versionsContent. split(' \t ' )
88+ def serverEntry = zipFile. getEntry(" META-INF/versions/${ parts[2]} " )
89+ serverDest. bytes = zipFile. getInputStream(serverEntry). bytes
90+
91+ zipFile. entries(). each { entry ->
92+ if (entry. name. startsWith(' META-INF/libraries/' ) && entry. name. endsWith(' .jar' )) {
93+ def jarName = entry. name. substring(entry. name. lastIndexOf(' /' ) + 1 )
94+ if (decompLibs. contains(jarName)) {
95+ def libDest = new File (libsDir, jarName)
96+ if (! libDest. exists()) {
97+ libDest. bytes = zipFile. getInputStream(entry). bytes
98+ }
99+ }
100+ }
101+ }
102+
103+ zipFile. close()
104+ serverBundler. delete()
105+ }
106+ }
107+ }
108+
56109task decompServer (type : Exec ) {
57110 group = ' decompile'
58111 description = ' Decompile server.jar'
112+ dependsOn downloadJars
59113
60114 def outputDir = " ${ decompSrcDir} /server"
61115 def inputJar = " ${ jarsDir} /server.jar"
@@ -77,6 +131,7 @@ task decompServer(type: Exec) {
77131task decompClient (type : Exec ) {
78132 group = ' decompile'
79133 description = ' Decompile client.jar'
134+ dependsOn downloadJars
80135
81136 def outputDir = " ${ decompSrcDir} /client"
82137 def inputJar = " ${ jarsDir} /client.jar"
@@ -478,6 +533,9 @@ clean {
478533 delete " ${ rootDir} /server/src"
479534 delete " ${ rootDir} /client/bin"
480535 delete " ${ rootDir} /server/bin"
536+ delete " ${ rootDir} /jars"
537+ delete " ${ rootDir} /libs"
538+ delete " ${ rootDir} /vineflower.jar"
481539}
482540
483541task downloadAssetIndex {
0 commit comments