Advertisement
bobmarley12345

Forge class transform bytecode dump

Jan 5th, 2022
836
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.45 KB | None | 0 0
  1. package reghzy.mods.shiftsprint;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.lang.reflect.Field;
  9. import java.util.ArrayList;
  10. import net.minecraft.launchwrapper.IClassTransformer;
  11. import net.minecraft.launchwrapper.LaunchClassLoader;
  12.  
  13. public class TransformerA implements IClassTransformer {
  14.     public static final String PATH = "F:\\TEMPPP\\";
  15.     public static boolean reInit = false;
  16.  
  17.     public TransformerA() {
  18.         System.out.println("TransformerA loaded");
  19.     }
  20.  
  21.     public static File getFileForClass(String clazz, boolean create) throws IOException {
  22.         int last = clazz.lastIndexOf(46);
  23.         if (last == -1) {
  24.             return new File("F:\\TEMPPP\\" + clazz);
  25.         } else {
  26.             File folder = new File("F:\\TEMPPP\\" + clazz.substring(0, last).replace('.', '\\'));
  27.             if (create) {
  28.                 folder.mkdirs();
  29.             }
  30.  
  31.             File file = new File(folder, clazz.substring(last + 1) + ".class");
  32.             if (create) {
  33.                 file.createNewFile();
  34.             }
  35.  
  36.             return file;
  37.         }
  38.     }
  39.  
  40.     public byte[] transform(String from, String to, byte[] bytes) {
  41.         if (!to.startsWith("net") && !to.startsWith("cpw")) {
  42.             return bytes;
  43.         } else if (!reInit) {
  44.             reInit = true;
  45.             System.out.println("Re-registering transformer for latest updates");
  46.             LaunchClassLoader loader = (LaunchClassLoader)ShiftSprint.class.getClassLoader();
  47.  
  48.             try {
  49.                 Field field = LaunchClassLoader.class.getDeclaredField("transformers");
  50.                 field.setAccessible(true);
  51.                 ArrayList<IClassTransformer> transformers = (ArrayList)field.get(loader);
  52.                 Field elementDataField = ArrayList.class.getDeclaredField("elementData");
  53.                 elementDataField.setAccessible(true);
  54.                 Object[] data = (Object[])((Object[])elementDataField.get(transformers));
  55.                 int len = transformers.size();
  56.  
  57.                 for(int i = 0; i < len; ++i) {
  58.                     if (data[i] == this) {
  59.                         data[i] = data[len - 1];
  60.                         data[len - 1] = new TransformerA();
  61.                         return ((IClassTransformer)data[i]).transform(from, to, bytes);
  62.                     }
  63.                 }
  64.             } catch (NoSuchFieldException var24) {
  65.                 var24.printStackTrace();
  66.             } catch (IllegalAccessException var25) {
  67.                 var25.printStackTrace();
  68.             }
  69.  
  70.             return bytes;
  71.         } else {
  72.             File file;
  73.             try {
  74.                 file = getFileForClass(to, true);
  75.             } catch (IOException var23) {
  76.                 var23.printStackTrace();
  77.                 return bytes;
  78.             }
  79.  
  80.             try {
  81.                 BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
  82.  
  83.                 byte[] var7;
  84.                 try {
  85.                     System.out.println("Writing class '" + to + "' to file: " + file.getAbsolutePath());
  86.                     outputStream.write(bytes);
  87.                     outputStream.flush();
  88.                     System.out.println("Success!");
  89.                     byte[] var6 = bytes;
  90.                     return var6;
  91.                 } catch (IOException var26) {
  92.                     System.out.println("Failed to write bytes to " + file.getAbsolutePath());
  93.                     var26.printStackTrace();
  94.                     var7 = bytes;
  95.                 } finally {
  96.                     try {
  97.                         outputStream.close();
  98.                     } catch (IOException var22) {
  99.                         System.out.println("Failed to close stream for FileOutputStream to " + file.getAbsolutePath());
  100.                         var22.printStackTrace();
  101.                     }
  102.  
  103.                 }
  104.  
  105.                 return var7;
  106.             } catch (FileNotFoundException var28) {
  107.                 var28.printStackTrace();
  108.                 if (var28.getCause() != null) {
  109.                     var28.getCause().printStackTrace();
  110.                     if (var28.getCause().getCause() != null) {
  111.                         var28.getCause().getCause().printStackTrace();
  112.                     }
  113.                 }
  114.  
  115.                 return bytes;
  116.             }
  117.         }
  118.     }
  119. }
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement