From abc1c843f0fd62db65e2c026487b75c83d7f6855 Mon Sep 17 00:00:00 2001 From: BRanulf Date: Sun, 15 Jun 2025 23:33:38 +0800 Subject: [PATCH] wdnmd --- build.gradle | 10 +++ .../com/yourdomain/agent/CheckrpAgent.java | 61 +++++++++++-------- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/build.gradle b/build.gradle index 04e5531..e3d3e22 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ plugins { id 'java' + id 'com.github.johnrengelman.shadow' version '8.1.1' } group = 'com.yourdomain' @@ -28,4 +29,13 @@ jar { 'Can-Retransform-Classes': 'true' ) } +} + +shadowJar { + archiveBaseName.set('agent') + archiveClassifier.set('') + archiveVersion.set('1.0-SNAPSHOT') + manifest { + attributes 'Premain-Class': 'com.yourdomain.agent.CheckrpAgent' + } } \ No newline at end of file diff --git a/src/main/java/com/yourdomain/agent/CheckrpAgent.java b/src/main/java/com/yourdomain/agent/CheckrpAgent.java index da5f674..7ff2a5e 100644 --- a/src/main/java/com/yourdomain/agent/CheckrpAgent.java +++ b/src/main/java/com/yourdomain/agent/CheckrpAgent.java @@ -3,48 +3,57 @@ package com.yourdomain.agent; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatchers; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.utility.JavaModule; +import net.bytebuddy.dynamic.DynamicType; +import java.io.BufferedWriter; +import java.io.File; import java.io.FileWriter; -import java.io.PrintWriter; import java.lang.instrument.Instrumentation; -import java.lang.reflect.Field; -import java.time.LocalDateTime; +import java.security.ProtectionDomain; public class CheckrpAgent { + private static final String OUT_PATH = "D:/Minectaft/Milk/milk1/dev/packets.txt"; public static void premain(String agentArgs, Instrumentation inst) { - System.out.println("[CheckrpAgent] Agent loaded: Logging sent packets to sent_packets.txt"); + try { + File f = new File(OUT_PATH); + f.getParentFile().mkdirs(); + if (!f.exists()) f.createNewFile(); + } catch (Exception e) { + e.printStackTrace(); + } new AgentBuilder.Default() - .type(ElementMatchers.nameEndsWith("ModLoadProcedure")) - .transform((builder, typeDescription, classLoader, module, protectionDomain) -> - builder.method(ElementMatchers.named("sendToServer")) - .intercept(Advice.to(SendPacketLogger.class)) + .ignore(ElementMatchers.nameStartsWith("net.bytebuddy.")) + .ignore(ElementMatchers.nameStartsWith("java.")) + .type(ElementMatchers.named("net.minecraftforge.network.simple.SimpleChannel")) + .transform(( + DynamicType.Builder builder, + TypeDescription typeDescription, + ClassLoader classLoader, + JavaModule module, + ProtectionDomain pd + ) -> + builder.visit(Advice.to(SendAdvice.class) + .on(ElementMatchers.named("sendToServer") + .and(ElementMatchers.takesArguments(1)) + ) + ) ) .installOn(inst); - } - public static class SendPacketLogger { - + public static class SendAdvice { @Advice.OnMethodEnter public static void onEnter(@Advice.Argument(0) Object packet) { - try (PrintWriter out = new PrintWriter(new FileWriter("sent_packets.txt", true))) { - out.println("==== Packet Sent ===="); - out.println("Time: " + LocalDateTime.now()); - out.println("Class: " + packet.getClass().getName()); - for (Field field : packet.getClass().getDeclaredFields()) { - field.setAccessible(true); - try { - Object value = field.get(packet); - out.printf(" %s = %s%n", field.getName(), value); - } catch (IllegalAccessException e) { - out.printf(" %s = %n", field.getName()); - } - } - out.println("=====================\n"); + String className = packet.getClass().getName(); + String line ="["+className +"] "+ (packet == null ? "null" : packet.toString()) + System.lineSeparator(); + try (BufferedWriter out = new BufferedWriter(new FileWriter(OUT_PATH, true))) { + out.write(line); } catch (Exception e) { - System.err.println("[CheckrpAgent] Failed to write packet info: " + e.getMessage()); + e.printStackTrace(); } } }