Advertisement
Guest User

Untitled

a guest
Jul 7th, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. else if ((m.name.equals(targetMethod3Name) && m.desc
  2. .equals("(Ljava/awt/image/BufferedImage;)Ljava/awt/image/BufferedImage;"))) {
  3. System.out
  4. .println("********* [ImageBufferDowload] Inside target3 method!");
  5.  
  6. AbstractInsnNode currentNode = null;
  7. AbstractInsnNode targetNode = null;
  8. AbstractInsnNode targetNode2 = null;
  9.  
  10. @SuppressWarnings("unchecked")
  11. Iterator<AbstractInsnNode> iter = m.instructions.iterator();
  12. int index = -1;
  13. // On boucle jusqu'a trouver le premier bipush (16)
  14. while (iter.hasNext()) {
  15. index++;
  16. currentNode = iter.next();
  17. System.out.println(currentNode.getOpcode());
  18. // Found it! save the index location of instruction FDIV and
  19. // the node for this instruction
  20. if (currentNode.getOpcode() == BIPUSH) {
  21. targetNode = currentNode;
  22. targetNode2 = targetNode == null ? null : currentNode;
  23. bipush_index = index;
  24. if (targetNode != null && targetNode2 != null)
  25. break;
  26.  
  27. }
  28. }
  29.  
  30. // on créer les variables à supprimer pour la hauteur
  31. AbstractInsnNode remNode3 = m.instructions
  32. .get(bipush_index + 3);
  33. AbstractInsnNode remNode4 = m.instructions
  34. .get(bipush_index + 4);
  35.  
  36. // on les supprime
  37. m.instructions.remove(remNode3);
  38. m.instructions.remove(remNode4);
  39.  
  40. // on créer les instruction à insérer
  41. InsnList toInject2 = new InsnList();
  42. toInject2.add(new VarInsnNode(ALOAD, 1));
  43. toInject2.add(new MethodInsnNode(INVOKEVIRTUAL,
  44. "java/awt/image/BufferedImage", "getHeight", "()I"));
  45. toInject2.add(new FieldInsnNode(PUTFIELD,
  46. "net/minecraft/client/renderer/ImageBufferDownload",
  47. "imageHeight", "I"));
  48.  
  49. // on les insère
  50. m.instructions.insert(targetNode2, toInject2);
  51.  
  52. // on créer les variables à supprimer pour la largeur
  53. AbstractInsnNode remNode1 = m.instructions.get(bipush_index);
  54. AbstractInsnNode remNode2 = m.instructions
  55. .get(bipush_index + 1);
  56.  
  57. // on les supprime
  58. m.instructions.remove(remNode1);
  59. m.instructions.remove(remNode2);
  60.  
  61. // on créer les instruction à insérer
  62. InsnList toInject = new InsnList();
  63. toInject.add(new VarInsnNode(ALOAD, 1));
  64. toInject.add(new MethodInsnNode(INVOKEVIRTUAL,
  65. "java/awt/image/BufferedImage", "getWidth", "()I"));
  66. toInject.add(new FieldInsnNode(PUTFIELD,
  67. "net/minecraft/client/renderer/ImageBufferDownload",
  68. "imageWidth", "I"));
  69. // on les insère
  70. m.instructions.insert(targetNode, toInject);
  71. System.out
  72. .println("[ImageBufferDownload] Patching Method3 Complete!");
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement