33import java .util .ListIterator ;
44import net .minecraft .launchwrapper .IClassTransformer ;
55import org .objectweb .asm .Opcodes ;
6+ import org .objectweb .asm .Type ;
67import org .objectweb .asm .tree .AbstractInsnNode ;
78import org .objectweb .asm .tree .ClassNode ;
89import org .objectweb .asm .tree .FieldInsnNode ;
@@ -13,15 +14,20 @@ public class ClassTransformer implements IClassTransformer {
1314
1415 @ Override
1516 public byte [] transform (String name , String transformedName , byte [] bytes ) {
16- if (bytes != null && name .equals ("net.minecraftforge.fml.common.network.NetworkRegistry" )) {
17- return redirectSideValues (bytes );
17+ if (bytes != null ) {
18+ if (name .equals ("net.minecraftforge.fml.common.network.NetworkRegistry" ) ||
19+ name .equals ("net.minecraftforge.fml.common.network.internal.FMLMessage" )) {
20+ return redirectSideValues (bytes );
21+ }
1822 }
1923
2024 return bytes ;
2125 }
2226
2327 private byte [] redirectSideValues (byte [] bytes ) {
2428 ClassNode clazz = ASMHelper .readClass (bytes );
29+ Type sideType = ASMHelper .objectType ("net.minecraftforge.fml.relauncher.Side" );
30+ Type constantsType = ASMHelper .objectType ("me.theandrey.mods.sidefix.Constants" );
2531 boolean patched = false ;
2632
2733 for (MethodNode method : clazz .methods ) {
@@ -33,8 +39,9 @@ private byte[] redirectSideValues(byte[] bytes) {
3339 if (node .getOpcode () == Opcodes .INVOKESTATIC ) {
3440 MethodInsnNode methodNode = (MethodInsnNode )node ;
3541
36- if (methodNode .owner .equals ("net/minecraftforge/fml/relauncher/Side" ) && methodNode .name .equals ("values" )) {
37- FieldInsnNode fieldNode = new FieldInsnNode (Opcodes .GETSTATIC , "me/theandrey/mods/sidefix/LoadingPlugin" , "VALID_SIDES" , "[Lnet/minecraftforge/fml/relauncher/Side;" );
42+ if (methodNode .owner .equals (sideType .getInternalName ()) && methodNode .name .equals ("values" )) {
43+ // We can not modify Side class, so redirect values() call to constant.
44+ FieldInsnNode fieldNode = new FieldInsnNode (Opcodes .GETSTATIC , constantsType .getInternalName (), "SIDES" , ASMHelper .arrayType (sideType ).getDescriptor ());
3845 iterator .set (fieldNode );
3946 patched = true ;
4047
0 commit comments