Advertisement
Guest User

Untitled

a guest
Dec 29th, 2014
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.04 KB | None | 0 0
  1. public class SyntaxClassTransformer implements IClassTransformer {
  2.  
  3.     /*
  4.      * The vanilla method
  5.   public void a(iy paramiy)
  6.   {
  7.     ig.a(paramiy, this, this.f);
  8.     String[] arrayOfString = paramiy.a();
  9.  
  10.     if ((this.f.m instanceof bvx)) {
  11.       bvx localbvx = (bvx)this.f.m;
  12.  
  13.       localbvx.a(arrayOfString);
  14.     }
  15.   }
  16.      */
  17.  
  18.  
  19.     @Override
  20.     public byte[] transform(String name, String transformedName,
  21.             byte[] basicClass) {
  22.         try {
  23.             if(name.equals("cee")) { //TODO: get obfus name
  24.                 return patchClass(name, basicClass, true);
  25.             }
  26.             else if(name.equals("net.minecraft.client.network.NetHandlerPlayClient")) {
  27.                 return patchClass(name, basicClass, false);
  28.             }
  29.         } catch(Exception e) {
  30.             e.printStackTrace();
  31.         }
  32.         return basicClass;
  33.     }
  34.  
  35.     private byte[] patchClass(String name, byte[] bytes, boolean obfuscated) throws NotFoundException, CannotCompileException, IOException {
  36.         System.out.println("Inside class "+name);
  37.         ClassPool cp = ClassPool.getDefault();
  38.         CtClass cc = cp.get(name);
  39.  
  40.         String packetClassName = S3APacketTabComplete.class.getName(); //TODO: Works with obfuscation?
  41.         CtClass packetClass = cp.get(packetClassName);
  42.        
  43.         String methodName = obfuscated ? "a" : "handleTabComplete";
  44.         CtMethod cm = cc.getDeclaredMethod(methodName, new CtClass[]{packetClass});
  45.    
  46.         int lineNum = 10;
  47.        
  48.         String toAdd = "if($0.gameController.currentScreen instanceof eu.crushedpixel.commandsyntax.gui.GuiSyntaxCommandBlock) { "
  49.                 + "eu.crushedpixel.commandsyntax.gui.GuiSyntaxCommandBlock guiCMD = (eu.crushedpixel.commandsyntax.gui.GuiSyntaxCommandBlock)$0.gameController.currentScreen;"
  50.                 + "guiCMD.onAutocompleteResponse(packetIn.func_149630_c());"
  51.                 + "}";
  52.        
  53.         if(obfuscated) toAdd = "if($0.f.m instanceof bvx)) {"
  54.                 + "eu.crushedpixel.commandsyntax.gui.GuiSyntaxCommandBlock guiCMD = (eu.crushedpixel.commandsyntax.gui.GuiSyntaxCommandBlock)$0.f.m;"
  55.                 + "guiCMD.onAutocompleteResponse(paramiy.a());"
  56.                 + "}";
  57.  
  58.  
  59.         cm.insertAt(lineNum, toAdd);
  60.  
  61.         cc.writeFile();
  62.         return cc.toBytecode();
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement