Skip to content

Commit 6fc292f

Browse files
committed
clean up asm a bit
1 parent b85bc5a commit 6fc292f

3 files changed

Lines changed: 29 additions & 27 deletions

File tree

src/main/java/com/cleanroommc/modularui/core/ClassTransformer.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package com.cleanroommc.modularui.core;
22

3-
import java.util.function.Consumer;
4-
53
import com.cleanroommc.modularui.core.temp.ClassSplicer;
64
import com.cleanroommc.modularui.core.visitor.PacketByteBufferVisitor;
75

86
import net.minecraft.launchwrapper.IClassTransformer;
97

108
import org.objectweb.asm.ClassReader;
119
import org.objectweb.asm.ClassWriter;
12-
import org.objectweb.asm.tree.ClassNode;
1310

1411
public class ClassTransformer implements IClassTransformer {
1512

@@ -23,23 +20,22 @@ public byte[] transform(String name, String transformedName, byte[] basicClass)
2320
if (ModularUICore.ae2Loaded) {
2421
// AE2 is missing PacketUtilPatch, patch it in
2522
if (transformedName.equals(PacketByteBufferVisitor.PACKET_UTIL_CLASS)) {
26-
Consumer<ClassNode> consumer = (node) -> {
27-
ClassSplicer.spliceClasses(node, "com.cleanroommc.modularui.core.temp.PacketUtilPatch",
23+
return ClassSplicer.processNode(basicClass, cn -> {
24+
ClassSplicer.spliceClasses(cn, "com.cleanroommc.modularui.core.temp.PacketUtilPatch",
2825
"writeItemStackFromClientToServer");
29-
};
30-
ModularUICore.LOGGER.info("Applied {} ASM, specific for AE2, from ModularUI", transformedName);
31-
return ClassSplicer.processNode(basicClass, consumer);
26+
ModularUICore.LOGGER.info("Applied {} ASM, specific for AE2, from ModularUI", transformedName);
27+
});
3228
}
3329
// Don't patch over AE2's PacketBufferPatch
3430
return basicClass;
3531
}
3632
// Otherwise apply ModularUI's patches
3733
if (transformedName.equals(PacketByteBufferVisitor.PACKET_UTIL_CLASS) ||
38-
transformedName.equals(PacketByteBufferVisitor.PACKET_BUFFER_CLASS)) {
39-
ClassWriter classWriter = new ClassWriter(0);
40-
new ClassReader(basicClass).accept(new PacketByteBufferVisitor(classWriter), 0);
41-
ModularUICore.LOGGER.info("Applied {} ASM from ModularUI", transformedName);
42-
return classWriter.toByteArray();
34+
transformedName.equals(PacketByteBufferVisitor.PACKET_BUFFER_CLASS)) {
35+
ClassWriter classWriter = new ClassWriter(0);
36+
new ClassReader(basicClass).accept(new PacketByteBufferVisitor(classWriter), 0);
37+
ModularUICore.LOGGER.info("Applied {} ASM from ModularUI", transformedName);
38+
return classWriter.toByteArray();
4339
}
4440
return basicClass;
4541
}

src/main/java/com/cleanroommc/modularui/core/temp/ClassSplicer.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,6 @@
1919

2020
package com.cleanroommc.modularui.core.temp;
2121

22-
import java.io.IOException;
23-
import java.io.InputStream;
24-
import java.util.List;
25-
import java.util.ListIterator;
26-
import java.util.Set;
27-
import java.util.function.Consumer;
28-
2922
import com.cleanroommc.modularui.core.ModularUICore;
3023

3124
import com.google.common.collect.Lists;
@@ -42,7 +35,20 @@
4235
import org.objectweb.asm.tree.MethodInsnNode;
4336
import org.objectweb.asm.tree.MethodNode;
4437

38+
import java.io.IOException;
39+
import java.io.InputStream;
40+
import java.util.List;
41+
import java.util.ListIterator;
42+
import java.util.Set;
43+
import java.util.function.Consumer;
44+
45+
/**
46+
* This class only exists for compatibility with AE2. Remove once
47+
* <a href="https://github.com/AE2-UEL/Applied-Energistics-2/pull/572">AE2-UEL#572</a> is merged.
48+
*/
49+
@Deprecated
4550
public class ClassSplicer {
51+
4652
public static byte[] processNode(byte[] data, Consumer<ClassNode> classNodeConsumer) {
4753
ClassReader reader = new ClassReader(data);
4854
ClassNode nodeOrig = new ClassNode();
@@ -61,7 +67,6 @@ public static void spliceClasses(final ClassNode data, final String className, f
6167
}
6268
}
6369

64-
6570
public static void spliceClasses(final ClassNode nodeData, final byte[] dataSplice, final String className, final String... methods) {
6671
// System.out.println("Splicing from " + className + " to " + targetClassName)
6772
if (dataSplice == null) {
@@ -96,18 +101,15 @@ public String map(final String name) {
96101
boolean added = false;
97102

98103
for (int j = 0; j < nodeData.methods.size(); j++) {
99-
if (nodeData.methods.get(j).name.equals(mn.name)
100-
&& nodeData.methods.get(j).desc.equals(mn.desc)) {
104+
if (nodeData.methods.get(j).name.equals(mn.name) && nodeData.methods.get(j).desc.equals(mn.desc)) {
101105
MethodNode oldMn = nodeData.methods.get(j);
102106
System.out.println("Spliced in METHOD: " + targetClassName + "." + mn.name);
103107
nodeData.methods.set(j, mn);
104108
if (nodeData.name.equals(nodeSplice.superName)) {
105109
ListIterator<AbstractInsnNode> nodeListIterator = mn.instructions.iterator();
106110
while (nodeListIterator.hasNext()) {
107111
AbstractInsnNode node = nodeListIterator.next();
108-
if (node instanceof MethodInsnNode
109-
&& node.getOpcode() == Opcodes.INVOKESPECIAL) {
110-
MethodInsnNode methodNode = (MethodInsnNode) node;
112+
if (node instanceof MethodInsnNode methodNode && node.getOpcode() == Opcodes.INVOKESPECIAL) {
111113
if (targetClassName2.equals(methodNode.owner)) {
112114
methodNode.owner = nodeData.superName;
113115
}
@@ -152,6 +154,5 @@ public String map(final String name) {
152154
}
153155
}
154156
}
155-
156157
}
157158
}

src/main/java/com/cleanroommc/modularui/core/temp/PacketUtilPatch.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@
2626

2727
import io.netty.buffer.ByteBuf;
2828

29+
/**
30+
* This class only exists for compatibility with AE2. Remove once
31+
* <a href="https://github.com/AE2-UEL/Applied-Energistics-2/pull/572">AE2-UEL#572</a> is merged.
32+
*/
33+
@Deprecated
2934
public class PacketUtilPatch extends PacketBuffer {
3035

3136
public PacketUtilPatch(ByteBuf wrapped) {

0 commit comments

Comments
 (0)