Advertisement
Guest User

ActionBar

a guest
Aug 17th, 2017
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.55 KB | None | 0 0
  1. package net.lippz.staffmanager.statsview;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Method;
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.entity.Player;
  7.  
  8. public class ActionBar
  9. {
  10.   private static Class<?> CRAFTPLAYERCLASS;
  11.   private static Class<?> PACKET_PLAYER_CHAT_CLASS;
  12.   private static Class<?> ICHATCOMP;
  13.   private static Class<?> CHATMESSAGE;
  14.   private static Class<?> PACKET_CLASS;
  15.   private static Constructor<?> PACKET_PLAYER_CHAT_CONSTRUCTOR;
  16.   private static Constructor<?> CHATMESSAGE_CONSTRUCTOR;
  17.   private static final String SERVER_VERSION;
  18.  
  19.   static
  20.   {
  21.     String name = Bukkit.getServer().getClass().getName();
  22.     name = name.substring(name.indexOf("craftbukkit.") + "craftbukkit.".length());
  23.     name = name.substring(0, name.indexOf("."));
  24.     SERVER_VERSION = name;
  25.     try
  26.     {
  27.       CRAFTPLAYERCLASS = Class.forName("org.bukkit.craftbukkit." + SERVER_VERSION + ".entity.CraftPlayer");
  28.       PACKET_PLAYER_CHAT_CLASS = Class.forName("net.minecraft.server." + SERVER_VERSION + ".PacketPlayOutChat");
  29.       PACKET_CLASS = Class.forName("net.minecraft.server." + SERVER_VERSION + ".Packet");
  30.       ICHATCOMP = Class.forName("net.minecraft.server." + SERVER_VERSION + ".IChatBaseComponent");
  31.       PACKET_PLAYER_CHAT_CONSTRUCTOR = PACKET_PLAYER_CHAT_CLASS.getConstructor(new Class[] { ICHATCOMP, Byte.TYPE });
  32.      
  33.       CHATMESSAGE = Class.forName("net.minecraft.server." + SERVER_VERSION + ".ChatMessage");
  34.      
  35.       CHATMESSAGE_CONSTRUCTOR = CHATMESSAGE.getDeclaredConstructor(new Class[] { String.class, Object[].class });
  36.     }
  37.     catch (Exception e)
  38.     {
  39.       e.printStackTrace();
  40.     }
  41.   }
  42.  
  43.   public static void sendActionBarMessage(Player player, String message)
  44.   {
  45.     try
  46.     {
  47.       Object icb = CHATMESSAGE_CONSTRUCTOR.newInstance(new Object[] { message, new Object[0] });
  48.      
  49.       Object packet = PACKET_PLAYER_CHAT_CONSTRUCTOR.newInstance(new Object[] { icb, Byte.valueOf((byte) 2) });
  50.      
  51.       Object craftplayerInst = CRAFTPLAYERCLASS.cast(player);
  52.      
  53.       Method methodHandle = CRAFTPLAYERCLASS.getMethod("getHandle", new Class[0]);
  54.      
  55.       Object methodhHandle = methodHandle.invoke(craftplayerInst, new Object[0]);
  56.      
  57.       Object playerConnection = methodhHandle.getClass().getField("playerConnection").get(methodhHandle);
  58.      
  59.       playerConnection.getClass().getMethod("sendPacket", new Class[] { PACKET_CLASS }).invoke(playerConnection, new Object[] { packet });
  60.     }
  61.     catch (Exception e)
  62.     {
  63.       e.printStackTrace();
  64.     }
  65.   }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement