Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import lombok.SneakyThrows;
- import org.bukkit.Bukkit;
- import org.bukkit.Material;
- import org.bukkit.entity.Player;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- public class UpdateTittleContainers {
- static Class<?> packetclass;
- static Method handle;
- static Field playerConnection;
- static Class<?> packetConnectionClass;
- static Class<?> chatBaseCompenent;
- static Class<?> chatCompenentSubClass;
- static Class<?> containersClass;
- static Class<?> containerClass;
- static Constructor<?> packetConstructor;
- public static void loadNmsClasses() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException {
- if (packetclass == null)
- packetclass = Class.forName(versionCheckNms("Packet"));
- if (handle == null)
- handle = Class.forName(versionCheckBukkit("entity.CraftPlayer")).getMethod("getHandle");
- if (playerConnection == null)
- playerConnection = Class.forName(versionCheckNms("EntityPlayer")).getField("playerConnection");
- if (packetConnectionClass == null)
- packetConnectionClass = Class.forName(versionCheckNms("PlayerConnection"));
- if (chatBaseCompenent == null)
- chatBaseCompenent = Class.forName(versionCheckNms("IChatBaseComponent"));
- if (containersClass == null)
- containersClass = Class.forName(versionCheckNms("Containers"));
- if (containerClass == null)
- containerClass = Class.forName(versionCheckNms("Container"));
- if (chatCompenentSubClass == null)
- chatCompenentSubClass = Class.forName(versionCheckNms("IChatBaseComponent$ChatSerializer"));
- if (packetConstructor == null)
- packetConstructor = Class.forName(versionCheckNms("PacketPlayOutOpenWindow")).getConstructor(int.class, containersClass, chatBaseCompenent);
- }
- @SneakyThrows
- public static void update(Player p, String title, Material container, int inventorySize) {
- loadNmsClasses();
- try {
- Object player = p.getClass().getMethod("getHandle").invoke(p);
- Object activeContainer = player.getClass().getField("activeContainer").get(player);
- Object windowId = activeContainer.getClass().getField("windowId").get(activeContainer);
- Method declaredMethodChat = chatCompenentSubClass.getMethod("b", String.class);
- Object inventoryTittle = declaredMethodChat.invoke(null, "'" + title + "'");
- Object inventoryType = null;
- if (container == Material.HOPPER)
- inventoryType = containersClass.getField("HOPPER").get(null);
- if (container == Material.CHEST)
- if (inventorySize % 9 == 0)
- inventoryType = containersClass.getField("GENERIC_9X" + inventorySize / 9).get(null);
- else
- inventoryType = containersClass.getField("GENERIC_9X3").get(null);
- Object methods = packetConstructor.newInstance(windowId, inventoryType, inventoryTittle);
- Object handles = handle.invoke(p);
- Object playerconect = playerConnection.get(handles);
- Method packet1 = packetConnectionClass.getMethod("sendPacket", packetclass);
- packet1.invoke(playerconect, methods);
- player.getClass().getMethod("updateInventory", containerClass).invoke(player, activeContainer);
- } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InstantiationException | InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- public static String versionCheckNms(String clazzName) {
- return "net.minecraft.server." + Bukkit.getServer().getClass().getPackageName().split("\\.")[3] + "." + clazzName;
- }
- public static String versionCheckBukkit(String clazzName) {
- return "org.bukkit.craftbukkit." + Bukkit.getServer().getClass().getPackageName().split("\\.")[3] + "." + clazzName;
- }
- }
Add Comment
Please, Sign In to add comment