JoaoRaphael

Untitled

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