-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPacketTransformer.java
More file actions
47 lines (37 loc) · 1.69 KB
/
PacketTransformer.java
File metadata and controls
47 lines (37 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.matt.packetlistener;
import com.matt.packetlistener.helper.IAsmTransformer;
import com.matt.packetlistener.patch.PatchNetManager;
import com.matt.packetlistener.patch.PatchNetManagerRun;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.tree.*;
import java.util.HashMap;
import java.util.Map;
public class PacketTransformer implements IClassTransformer {
private Map<String, IAsmTransformer> transformingClasses = new HashMap<String, IAsmTransformer>();
public PacketTransformer() {
transformingClasses.put("net.minecraft.network.NetworkManager", new PatchNetManager());
transformingClasses.put("net.minecraft.network.NetworkManager$4", new PatchNetManagerRun());
}
@Override
public byte[] transform(String name, String realName, byte[] bytes) {
if(transformingClasses.containsKey(realName)) {
try {
PacketCoreMod.logger.info("Transforming class " + realName);
ClassNode classNode = new ClassNode();
ClassReader classReader = new ClassReader(bytes);
classReader.accept(classNode, 0);
transformingClasses.get(realName).transform(classNode);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
classNode.accept(classWriter);
// let gc clean this up
transformingClasses.remove(realName);
return classWriter.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
}
return bytes;
}
}