Advertisement
Yazhog_g

Untitled

Mar 21st, 2020
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.83 KB | None | 0 0
  1. package fr.yazhog.lionhub.utils;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;
  6. import java.util.List;
  7.  
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.Location;
  10. import org.bukkit.World;
  11. import org.bukkit.entity.Player;
  12.  
  13. public class Holograms {
  14.  
  15.     private List<String> lines;
  16.     private Location loc;
  17.     private static final double ABS = 0.23D;
  18.     private static String path;
  19.     private static String version;
  20.  
  21.     static {
  22.         path = Bukkit.getServer().getClass().getPackage().getName();
  23.         version = path.substring(path.lastIndexOf(".")+1, path.length());
  24.     }
  25.  
  26.     public Holograms(Location loc, List<String> lines) {
  27.         this.lines = lines;
  28.         this.loc = loc;
  29.     }
  30.  
  31.     // Boolean successfully
  32.     public boolean display(Player p) {
  33.         Location displayLoc = loc.clone().add(0, (ABS * lines.size()) - 1.97D, 0);
  34.         for (int i = 0; i < lines.size(); i++) {
  35.             Object packet = this.getPacket(this.loc.getWorld(), displayLoc.getX(), displayLoc.getY(), displayLoc.getZ(), this.lines.get(i));
  36.             if (packet == null) return false;
  37.             this.sendPacket(p, packet);
  38.             displayLoc.add(0, -ABS, 0);
  39.         }
  40.  
  41.         return true;
  42.     }
  43.  
  44.     public Object getPacket(World w, double x, double y, double z, String text) {
  45.         try {
  46.             Class<?> armorStand = Class.forName("net.minecraft.server." + version + ".EntityArmorStand");
  47.             Class<?> worldClass = Class.forName("net.minecraft.server." + version + ".World");
  48.             Class<?> nmsEntity = Class.forName("net.minecraft.server." + version + ".Entity");
  49.             Class<?> craftWorld = Class.forName("org.bukkit.craftbukkit." + version + ".CraftWorld");
  50.             Class<?> packetClass = Class.forName("net.minecraft.server." + version + ".PacketPlayOutSpawnEntityLiving");
  51.             Class<?> entityLivingClass = Class.forName("net.minecraft.server." + version + ".EntityLiving");
  52.             Constructor<?> cww = armorStand.getConstructor(new Class<?>[] { worldClass });
  53.             Object craftWorldObj = craftWorld.cast(w);
  54.             Method getHandleMethod = craftWorldObj.getClass().getMethod("getHandle", new Class<?>[0]);
  55.             Object entityObject = cww.newInstance(new Object[] { getHandleMethod.invoke(craftWorldObj, new Object[0]) });
  56.             Method setCustomName = entityObject.getClass().getMethod("setCustomName", new Class<?>[] { String.class });
  57.             setCustomName.invoke(entityObject, new Object[] { text });
  58.             Method setCustomNameVisible = nmsEntity.getMethod("setCustomNameVisible", new Class[] { boolean.class });
  59.             setCustomNameVisible.invoke(entityObject, new Object[] { true });
  60.             Method setGravity = entityObject.getClass().getMethod("setGravity", new Class<?>[] { boolean.class });
  61.             setGravity.invoke(entityObject, new Object[] { false });
  62.             Method setLocation = entityObject.getClass().getMethod("setLocation", new Class<?>[] { double.class, double.class, double.class, float.class, float.class });
  63.             setLocation.invoke(entityObject, new Object[] { x, y, z, 0.0F, 0.0F });
  64.             Method setInvisible = entityObject.getClass().getMethod("setInvisible", new Class<?>[] { boolean.class });
  65.             setInvisible.invoke(entityObject, new Object[] { true });
  66.             Constructor<?> cw = packetClass.getConstructor(new Class<?>[] { entityLivingClass });
  67.             Object packetObject = cw.newInstance(new Object[] { entityObject });
  68.             return packetObject;
  69.         } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
  70.             e.printStackTrace();
  71.         }
  72.         return null;
  73.     }
  74.  
  75.     private void sendPacket(Player p, Object packet) {
  76.         String path = Bukkit.getServer().getClass().getPackage().getName();
  77.         String version = path.substring(path.lastIndexOf(".") + 1, path.length());
  78.         try {
  79.             Method getHandle = p.getClass().getMethod("getHandle");
  80.             Object entityPlayer = getHandle.invoke(p);
  81.             Object pConnection = entityPlayer.getClass().getField("playerConnection").get(entityPlayer);
  82.             Class<?> packetClass = Class.forName("net.minecraft.server." + version + ".Packet");
  83.             Method sendMethod = pConnection.getClass().getMethod("sendPacket", new Class[] { packetClass });
  84.             sendMethod.invoke(pConnection, new Object[] { packet });
  85.         } catch (Exception e) {
  86.             e.printStackTrace();
  87.         }
  88.     }
  89.  
  90.     public List<String> getLines() {
  91.         return lines;
  92.     }
  93.  
  94.     public Holograms setLines(List<String> lines) {
  95.         this.lines = lines;
  96.         return this;
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement