diff --git a/build.gradle.kts b/build.gradle.kts index 6c13f9c12..89b226ee0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -106,7 +106,7 @@ nmsBindings.forEach { key, value -> systemProperty("net.kyori.ansi.colorLevel", color) systemProperty("com.mojang.eula.agree", true) systemProperty("iris.errorReporting", errorReporting) - jvmArgs("-javaagent:${tasks.jar.flatMap { it.archiveFile }.get().asFile.absolutePath}") + jvmArgs("-javaagent:${project(":core:agent").tasks.jar.flatMap { it.archiveFile }.get().asFile.absolutePath}") } } @@ -117,14 +117,8 @@ tasks { from(project(":nms:$key").tasks.named("remap").map { zipTree(it.outputs.files.singleFile) }) } from(project(":core").tasks.shadowJar.flatMap { it.archiveFile }.map { zipTree(it) }) + from(project(":core:agent").tasks.jar.flatMap { it.archiveFile }) archiveFileName.set("Iris-${project.version}.jar") - - manifest.attributes( - "Agent-Class" to "com.volmit.iris.util.agent.Installer", - "Premain-Class" to "com.volmit.iris.util.agent.Installer", - "Can-Redefine-Classes" to true, - "Can-Retransform-Classes" to true - ) } register("iris") { @@ -177,10 +171,6 @@ fun exec(vararg command: Any) { p.waitFor() } -dependencies { - implementation(project(":core")) -} - configurations.configureEach { resolutionStrategy.cacheChangingModulesFor(60, "minutes") resolutionStrategy.cacheDynamicVersionsFor(60, "minutes") diff --git a/core/agent/build.gradle.kts b/core/agent/build.gradle.kts new file mode 100644 index 000000000..a0d8024df --- /dev/null +++ b/core/agent/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + java +} + +tasks.jar { + manifest.attributes( + "Agent-Class" to "com.volmit.iris.util.agent.Installer", + "Premain-Class" to "com.volmit.iris.util.agent.Installer", + "Can-Redefine-Classes" to true, + "Can-Retransform-Classes" to true + ) +} \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/util/agent/Installer.java b/core/agent/src/main/java/com/volmit/iris/util/agent/Installer.java similarity index 100% rename from core/src/main/java/com/volmit/iris/util/agent/Installer.java rename to core/agent/src/main/java/com/volmit/iris/util/agent/Installer.java diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java index e3deb6f2b..b59a24585 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java @@ -1,6 +1,7 @@ package com.volmit.iris.core.safeguard; import com.volmit.iris.Iris; +import com.volmit.iris.util.agent.Agent; import com.volmit.iris.util.format.C; public class UtilsSFG { @@ -47,7 +48,7 @@ public class UtilsSFG { if (ServerBootSFG.missingAgent) { Iris.safeguard(C.RED + "Java Agent"); Iris.safeguard(C.RED + "- Please enable dynamic agent loading by adding -XX:+EnableDynamicAgentLoading to your jvm arguments."); - Iris.safeguard(C.RED + "- or add the jvm argument -javaagent:plugins/" + Iris.instance.getJarFile().getName()); + Iris.safeguard(C.RED + "- or add the jvm argument -javaagent:" + Agent.AGENT_JAR.getPath()); } if (!ServerBootSFG.passedserversoftware) { Iris.safeguard(C.YELLOW + "Unsupported Server Software"); diff --git a/core/src/main/java/com/volmit/iris/util/agent/Agent.java b/core/src/main/java/com/volmit/iris/util/agent/Agent.java index 009923b30..5f823fc30 100644 --- a/core/src/main/java/com/volmit/iris/util/agent/Agent.java +++ b/core/src/main/java/com/volmit/iris/util/agent/Agent.java @@ -4,10 +4,14 @@ import com.volmit.iris.Iris; import net.bytebuddy.agent.ByteBuddyAgent; import net.bytebuddy.dynamic.loading.ClassReloadingStrategy; +import java.io.File; import java.lang.instrument.Instrumentation; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; public class Agent { private static final String NAME = "com.volmit.iris.util.agent.Installer"; + public static final File AGENT_JAR = new File(Iris.instance.getDataFolder(), "agent.jar"); public static ClassReloadingStrategy installed() { return ClassReloadingStrategy.of(getInstrumentation()); @@ -23,8 +27,9 @@ public class Agent { if (doGetInstrumentation() != null) return true; try { + Files.copy(Iris.instance.getResource("agent.jar"), AGENT_JAR.toPath(), StandardCopyOption.REPLACE_EXISTING); Iris.info("Installing Java Agent..."); - ByteBuddyAgent.attach(Iris.instance.getJarFile(), ByteBuddyAgent.ProcessProvider.ForCurrentVm.INSTANCE); + ByteBuddyAgent.attach(AGENT_JAR, ByteBuddyAgent.ProcessProvider.ForCurrentVm.INSTANCE); } catch (Throwable e) { e.printStackTrace(); } diff --git a/settings.gradle.kts b/settings.gradle.kts index c45462895..862732b5a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,7 +28,7 @@ plugins { rootProject.name = "Iris" -include(":core") +include(":core", ":core:agent") include( ":nms:v1_21_R4", ":nms:v1_21_R3",