import org.teavm.gradle.api.OptimizationLevel buildscript { repositories { mavenLocal() maven { url = 'https://maven.minecraftforge.net' } mavenCentral() gradlePluginPortal() } dependencies { classpath files("src/teavmc-classpath/resources") classpath 'net.minecraftforge.gradle:ForgeGradle:6+' classpath "gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:1.1.3" } } import net.minecraftforge.gradle.common.util.Utils import net.minecraftforge.gradle.common.util.VersionJson plugins { id "java" id "eclipse" id "org.teavm" version "0.9.2" } // --- added: use Java toolchain to target Java 21 --- java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } // Enable --enable-preview at compile and runtime for all relevant tasks tasks.withType(JavaCompile).configureEach { options.compilerArgs += ["--enable-preview"] } tasks.withType(Test).configureEach { jvmArgs += ["--enable-preview"] } tasks.withType(JavaExec).configureEach { jvmArgs += ["--enable-preview"] } sourceSets { main { java { srcDirs( "src/main/java", "src/game/java", "src/protocol-game/java", "src/protocol-relay/java", "src/teavm/java", "src/teavm-boot-menu/java" ) } } } repositories { mavenCentral() maven { url = 'https://libraries.minecraft.net/' } maven { url = 'https://maven.minecraftforge.net' } } dependencies { teavm(teavm.libs.jso) teavm(teavm.libs.jsoApis) compileOnly "org.teavm:teavm-core:0.9.2" // workaround for a few hacks // Minecraft 1.21.5 relevante Dependencies implementation 'org.apache.logging.log4j:log4j-api:2.24.1' implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.24.1' implementation 'org.apache.logging.log4j:log4j-core:2.24.1' implementation 'org.apache.httpcomponents:httpcore:4.4.16' implementation 'org.apache.httpcomponents:httpclient:4.5.14' implementation 'org.apache.commons:commons-lang3:3.17.0' implementation 'org.apache.commons:commons-compress:1.27.1' implementation 'org.lwjgl:lwjgl-glfw:3.3.3' implementation 'org.lwjgl:lwjgl:3.3.3' implementation 'org.lwjgl:lwjgl-jemalloc:3.3.3' implementation 'org.lwjgl:lwjgl-opengl:3.3.3' implementation 'org.lwjgl:lwjgl-freetype:3.3.3' implementation 'org.lwjgl:lwjgl-stb:3.3.3' implementation 'org.lwjgl:lwjgl-tinyfd:3.3.3' implementation 'org.lwjgl:lwjgl-openal:3.3.3' implementation 'org.joml:joml:1.10.8' implementation 'org.lz4:lz4-java:1.8.0' implementation 'org.ow2.asm:asm:9.6' implementation 'org.slf4j:slf4j-api:2.0.16' implementation 'org.jcraft:jorbis:0.0.17' implementation 'org.jetbrains:annotations:24.1.0' implementation 'it.unimi.dsi:fastutil:8.5.15' implementation 'commons-io:commons-io:2.17.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.4' implementation 'com.fasterxml.jackson.core:jackson-core:2.13.4' implementation 'com.ibm.icu:icu4j:76.1' implementation 'com.microsoft.azure:msal4j:1.17.2' implementation 'com.mojang:brigadier:1.3.10' implementation 'com.mojang:datafixerupper:8.0.16' implementation 'com.mojang:authlib:6.0.58' implementation 'com.mojang:text2speech:1.18.11' implementation 'com.mojang:blocklist:1.0.10' implementation 'com.google.guava:guava:33.3.1-jre' implementation 'com.google.code.gson:gson:2.11.0' implementation 'com.github.oshi:oshi-core:6.6.5' implementation 'com.github.stephenc.jcip:jcip-annotations:1.0-1' implementation 'com.nimbusds:content-type:2.3' implementation 'com.nimbusds:nimbus-jose-jwt:9.40' implementation 'com.nimbusds:lang-tag:1.7' implementation 'com.nimbusds:oauth2-oidc-sdk:11.18' implementation 'commons-codec:commons-codec:1.17.1' implementation 'io.netty:netty-transport:4.1.118.Final' implementation 'io.netty:netty-transport-classes-epoll:4.1.118.Final' implementation 'io.netty:netty-handler:4.1.118.Final' implementation 'io.netty:netty-buffer:4.1.118.Final' implementation 'io.netty:netty-resolver:4.1.118.Final' implementation 'io.netty:netty-transport-native-unix-common:4.1.118.Final' implementation 'io.netty:netty-common:4.1.118.Final' implementation 'io.netty:netty-codec:4.1.118.Final' implementation 'net.sf.jopt-simple:jopt-simple:5.0.4' implementation 'net.java.dev.jna:jna-platform:5.15.0' implementation 'net.java.dev.jna:jna:5.15.0' implementation 'net.minecraftforge:forge:1.20.4-49.0.50' implementation 'net.minecraftforge:forgespi:7.0.0' implementation 'net.minidev:json-smart:2.5.1' implementation 'net.minidev:accessors-smart:2.5.1' implementation 'commons-logging:commons-logging:1.3.4' implementation 'ca.weblite:java-objc-bridge:1.1' implementation 'org.json:json:20240303' //implementation files('com/mojang/logging/1.5.10/logging-1.5.10.jar') //implementation files('com/mojang/jtracy/1.0.29/jtracy-1.0.29.jar') //implementation files('com/mojang/jtracy/1.0.29/jtracy-1.0.29-natives-windows.jar') //implementation files('com/mojang/patchy/2.2.10/patchy-2.2.10.jar') // Lokale JARs (nur falls online nicht verfügbar) implementation files( 'src/jars/org/lwjgl/lwjgl-glfw/3.3.3/lwjgl-glfw-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-glfw/3.3.3/lwjgl-glfw-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-glfw/3.3.3/lwjgl-glfw-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl/3.3.3/lwjgl-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl/3.3.3/lwjgl-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl/3.3.3/lwjgl-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-jemalloc/3.3.3/lwjgl-jemalloc-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-jemalloc/3.3.3/lwjgl-jemalloc-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl-jemalloc/3.3.3/lwjgl-jemalloc-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-opengl/3.3.3/lwjgl-opengl-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-opengl/3.3.3/lwjgl-opengl-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-opengl/3.3.3/lwjgl-opengl-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl-freetype/3.3.3/lwjgl-freetype-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl-freetype/3.3.3/lwjgl-freetype-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-freetype/3.3.3/lwjgl-freetype-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-stb/3.3.3/lwjgl-stb-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-stb/3.3.3/lwjgl-stb-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-stb/3.3.3/lwjgl-stb-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl-tinyfd/3.3.3/lwjgl-tinyfd-3.3.3-natives-windows.jar', 'src/jars/org/lwjgl/lwjgl-tinyfd/3.3.3/lwjgl-tinyfd-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl-tinyfd/3.3.3/lwjgl-tinyfd-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-openal/3.3.3/lwjgl-openal-3.3.3-natives-windows-arm64.jar', 'src/jars/org/lwjgl/lwjgl-openal/3.3.3/lwjgl-openal-3.3.3-natives-windows-x86.jar', 'src/jars/org/lwjgl/lwjgl-openal/3.3.3/lwjgl-openal-3.3.3-natives-windows.jar', // Die folgenden JARs sind NICHT öffentlich verfügbar: 'src/jars/com/mojang/jtracy/1.0.29/jtracy-1.0.29.jar', 'src/jars/com/mojang/jtracy/1.0.29/jtracy-1.0.29-natives-windows.jar', 'src/jars/com/mojang/patchy/2.2.10/patchy-2.2.10.jar', 'src/jars/com/mojang/logging/1.5.10/logging-1.5.10.jar' ) } def folder = "javascript" def name = "classes.js" teavm.js { compileJava.options.encoding = "UTF-8" obfuscated = true sourceMap = true targetFileName = "../" + name optimization = OptimizationLevel.BALANCED // Change to "AGGRESSIVE" for release outOfProcess = false fastGlobalAnalysis = false processMemory = 512 entryPointName = "main" mainClass = "net.lax1dude.eaglercraft.v1_8.internal.teavm.MainClass" outputDir = file(folder) properties = [ "java.util.TimeZone.autodetect": "true" ] debugInformation = false } tasks.named("generateJavaScript") { doLast { // NOTE: This step may break at any time, and is not required for 99% of browsers def phile = file(folder + "/" + name) def dest = phile.getText("UTF-8") def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ") dest = dest.substring(0, i) + "var" + dest.substring(i + 3) def j = dest.indexOf("function(\$rt_globals,\$rt_exports){") dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34) phile.write(dest, "UTF-8") } }