@@ -21,6 +21,11 @@ configurations {
2121 canBeConsumed = false
2222 extendsFrom(vineImplementation, vineCompileOnly)
2323 }
24+ vineServerJar {
25+ canBeResolved = true
26+ canBeConsumed = false
27+ transitive = false
28+ }
2429 implementation. extendsFrom(vineImplementation)
2530 compileOnly. extendsFrom(vineCompileOnly)
2631}
@@ -35,6 +40,10 @@ java {
3540 toolchain. languageVersion = JavaLanguageVersion . of(java_version)
3641}
3742
43+ hytale {
44+ updateChannel = " pre-release"
45+ }
46+
3847repositories {
3948 mavenCentral()
4049 maven {
@@ -78,9 +87,13 @@ repositories {
7887 }
7988}
8089
90+ def hytaleServerDep = ' com.hypixel.hytale:Server:2026.03.20-db226053c'
91+
8192dependencies {
93+ vineServerJar hytaleServerDep
94+ vineCompileOnly hytaleServerDep
8295 vineflowerTool ' org.vineflower:vineflower:1.11.2'
83- implementation ' com.azuredoom.levelingcore:LevelingCore:0.+ '
96+ implementation ' com.azuredoom.levelingcore:LevelingCore:1.0.0-alpha2 '
8497 vineImplementation ' curse.maven:hyui-1431415:7693755'
8598 vineImplementation ' curse.maven:dynamictooltipslib-1459711:7702598'
8699 vineCompileOnly ' at.helpch:placeholderapi-hytale:1.0.7'
@@ -188,76 +201,77 @@ publishing {
188201
189202tasks. register(" decompileLibsWithVineflower" ) {
190203 group = " decompilation"
191- description = " Decompile /libs jars + implementation/compileOnly deps (compileClasspath) into build/vineflower/<jarName> /"
204+ description = " Decompile only com/hytale from the Hytale Server jar into build/vineflower/hytale-server /"
192205
193- def libsDir = file(" $rootDir /libs" )
194- def outDir = file(" $buildDir /vineflower" )
206+ def outDir = file(" $buildDir /vineflower/hytale-server" )
207+ def tempDir = file(" $buildDir /tmp/vineflower" )
208+ def serverConfig = configurations. vineServerJar
209+ def classpathConfig = configurations. vineDecompileClasspath
195210
196- def depConfig = configurations. vineDecompileClasspath
197-
198- inputs. files(depConfig)
199- inputs. dir(libsDir)
211+ inputs. files(serverConfig, classpathConfig)
200212 outputs. dir(outDir)
201213
202214 doLast {
203215 outDir. mkdirs()
216+ tempDir. mkdirs()
204217
205218 def vineflowerJar = configurations. vineflowerTool. singleFile
206219
207220 def javaExe = javaToolchains. launcherFor {
208221 languageVersion = JavaLanguageVersion . of(java_version)
209222 }. get(). executablePath. asFile. absolutePath
210223
211-
212- def localJars = libsDir. exists()
213- ? fileTree(dir : libsDir, include : [" *.jar" ]). files
214- : [] as Set<File >
215-
216- def depJars = depConfig. incoming. artifactView { it. lenient(true ) }
217- .files. files
218- .findAll { it. name. endsWith(" .jar" ) } as Set<File >
219-
220- def jars = (localJars + depJars). toList(). unique()
221-
222- if (jars. isEmpty()) {
223- logger. lifecycle(" No .jar files found in /libs or on compileClasspath." )
224- return
224+ def serverJar = serverConfig. singleFile
225+ if (! serverJar. exists()) {
226+ throw new GradleException (" Could not resolve Hytale Server jar from vineServerJar" )
225227 }
226228
227- jars. each { jarFile ->
228- def jarBase = jarFile. name. replaceAll(/ \. jar$/ , " " )
229- def jarOut = new File (outDir, jarBase)
230- jarOut. mkdirs()
231-
232- def externals = jars. findAll { it != jarFile }
233- .collectMany { [" -e" , it. absolutePath] }
234-
235- def cmd = [
236- javaExe,
237- " -jar" , vineflowerJar. absolutePath,
238- * externals,
239- jarFile. absolutePath,
240- jarOut. absolutePath
241- ]
229+ def filteredJar = new File (tempDir, " Server-com-hytale-only.jar" )
230+ if (filteredJar. exists()) {
231+ filteredJar. delete()
232+ }
242233
243- logger. lifecycle(" Running: ${ cmd.join(' ')} " )
234+ // Build a temp jar containing only com/hytale classes/resources
235+ ant. jar(destfile : filteredJar. absolutePath) {
236+ zipfileset(src : serverJar. absolutePath) {
237+ include(name : " com/hytale/**" )
238+ }
239+ }
244240
245- def pb = new ProcessBuilder (cmd)
246- pb . directory(project . projectDir )
247- pb . redirectErrorStream( true )
241+ if ( ! filteredJar . exists() || filteredJar . length() == 0 ) {
242+ throw new GradleException ( " Filtered jar is empty. Nothing matched com/hytale/** inside ${ serverJar.name } " )
243+ }
248244
249- def proc = pb. start()
250- proc. inputStream. withReader { r ->
251- r. eachLine { line -> logger. lifecycle(line) }
252- }
245+ def externals = classpathConfig. incoming. artifactView { it. lenient(true ) }
246+ .files. files
247+ .findAll { it. name. endsWith(" .jar" ) && it != serverJar }
248+ .collectMany { [" -e" , it. absolutePath] }
249+
250+ def cmd = [
251+ javaExe,
252+ " -jar" , vineflowerJar. absolutePath,
253+ * externals,
254+ filteredJar. absolutePath,
255+ outDir. absolutePath
256+ ]
257+
258+ logger. lifecycle(" Running: ${ cmd.join(' ')} " )
259+
260+ def pb = new ProcessBuilder (cmd)
261+ pb. directory(project. projectDir)
262+ pb. redirectErrorStream(true )
263+
264+ def proc = pb. start()
265+ proc. inputStream. withReader { r ->
266+ r. eachLine { line -> logger. lifecycle(line) }
267+ }
253268
254- def exit = proc. waitFor()
255- if (exit != 0 ) {
256- logger. lifecycle(" Vineflower failed for ${ jarFile.name} (exit ${ exit} )" )
257- } else {
258- logger. lifecycle(" Decompiled ${ jarFile.name} -> ${ jarOut} " )
259- }
269+ def exit = proc. waitFor()
270+ if (exit != 0 ) {
271+ throw new GradleException (" Vineflower failed (exit ${ exit} )" )
260272 }
273+
274+ logger. lifecycle(" Decompiled com/hytale from ${ serverJar.name} -> ${ outDir} " )
261275 }
262276}
263277
0 commit comments