Advertisement
broken-arrow

Untitled

Sep 17th, 2021 (edited)
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.00 KB | None | 0 0
  1. import lombok.SneakyThrows;
  2. import org.bukkit.Bukkit;
  3. import org.bukkit.Material;
  4. import org.bukkit.Server;
  5. import org.bukkit.entity.Player;
  6.  
  7. import java.lang.reflect.Constructor;
  8. import java.lang.reflect.Field;
  9. import java.lang.reflect.InvocationTargetException;
  10. import java.lang.reflect.Method;
  11.  
  12. import static org.mineacademy.fo.ReflectionUtil.getNMSClass;
  13.  
  14. public class UpdateTittleContainers {
  15.  
  16.     static Class<?> packetclass;
  17.     static Method handle;
  18.     static Field playerConaetion;
  19.     static Class<?> packettestr;
  20.  
  21.     public static void UpdateTittleContainerss() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException {
  22.         if (packetclass == null)
  23.             packetclass = Class.forName("net.minecraft.server.v1_16_R3.Packet");
  24.         if (handle == null)
  25.             handle = Class.forName("org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer").getMethod("getHandle");
  26.         if (playerConaetion == null)
  27.             playerConaetion = Class.forName("net.minecraft.server.v1_16_R3.EntityPlayer").getField("playerConnection");
  28.         if (packettestr == null)
  29.             packettestr = Class.forName("net.minecraft.server.v1_16_R3.PlayerConnection");
  30.     }
  31.  
  32.     @SneakyThrows
  33.     public static void update(Player p, String title, Material container, int inventorySize) {
  34.         UpdateTittleContainerss();
  35.         /*Containers<?> inventoryType = null;
  36.         EntityPlayer ep = ((CraftPlayer) p).getHandle();
  37.         IChatBaseComponent icbc = IChatBaseComponent.ChatSerializer.b("'" + title + "'");
  38.  
  39.         if (container == Material.HOPPER)
  40.             inventoryType = Containers.HOPPER;
  41.         if (container == Material.CHEST)
  42.             inventoryType = inventorySize == 9 ? Containers.GENERIC_9X1 : inventorySize == 9 * 2 ?
  43.                     Containers.GENERIC_9X2 : inventorySize == 9 * 3 ? Containers.GENERIC_9X3 : inventorySize == 9 * 4 ?
  44.                     Containers.GENERIC_9X4 : inventorySize == 9 * 5 ? Containers.GENERIC_9X5 : null;
  45.  
  46.         if (inventoryType != null) {
  47.             PacketPlayOutOpenWindow packet = new PacketPlayOutOpenWindow(ep.activeContainer.windowId, inventoryType, icbc);
  48.             ep.playerConnection.sendPacket((Packet<?>) packet);
  49.             ep.updateInventory(ep.activeContainer);
  50.         }*/
  51.         versionCheck(Bukkit.getServer(), p, title, container, inventorySize);
  52.     }
  53.  
  54.     public static void versionCheck(Server server, Player p, String title, Material container, int inventorySize) {
  55.  
  56.         System.out.println(Bukkit.getServer().getClass().getPackageName().split("\\.")[3]);
  57.  
  58.         try {
  59.  
  60.             Object player = p.getClass().getMethod("getHandle").invoke(p);
  61.             Object activeContainer = player.getClass().getField("activeContainer").get(player);
  62.             Object windowId = activeContainer.getClass().getField("windowId").get(activeContainer);
  63.  
  64.  
  65.             Class<?> tests1 = Class.forName("net.minecraft.server.v1_16_R3.IChatBaseComponent");
  66.  
  67.             Class<?> chatCompenent = Class.forName("net.minecraft.server.v1_16_R3.IChatBaseComponent$ChatSerializer");
  68.             Method declaredMethodChat = chatCompenent.getMethod("b", String.class);
  69.             Object inventoryTittle = declaredMethodChat.invoke(null, "'" + title + "'");
  70.  
  71.             Class<?> containerClass = Class.forName("net.minecraft.server.v1_16_R3.Containers");
  72.             Object inventoryType = null;
  73.             if (container == Material.HOPPER)
  74.                 inventoryType = containerClass.getField("HOPPER").get("HOPPER");
  75.             if (container == Material.CHEST)
  76.                 if (inventorySize % 9 == 0)
  77.                     inventoryType = containerClass.getField("GENERIC_9X" + inventorySize / 9).get(null);
  78.                 else
  79.                     inventoryType = containerClass.getField("GENERIC_9X3").get(null);
  80.             Constructor<?> PacketConstructor = Class.forName("net.minecraft.server.v1_16_R3.PacketPlayOutOpenWindow").getConstructor(int.class, containerClass, tests1);
  81.  
  82.             Object methods = PacketConstructor.newInstance(windowId, inventoryType, inventoryTittle);
  83.  
  84.             System.out.println("Iventory sise" + (5 % 9));
  85.  
  86.  
  87.         /*  Class<?> packetclass = Class.forName("net.minecraft.server.v1_16_R3.Packet");
  88.             Method handle = Class.forName("org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer").getMethod("getHandle");
  89.             Field playerConaetion = Class.forName("net.minecraft.server.v1_16_R3.EntityPlayer").getField("playerConnection");
  90.             Class<?> packettestr = Class.forName("net.minecraft.server.v1_16_R3.PlayerConnection");*/
  91.  
  92.             Object handles = handle.invoke(p);
  93.             Object playerconect = playerConaetion.get(handles);
  94.             Method packet1 = packettestr.getMethod("sendPacket", packetclass);
  95.  
  96.             packet1.invoke(playerconect, methods);
  97.             player.getClass().getMethod("updateInventory", getNMSClass("Container")).invoke(player, activeContainer);
  98.             //PacketPlayOutOpenWindow packet = new PacketPlayOutOpenWindow(ep.activeContainer.windowId, (Containers<?>) inventoryType, icbc);
  99.             System.out.println("handles " + handles + "inventory " + inventoryType + " windowsId " + windowId + " container " + container);
  100.             //System.out.println(Arrays.toString(new String[]{exemple.getDeclaredField("GENERIC_9X1").toString()}));
  101.  
  102.         } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InstantiationException | InvocationTargetException e) {
  103.             e.printStackTrace();
  104.         }
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement