Guest User

Untitled

a guest
May 2nd, 2020
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.70 KB | None | 0 0
  1. package your.package
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.DataInputStream;
  6. import java.io.DataOutput;
  7. import java.io.DataOutputStream;
  8. import java.lang.reflect.Constructor;
  9. import java.lang.reflect.InvocationTargetException;
  10. import java.math.BigInteger;
  11.  
  12. import org.bukkit.Bukkit;
  13. import org.bukkit.inventory.ItemStack;
  14.  
  15. public class Conversor {
  16.  
  17.     public static ItemStack deserializeItemStack(String data){
  18.         ByteArrayInputStream inputStream = new ByteArrayInputStream(new BigInteger(data, 32).toByteArray());
  19.         DataInputStream dataInputStream = new DataInputStream(inputStream);
  20.        
  21.         ItemStack itemStack = null;
  22.         try {
  23.             Class<?> nbtTagCompoundClass = getNMSClass("NBTTagCompound");
  24.             Class<?> nmsItemStackClass = getNMSClass("ItemStack");
  25.             Object nbtTagCompound = getNMSClass("NBTCompressedStreamTools").getMethod("a", DataInputStream.class).invoke(null, dataInputStream);
  26.             //Object nbtTagCompound = getNMSClass("NBTCompressedStreamTools").getMethod("a", DataInputStream.class).invoke(null, inputStream);
  27.             Object craftItemStack = nmsItemStackClass.getMethod("createStack", nbtTagCompoundClass).invoke(null, nbtTagCompound);
  28.             itemStack = (ItemStack) getOBClass("inventory.CraftItemStack").getMethod("asBukkitCopy", nmsItemStackClass).invoke(null, craftItemStack);
  29.         } catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
  30.             e.printStackTrace();
  31.         }
  32.      
  33.         return itemStack;
  34.     }
  35.    
  36.     public static String serializeItemStack(ItemStack item) {
  37.         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  38.         DataOutputStream dataOutput = new DataOutputStream(outputStream);
  39.        
  40.         try {
  41.             Class<?> nbtTagCompoundClass = getNMSClass("NBTTagCompound");
  42.             Constructor<?> nbtTagCompoundConstructor = nbtTagCompoundClass.getConstructor();
  43.             Object nbtTagCompound = nbtTagCompoundConstructor.newInstance();
  44.             Object nmsItemStack = getOBClass("inventory.CraftItemStack").getMethod("asNMSCopy", ItemStack.class).invoke(null, item);
  45.             getNMSClass("ItemStack").getMethod("save", nbtTagCompoundClass).invoke(nmsItemStack, nbtTagCompound);
  46.             getNMSClass("NBTCompressedStreamTools").getMethod("a", nbtTagCompoundClass, DataOutput.class).invoke(null, nbtTagCompound, (DataOutput)dataOutput);
  47.  
  48.         } catch (SecurityException | NoSuchMethodException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
  49.             e.printStackTrace();
  50.         }
  51.      
  52.         //return BaseEncoding.base64().encode(outputStream.toByteArray());
  53.         return new BigInteger(1, outputStream.toByteArray()).toString(32);
  54.     }
  55.    
  56.        private static Class<?> getNMSClass(String name) {
  57.            String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
  58.            try {
  59.                return Class.forName("net.minecraft.server." + version + "." + name);
  60.            } catch (ClassNotFoundException var3) {
  61.                var3.printStackTrace();
  62.                return null;
  63.            }
  64.        }
  65.      
  66.        private static Class<?> getOBClass(String name) {
  67.            String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
  68.            try {
  69.                return Class.forName("org.bukkit.craftbukkit." + version + "." + name);
  70.            } catch (ClassNotFoundException var3) {
  71.                var3.printStackTrace();
  72.                return null;
  73.            }
  74.        }
  75.      
  76. }
Advertisement
Add Comment
Please, Sign In to add comment