broken-arrow

Untitled

Sep 17th, 2021 (edited)
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.68 KB | None | 0 0
  1. import lombok.SneakyThrows;
  2. import org.bukkit.Bukkit;
  3. import org.bukkit.Material;
  4. import org.bukkit.entity.Player;
  5.  
  6. import java.lang.reflect.Constructor;
  7. import java.lang.reflect.Field;
  8. import java.lang.reflect.InvocationTargetException;
  9. import java.lang.reflect.Method;
  10.  
  11. public class UpdateTittleContainers {
  12.  
  13.     static Class<?> packetclass;
  14.     static Method handle;
  15.     static Field playerConnection;
  16.     static Class<?> packetConnectionClass;
  17.     static Class<?> chatBaseCompenent;
  18.     static Class<?> chatCompenentSubClass;
  19.     static Class<?> containersClass;
  20.     static Class<?> containerClass;
  21.     static Constructor<?> packetConstructor;
  22.  
  23.     public static void loadNmsClasses() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException {
  24.  
  25.         if (packetclass == null)
  26.             packetclass = Class.forName(versionCheckNms("Packet"));
  27.         if (handle == null)
  28.             handle = Class.forName(versionCheckBukkit("entity.CraftPlayer")).getMethod("getHandle");
  29.         if (playerConnection == null)
  30.             playerConnection = Class.forName(versionCheckNms("EntityPlayer")).getField("playerConnection");
  31.         if (packetConnectionClass == null)
  32.             packetConnectionClass = Class.forName(versionCheckNms("PlayerConnection"));
  33.         if (chatBaseCompenent == null)
  34.             chatBaseCompenent = Class.forName(versionCheckNms("IChatBaseComponent"));
  35.         if (containersClass == null)
  36.             containersClass = Class.forName(versionCheckNms("Containers"));
  37.         if (containerClass == null)
  38.             containerClass = Class.forName(versionCheckNms("Container"));
  39.         if (chatCompenentSubClass == null)
  40.             chatCompenentSubClass = Class.forName(versionCheckNms("IChatBaseComponent$ChatSerializer"));
  41.         if (packetConstructor == null)
  42.             packetConstructor = Class.forName(versionCheckNms("PacketPlayOutOpenWindow")).getConstructor(int.class, containersClass, chatBaseCompenent);
  43.     }
  44.  
  45.     @SneakyThrows
  46.     public static void update(Player p, String title, Material container, int inventorySize) {
  47.         loadNmsClasses();
  48.  
  49.         try {
  50.  
  51.             Object player = p.getClass().getMethod("getHandle").invoke(p);
  52.             Object activeContainer = player.getClass().getField("activeContainer").get(player);
  53.             Object windowId = activeContainer.getClass().getField("windowId").get(activeContainer);
  54.  
  55.  
  56.             Method declaredMethodChat = chatCompenentSubClass.getMethod("b", String.class);
  57.             Object inventoryTittle = declaredMethodChat.invoke(null, "'" + title + "'");
  58.  
  59.             Object inventoryType = null;
  60.             if (container == Material.HOPPER)
  61.                 inventoryType = containersClass.getField("HOPPER").get(null);
  62.             if (container == Material.CHEST)
  63.                 if (inventorySize % 9 == 0)
  64.                     inventoryType = containersClass.getField("GENERIC_9X" + inventorySize / 9).get(null);
  65.                 else
  66.                     inventoryType = containersClass.getField("GENERIC_9X3").get(null);
  67.  
  68.             Object methods = packetConstructor.newInstance(windowId, inventoryType, inventoryTittle);
  69.  
  70.  
  71.             Object handles = handle.invoke(p);
  72.             Object playerconect = playerConnection.get(handles);
  73.             Method packet1 = packetConnectionClass.getMethod("sendPacket", packetclass);
  74.  
  75.             packet1.invoke(playerconect, methods);
  76.             player.getClass().getMethod("updateInventory", containerClass).invoke(player, activeContainer);
  77.  
  78.         } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InstantiationException | InvocationTargetException e) {
  79.             e.printStackTrace();
  80.         }
  81.  
  82.  
  83.     }
  84.  
  85.     public static String versionCheckNms(String clazzName) {
  86.        
  87.         return "net.minecraft.server." + Bukkit.getServer().getClass().getPackageName().split("\\.")[3] + "." + clazzName;
  88.     }
  89.  
  90.     public static String versionCheckBukkit(String clazzName) {
  91.        
  92.         return "org.bukkit.craftbukkit." + Bukkit.getServer().getClass().getPackageName().split("\\.")[3] + "." + clazzName;
  93.     }
  94.  
  95. }
Add Comment
Please, Sign In to add comment