Skip to content

Commit

Permalink
Patch Ears
Browse files Browse the repository at this point in the history
  • Loading branch information
kappa-maintainer committed Jul 12, 2024
1 parent 91645fe commit 25520fa
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/main/java/com/cleanroommc/fugue/common/FugueLoadingPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.cleanroommc.fugue.config.FugueConfig;
import com.cleanroommc.fugue.modifiers.IC2ExtraFixer;
import com.cleanroommc.fugue.transformer.*;
import com.cleanroommc.fugue.transformer.groovyscript.ExceptionMessageTransformer;
import com.cleanroommc.fugue.transformer.groovyscript.GroovyClassLoaderTransformer;
import com.cleanroommc.fugue.transformer.logisticpipes.*;
import com.cleanroommc.fugue.transformer.loliasm.JavaFixesTransformer;
Expand Down Expand Up @@ -120,6 +121,7 @@ public class FugueLoadingPlugin implements IFMLLoadingPlugin {
}
if (FugueConfig.modPatchConfig.enableGroovyScript) {
TransformerDelegate.registerExplicitTransformerByInstance(new GroovyClassLoaderTransformer(), "groovy.lang.GroovyClassLoader$ClassCollector");
TransformerDelegate.registerExplicitTransformerByInstance(new ExceptionMessageTransformer(), "org.codehaus.groovy.control.messages.ExceptionMessage");
}
if (FugueConfig.modPatchConfig.enableIC2CE) {
Config.registerConfigModifier(new IC2ExtraFixer(), "mixins.ic2c_extras.json");
Expand Down Expand Up @@ -150,6 +152,17 @@ public class FugueLoadingPlugin implements IFMLLoadingPlugin {
if (FugueConfig.modPatchConfig.enable5zig) {
TransformerDelegate.registerExplicitTransformerByInstance(new ClassTweakerTransformer(), "eu.the5zig.mod.asm.ClassTweaker");
}
if (FugueConfig.modPatchConfig.enableEars) {
TransformerDelegate.registerExplicitTransformerByInstance(new EarsASMTransformer(),
"com.unascribed.ears.asm.ImageBufferDownloadTransformer",
"com.unascribed.ears.asm.LayerElytraTransformer",
"com.unascribed.ears.asm.RenderPlayerTransformer",
"com.unascribed.ears.asm.ThreadDownloadImageDataTransformer",
"com.unascribed.ears.common.agent.mini.MiniTransformer",
"com.unascribed.ears.common.agent.mini.PatchContext",
"com.unascribed.ears.common.agent.mini.PatchContext$SearchResult"
);
}
if (FugueConfig.getCodeSourcePatchTargets.length > 0) {
TransformerDelegate.registerExplicitTransformerByInstance(new ITweakerTransformer(), FugueConfig.getCodeSourcePatchTargets);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,7 @@ public class ModPatchConfig {
public boolean enableBetterFC = true;
@Config.Name("Enable 5zig Patch")
public boolean enable5zig = true;
@Config.Name("Enable Ears Patch")
@Config.Comment("This mod is packing a copy of ASM itself")
public boolean enableEars = true;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.cleanroommc.fugue.transformer;

import net.minecraftforge.fml.common.FMLLog;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.commons.ClassRemapper;
import org.objectweb.asm.commons.Remapper;
import top.outlands.foundation.IExplicitTransformer;

public class EarsASMTransformer implements IExplicitTransformer {
@Override
public byte[] transform(byte[] basicClass) {
ClassReader reader = new ClassReader(basicClass);
ClassWriter writer = new ClassWriter(0);
ClassVisitor visitor = new ClassRemapper(writer, new ASMRemapper());
try {
reader.accept(visitor, ClassReader.EXPAND_FRAMES);
} catch (Exception e) {
FMLLog.log.warn("Couldn't remap class {}", reader.getClassName(), e);
return basicClass;
}
return writer.toByteArray();
}

static class ASMRemapper extends Remapper {
final String fromPrefixes = "com/unascribed/ears/common/agent/mini/asm/";

final String toPrefixes = "org/objectweb/asm/";

@Override
public String map(String typeName) {
if (typeName == null) {
return null;
}
if (typeName.startsWith(fromPrefixes)) {
return toPrefixes + typeName.substring(fromPrefixes.length());
}


return typeName;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.cleanroommc.fugue.transformer.groovyscript;

import com.cleanroommc.fugue.common.Fugue;
import javassist.ClassPool;
import javassist.CtClass;
import top.outlands.foundation.IExplicitTransformer;

import java.io.ByteArrayInputStream;

public class ExceptionMessageTransformer implements IExplicitTransformer {
@Override
public byte[] transform(byte[] bytes) {
try {
CtClass cc = ClassPool.getDefault().makeClass(new ByteArrayInputStream(bytes));
cc.getDeclaredMethod("write").setBody("{}");
bytes = cc.toBytecode();
} catch (Throwable t) {
Fugue.LOGGER.error("Exception {} on {}", t, this.getClass().getSimpleName());
}
return bytes;
}
}

0 comments on commit 25520fa

Please sign in to comment.