From 0e1d018537cabed1a89ebb2f1489f5bc1bed0ff7 Mon Sep 17 00:00:00 2001 From: NotAlexNoyle Date: Wed, 12 Nov 2025 13:42:47 -0500 Subject: [PATCH] Fix merge conflicts --- .../nl/skbotnl/substagent/SubstAgent.java | 5 +-- .../nl/skbotnl/substagent/Transformer.java | 39 ++++++++++++++----- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/main/java/nl/skbotnl/substagent/SubstAgent.java b/src/main/java/nl/skbotnl/substagent/SubstAgent.java index fa28d22..150cd41 100644 --- a/src/main/java/nl/skbotnl/substagent/SubstAgent.java +++ b/src/main/java/nl/skbotnl/substagent/SubstAgent.java @@ -8,11 +8,8 @@ public class SubstAgent { String version = SubstAgent.class.getPackage().getImplementationVersion(); System.out.println("[SubstAgent] Loaded version " + version); -<<<<<<< HEAD - -======= inst.addTransformer(new Transformer()); ->>>>>>> de6ecef (Add support for server.properties) + } } diff --git a/src/main/java/nl/skbotnl/substagent/Transformer.java b/src/main/java/nl/skbotnl/substagent/Transformer.java index 306e043..17e48e4 100644 --- a/src/main/java/nl/skbotnl/substagent/Transformer.java +++ b/src/main/java/nl/skbotnl/substagent/Transformer.java @@ -9,15 +9,16 @@ import javassist.CtMethod; import javassist.LoaderClassPath; class Transformer implements ClassFileTransformer { + @Override - public byte[] transform( - ClassLoader loader, - String className, - Class classBeingRedefined, - ProtectionDomain domain, - byte[] classfileBuffer) { + public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain domain, + byte[] classfileBuffer) + { + try { + if ("java/io/BufferedReader".equals(className)) { + ClassPool cp = ClassPool.getDefault(); cp.insertClassPath(new LoaderClassPath(loader)); @@ -25,42 +26,60 @@ class Transformer implements ClassFileTransformer { CtMethod readLineMethod = ctClass.getDeclaredMethod("readLine"); readLineMethod.insertAfter("{ $_ = nl.skbotnl.substagent.Hook.substituteEnvVariables($_); }"); - CtClass[] readParamTypes = {cp.get("char[]"), CtClass.intType, CtClass.intType}; + CtClass[] readParamTypes = { cp.get("char[]"), CtClass.intType, CtClass.intType }; CtMethod readMethod = ctClass.getDeclaredMethod("read", readParamTypes); readMethod.insertAfter("{ cbuf = nl.skbotnl.substagent.Hook.substituteEnvVariables(cbuf); }"); byte[] byteCode = ctClass.toBytecode(); ctClass.detach(); return byteCode; + } else if ("net/minecraft/server/dedicated/PropertyManager".equals(className)) { + ClassPool cp = ClassPool.getDefault(); cp.insertClassPath(new LoaderClassPath(loader)); CtClass ctClass = cp.get("net.minecraft.server.dedicated.PropertyManager"); for (CtMethod cm : ctClass.getDeclaredMethods()) { + if (!Modifier.isPrivate(cm.getModifiers())) { + continue; + } + if (!cm.getReturnType().getName().equals("java.lang.String")) { + continue; + } CtClass[] params = cm.getParameterTypes(); - if (params.length == 2 - && params[0].getName().equals("java.lang.String") - && params[1].getName().equals("java.lang.String")) { + if (params.length == 2 && params[0].getName().equals("java.lang.String") + && params[1].getName().equals("java.lang.String")) + { + cm.insertAfter("{ $_ = nl.skbotnl.substagent.Hook.substituteEnvVariables($_); }"); break; + } + } byte[] byteCode = ctClass.toBytecode(); ctClass.detach(); return byteCode; + } + } catch (Throwable e) { + throw new RuntimeException(e); + } + return null; + } + }