Advertisement
Guest User

Untitled

a guest
Dec 19th, 2013
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. public class BossMessage {
  2.  
  3. private Plugin plugin;
  4. private static int MOB_ID = 1234;
  5.  
  6. public BossMessage(Plugin plugin) {
  7. this.plugin = plugin;
  8. }
  9.  
  10. @SuppressWarnings("deprecation")
  11. public boolean display(Player player, String message, int ticks) {
  12. try {
  13. Location loc = player.getLocation().add(player.getLocation().getDirection().multiply(3));
  14.  
  15. Object packetOb = getEntitySpawnPacket();
  16. setField(packetOb, "a", MOB_ID);
  17. setField(packetOb, "b", (int) EntityType.WITHER.getTypeId());
  18. setField(packetOb, "c", (int) Math.floor(loc.getBlockX() * 32.0D));
  19. setField(packetOb, "d", (int) Math.floor(loc.getBlockY() * 32.0D));
  20. setField(packetOb, "e", (int) Math.floor(loc.getBlockZ() * 32.0D));
  21. setField(packetOb, "f", (int) 0);
  22. setField(packetOb, "g", (int) 0);
  23. setField(packetOb, "h", (int) 0);
  24. setField(packetOb, "i", (byte) 0);
  25. setField(packetOb, "j", (byte) 0);
  26. setField(packetOb, "k", (byte) 0);
  27. setField(packetOb, "l", buildDataWatcher(message));
  28.  
  29. sendPacket(player, packetOb);
  30. } catch(Exception e) {
  31. e.printStackTrace();
  32. }
  33. return true;
  34. }
  35.  
  36. private String getPackage() {
  37. return "net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
  38. }
  39.  
  40. private Object getEntitySpawnPacket() throws Exception {
  41. String packageName = getPackage();
  42. Class<?> c = null;
  43. if (packageName.contains("v1_7_R1")) {
  44. c = Class.forName(packageName + ".PacketPlayOutSpawnEntityLiving");
  45. } else {
  46. c = Class.forName(packageName + ".Packet24MobSpawn");
  47. }
  48. return c.getConstructors()[0].newInstance();
  49. }
  50.  
  51. private void setField(Object object, String fieldName, Object what) throws Exception {
  52. Field f = object.getClass().getDeclaredField(fieldName);
  53. f.setAccessible(true);
  54. f.set(object, what);
  55. }
  56.  
  57. private Object buildDataWatcher(String entityName) throws Exception {
  58. Class<?> c = Class.forName(getPackage() + ".DataWatcher");
  59. Object dataWatcher = null;
  60. for (Constructor<?> con : c.getConstructors()) {
  61. if (con.getParameterTypes().length == 1) {
  62. Object ob = null;
  63. dataWatcher = con.newInstance(ob);
  64. break;
  65. }
  66. }
  67. Method m = c.getMethod("a", int.class, Object.class);
  68. m.invoke(dataWatcher, 0, (Byte) (byte) 0x20);
  69. m.invoke(dataWatcher, 6, (Float) (float) 1);
  70. m.invoke(dataWatcher, 10, (String) entityName);
  71. m.invoke(dataWatcher, 11, (Byte) (byte) 1);
  72. return dataWatcher;
  73. }
  74.  
  75. private void sendPacket(Player player, Object packet) throws Exception {
  76. Object nmsPlayer = player.getClass().getMethod("getHandle").invoke(player);
  77. Object playerCon = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
  78. Method send = null;
  79. for (Method m : playerCon.getClass().getMethods()) {
  80. if (m.getName().equals("sendPacket") && m.getParameterTypes().length == 1) {
  81. send = m;
  82. break;
  83. }
  84. }
  85. send.invoke(playerCon, packet);
  86. }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement