Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.38 KB | None | 0 0
  1.  
  2. import java.lang.reflect.InvocationTargetException;
  3. import java.lang.reflect.Method;
  4. import java.util.ArrayList;
  5. import java.util.Set;
  6.  
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.Material;
  9. import org.bukkit.inventory.ItemStack;
  10.  
  11. public class NBTTools {
  12.  
  13.     @SuppressWarnings("rawtypes")
  14.     private Class craftItemStackClass;
  15.     private Method craftItemStackAsNMSCopyMethod;
  16.     private Method craftItemStackAsCraftMirrorMethod;
  17.     private Method nmsItemStackGetNameMethod;
  18.     private Method nmsItemStackGetTagMethod;
  19.     private Method nmsItemStackSetTagMethod;
  20.     private Method nbtTagCompoundHasKeyMethod;
  21.     private Method nbtTagCompoundCMethod;
  22.     private Method nbtTagCompoundSetMethod;
  23.     private Method nbtTagCompoundGetCompoundMethod;
  24.     private Method nbtTagCompoundSetStringMethod;
  25.     private Method nbtTagCompoundGetStringMethod;
  26.     private Method nbtTagCompoundSetIntMethod;
  27.     private Method nbtTagCompoundGetIntMethod;
  28.     private Method nbtTagCompoundSetDoubleMethod;
  29.     private Method nbtTagCompoundGetDoubleMethod;
  30.     private Method nbtTagCompoundSetBooleanMethod;
  31.     private Method nbtTagCompoundGetBooleanMethod;
  32.     @SuppressWarnings("rawtypes")
  33.     private Class nbtTagCompound;
  34.     private boolean loadedSuccessfully = false;
  35.  
  36.     @SuppressWarnings("unchecked")
  37.     public NBTTools() {
  38.  
  39.         try {
  40.             String version = Bukkit.getServer().getClass().getPackage().getName();
  41.             version = version.substring(version.lastIndexOf(".") + 1, version.length());
  42.             craftItemStackClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
  43.             nbtTagCompound = Class.forName("net.minecraft.server." + version + ".NBTTagCompound");
  44.             Object nbtTag = nbtTagCompound.newInstance();
  45.             @SuppressWarnings("rawtypes")
  46.             Class nbtBase = Class.forName("net.minecraft.server." + version + ".NBTBase");
  47.             craftItemStackAsNMSCopyMethod = craftItemStackClass.getMethod("asNMSCopy", ItemStack.class);
  48.             ItemStack bukkitItemStack = new ItemStack(Material.COBBLESTONE, 1);
  49.             Object nmsItemStack = craftItemStackAsNMSCopyMethod.invoke(craftItemStackClass, bukkitItemStack);
  50.             craftItemStackAsCraftMirrorMethod = craftItemStackClass.getMethod("asCraftMirror", nmsItemStack.getClass());
  51.             nmsItemStackGetNameMethod = nmsItemStack.getClass().getMethod("getName");
  52.             nmsItemStackGetTagMethod = nmsItemStack.getClass().getMethod("getTag");
  53.             nmsItemStackSetTagMethod = nmsItemStack.getClass().getMethod("setTag", nbtTag.getClass());
  54.             nbtTagCompoundHasKeyMethod = nbtTag.getClass().getMethod("hasKey", String.class);
  55.             nbtTagCompoundCMethod = nbtTag.getClass().getMethod("c");
  56.             nbtTagCompoundSetMethod = nbtTag.getClass().getMethod("set", String.class, nbtBase);
  57.             nbtTagCompoundGetCompoundMethod = nbtTag.getClass().getMethod("getCompound", String.class);
  58.             nbtTagCompoundSetStringMethod = nbtTag.getClass().getMethod("setString", String.class, String.class);
  59.             nbtTagCompoundGetStringMethod = nbtTag.getClass().getMethod("getString", String.class);
  60.             nbtTagCompoundSetIntMethod = nbtTag.getClass().getMethod("setInt", String.class, int.class);
  61.             nbtTagCompoundGetIntMethod = nbtTag.getClass().getMethod("getInt", String.class);
  62.             nbtTagCompoundSetDoubleMethod = nbtTag.getClass().getMethod("setDouble", String.class, double.class);
  63.             nbtTagCompoundGetDoubleMethod = nbtTag.getClass().getMethod("getDouble", String.class);
  64.             nbtTagCompoundSetBooleanMethod = nbtTag.getClass().getMethod("setBoolean", String.class, boolean.class);
  65.             nbtTagCompoundGetBooleanMethod = nbtTag.getClass().getMethod("getBoolean", String.class);
  66.             loadedSuccessfully = true;
  67.         } catch (Exception e) {
  68.             e.printStackTrace();
  69.         }
  70.     }
  71.  
  72.     public boolean loadedSuccessfully() {
  73.         return loadedSuccessfully;
  74.     }
  75.  
  76.     public boolean hasKey(ItemStack itemStack, String key) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
  77.         Object nmsItemStack = getNMSItemStack(itemStack);
  78.         if (nmsItemStack == null) return false;
  79.         Object nbtTag = getNBTTag(nmsItemStack);
  80.         if (nbtTag == null) return false;
  81.         return (Boolean) nbtTagCompoundHasKeyMethod.invoke(nbtTag, key);
  82.     }
  83.     @SuppressWarnings("unchecked")
  84.     public ArrayList<String> getNMSKeys(ItemStack itemStack) {
  85.         try {
  86.             Object nmsItemStack = getNMSItemStack(itemStack);
  87.             if (nmsItemStack == null) return new ArrayList<String>();
  88.             Object nbtTag = getNBTTag(nmsItemStack);
  89.             if (nbtTag == null) return new ArrayList<String>();
  90.             Set<String> tags = (Set<String>) nbtTagCompoundCMethod.invoke(nbtTag);
  91.             ArrayList<String> tagArray = new ArrayList<String>(tags);
  92.             return tagArray;
  93.         } catch (Exception e) {
  94.             e.printStackTrace();
  95.             return new ArrayList<String>();
  96.         }
  97.  
  98.     }
  99.    
  100.    
  101.     public Object getNMSItemStack(ItemStack itemStack) {
  102.         try {
  103.             return craftItemStackAsNMSCopyMethod.invoke(craftItemStackClass, itemStack);
  104.         } catch (Exception e) {
  105.             e.printStackTrace();
  106.             return null;
  107.         }
  108.     }
  109.     public ItemStack getBukkitItemStack(Object nmsItemStack) {
  110.         try {
  111.             return (ItemStack) craftItemStackAsCraftMirrorMethod.invoke(craftItemStackClass, nmsItemStack);
  112.         } catch (Exception e) {
  113.             e.printStackTrace();
  114.             return null;
  115.         }
  116.     }
  117.    
  118.     public Object getNBTTag(Object nmsItemStack) {
  119.         try {
  120.             return nmsItemStackGetTagMethod.invoke(nmsItemStack);
  121.         } catch (Exception e) {
  122.             e.printStackTrace();
  123.             return null;
  124.         }
  125.     }
  126.     public void setNBTTag(Object nmsItemStack, Object nbtTag) {
  127.         try {
  128.             nmsItemStackSetTagMethod.invoke(nmsItemStack, nbtTag);
  129.         } catch (Exception e) {
  130.             e.printStackTrace();
  131.         }
  132.     }
  133.     public Object generateNBTTag() {
  134.         try {
  135.             return nbtTagCompound.newInstance();
  136.         } catch (Exception e) {
  137.             e.printStackTrace();
  138.             return null;
  139.         }
  140.     }
  141.    
  142.    
  143.    
  144.    
  145.    
  146.    
  147.    
  148.     public Object getNBTTagCompoundCompound(Object nbtTag, String key) {
  149.         try {
  150.             return nbtTagCompoundGetCompoundMethod.invoke(nbtTag, key);
  151.         } catch (Exception e) {
  152.             e.printStackTrace();
  153.             return null;
  154.         }
  155.     }
  156.     public void setNBTTagCompoundCompound(Object nbtTag, String key, Object nestedTag) {
  157.         try {
  158.             nbtTagCompoundSetMethod.invoke(nbtTag, key, nestedTag);
  159.         } catch (Exception e) {
  160.             e.printStackTrace();
  161.         }
  162.     }
  163.    
  164.     public String getNBTTagCompoundString(Object nbtTag, String key) {
  165.         try {
  166.             return (String) nbtTagCompoundGetStringMethod.invoke(nbtTag, key);
  167.         } catch (Exception e) {
  168.             e.printStackTrace();
  169.             return null;
  170.         }
  171.     }
  172.     public void setNBTTagCompoundString(Object nbtTag, String key, String s) {
  173.         try {
  174.             nbtTagCompoundSetStringMethod.invoke(nbtTag, key, s);
  175.         } catch (Exception e) {
  176.             e.printStackTrace();
  177.         }
  178.     }
  179.    
  180.     public Integer getNBTTagCompoundInt(Object nbtTag, String key) {
  181.         try {
  182.             return (Integer) nbtTagCompoundGetIntMethod.invoke(nbtTag, key);
  183.         } catch (Exception e) {
  184.             e.printStackTrace();
  185.             return null;
  186.         }
  187.     }
  188.     public void setNBTTagCompoundInt(Object nbtTag, String key, Integer i) {
  189.         try {
  190.             nbtTagCompoundSetIntMethod.invoke(nbtTag, key, i);
  191.         } catch (Exception e) {
  192.             e.printStackTrace();
  193.         }
  194.     }
  195.    
  196.    
  197.     public Double getNBTTagCompoundDouble(Object nbtTag, String key) {
  198.         try {
  199.             return (Double) nbtTagCompoundGetDoubleMethod.invoke(nbtTag, key);
  200.         } catch (Exception e) {
  201.             e.printStackTrace();
  202.             return null;
  203.         }
  204.     }
  205.     public void setNBTTagCompoundDouble(Object nbtTag, String key, Double d) {
  206.         try {
  207.             nbtTagCompoundSetDoubleMethod.invoke(nbtTag, key, d);
  208.         } catch (Exception e) {
  209.             e.printStackTrace();
  210.         }
  211.     }
  212.    
  213.     public Boolean getNBTTagCompoundBoolean(Object nbtTag, String key) {
  214.         try {
  215.             return (Boolean) nbtTagCompoundGetBooleanMethod.invoke(nbtTag, key);
  216.         } catch (Exception e) {
  217.             e.printStackTrace();
  218.             return null;
  219.         }
  220.     }
  221.     public void setNBTTagCompoundBoolean(Object nbtTag, String key, Boolean b) {
  222.         try {
  223.             nbtTagCompoundSetBooleanMethod.invoke(nbtTag, key, b);
  224.         } catch (Exception e) {
  225.             e.printStackTrace();
  226.         }
  227.     }
  228.    
  229.    
  230.    
  231.     public Object getCompound(ItemStack itemStack, String key) {
  232.         Object nmsItemStack = getNMSItemStack(itemStack);
  233.         if (nmsItemStack == null) return null;
  234.         Object nbtTag = getNBTTag(nmsItemStack);
  235.         if (nbtTag == null) return null;
  236.         return getNBTTagCompoundCompound(nbtTag, key);
  237.     }
  238.     public ItemStack setCompound(ItemStack itemStack, String key, Object c) {
  239.         Object nmsItemStack = getNMSItemStack(itemStack);
  240.         if (nmsItemStack == null) return null;
  241.         Object nbtTag = getNBTTag(nmsItemStack);
  242.         if (nbtTag == null) nbtTag = generateNBTTag();
  243.         setNBTTagCompoundCompound(nbtTag, key, c);
  244.         setNBTTag(nmsItemStack, nbtTag);
  245.         return getBukkitItemStack(nmsItemStack);
  246.     }
  247.    
  248.     public String getString(ItemStack itemStack, String key) {
  249.         Object nmsItemStack = getNMSItemStack(itemStack);
  250.         if (nmsItemStack == null) return null;
  251.         Object nbtTag = getNBTTag(nmsItemStack);
  252.         if (nbtTag == null) return null;
  253.         return getNBTTagCompoundString(nbtTag, key);
  254.     }
  255.     public ItemStack setString(ItemStack itemStack, String key, String s) {
  256.         Object nmsItemStack = getNMSItemStack(itemStack);
  257.         if (nmsItemStack == null) return null;
  258.         Object nbtTag = getNBTTag(nmsItemStack);
  259.         if (nbtTag == null) nbtTag = generateNBTTag();
  260.         setNBTTagCompoundString(nbtTag, key, s);
  261.         setNBTTag(nmsItemStack, nbtTag);
  262.         return getBukkitItemStack(nmsItemStack);
  263.     }
  264.    
  265.     public Integer getInt(ItemStack itemStack, String key) {
  266.         Object nmsItemStack = getNMSItemStack(itemStack);
  267.         if (nmsItemStack == null) return null;
  268.         Object nbtTag = getNBTTag(nmsItemStack);
  269.         if (nbtTag == null) return null;
  270.         return getNBTTagCompoundInt(nbtTag, key);
  271.     }
  272.     public ItemStack setInt(ItemStack itemStack, String key, Integer i) {
  273.         Object nmsItemStack = getNMSItemStack(itemStack);
  274.         if (nmsItemStack == null) return null;
  275.         Object nbtTag = getNBTTag(nmsItemStack);
  276.         if (nbtTag == null) nbtTag = generateNBTTag();
  277.         setNBTTagCompoundInt(nbtTag, key, i);
  278.         setNBTTag(nmsItemStack, nbtTag);
  279.         return getBukkitItemStack(nmsItemStack);
  280.     }
  281.  
  282.     public Double getDouble(ItemStack itemStack, String key) {
  283.         Object nmsItemStack = getNMSItemStack(itemStack);
  284.         if (nmsItemStack == null) return null;
  285.         Object nbtTag = getNBTTag(nmsItemStack);
  286.         if (nbtTag == null) return null;
  287.         return getNBTTagCompoundDouble(nbtTag, key);
  288.     }
  289.     public ItemStack setDouble(ItemStack itemStack, String key, Double d) {
  290.         Object nmsItemStack = getNMSItemStack(itemStack);
  291.         if (nmsItemStack == null) return null;
  292.         Object nbtTag = getNBTTag(nmsItemStack);
  293.         if (nbtTag == null) nbtTag = generateNBTTag();
  294.         setNBTTagCompoundDouble(nbtTag, key, d);
  295.         setNBTTag(nmsItemStack, nbtTag);
  296.         return getBukkitItemStack(nmsItemStack);
  297.     }
  298.  
  299.     public Boolean getBoolean(ItemStack itemStack, String key) {
  300.         Object nmsItemStack = getNMSItemStack(itemStack);
  301.         if (nmsItemStack == null) return null;
  302.         Object nbtTag = getNBTTag(nmsItemStack);
  303.         if (nbtTag == null) return null;
  304.         return getNBTTagCompoundBoolean(nbtTag, key);
  305.     }
  306.     public ItemStack setBoolean(ItemStack itemStack, String key, Boolean b) {
  307.         Object nmsItemStack = getNMSItemStack(itemStack);
  308.         if (nmsItemStack == null) return null;
  309.         Object nbtTag = getNBTTag(nmsItemStack);
  310.         if (nbtTag == null) nbtTag = generateNBTTag();
  311.         setNBTTagCompoundBoolean(nbtTag, key, b);
  312.         setNBTTag(nmsItemStack, nbtTag);
  313.         return getBukkitItemStack(nmsItemStack);
  314.     }
  315.  
  316.  
  317.    
  318.    
  319.     public String getMobEggType(ItemStack itemStack) {
  320.         Object nmsItemStack = getNMSItemStack(itemStack);
  321.         if (nmsItemStack == null) return null;
  322.         Object nbtTag = getNBTTag(nmsItemStack);
  323.         if (nbtTag == null) return null;
  324.         Object entityTag = getNBTTagCompoundCompound(nbtTag, "EntityTag");
  325.         if (entityTag == null) return null;
  326.         return getNBTTagCompoundString(entityTag, "id");
  327.     }
  328.     public ItemStack setMobEggType(ItemStack itemStack, String type) {
  329.         Object nmsItemStack = getNMSItemStack(itemStack);
  330.         if (nmsItemStack == null) return null;
  331.         Object nbtTag = getNBTTag(nmsItemStack);
  332.         if (nbtTag == null) nbtTag = generateNBTTag();
  333.         Object entityTag = getNBTTagCompoundCompound(nbtTag, "EntityTag");
  334.         if (entityTag == null) entityTag = generateNBTTag();
  335.         setNBTTagCompoundString(entityTag, "id", type);
  336.         setNBTTagCompoundCompound(nbtTag, "EntityTag", entityTag);
  337.         setNBTTag(nmsItemStack, nbtTag);
  338.         return getBukkitItemStack(nmsItemStack);
  339.     }
  340.    
  341.    
  342.     public String getName(ItemStack itemStack) {
  343.         try {
  344.             Object nmsItemStack = getNMSItemStack(itemStack);
  345.             if (nmsItemStack == null) return null;
  346.             return (String) nmsItemStackGetNameMethod.invoke(nmsItemStack);
  347.         } catch (Exception e) {
  348.             e.printStackTrace();
  349.             return null;
  350.         }
  351.     }
  352.  
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement