Advertisement
Guest User

Untitled

a guest
May 21st, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.09 KB | None | 0 0
  1. package de.klein5.TowerDefense.utils;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.util.List;
  5. import java.util.Random;
  6. import java.util.UUID;
  7.  
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.Location;
  10. import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity;
  11. import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
  12. import org.bukkit.entity.Entity;
  13. import org.bukkit.entity.LivingEntity;
  14. import org.bukkit.entity.Player;
  15.  
  16. import de.klein5.TowerDefense.datawatcher.EnumDataWatcherObjects;
  17. import de.klein5.TowerDefense.datawatcher.NullDataWatcher;
  18. import net.minecraft.server.v1_9_R2.DataWatcher;
  19. import net.minecraft.server.v1_9_R2.Packet;
  20. import net.minecraft.server.v1_9_R2.PacketPlayOutEntityDestroy;
  21. import net.minecraft.server.v1_9_R2.PacketPlayOutEntityMetadata;
  22. import net.minecraft.server.v1_9_R2.PacketPlayOutSpawnEntityLiving;
  23.  
  24. public class Laser {
  25.  
  26. protected int entityId;
  27. protected NullDataWatcher dataWatcher;
  28.  
  29. private Location location;
  30.  
  31. private byte changeMask(byte bitMask, int bit, boolean state) {
  32. if (state) {
  33. return bitMask |= 1 << bit;
  34. } else {
  35. return bitMask &= ~(1 << bit);
  36. }
  37. }
  38.  
  39. public Laser(Location location) {
  40. entityId = new Random().nextInt(Integer.MAX_VALUE);
  41. dataWatcher = new NullDataWatcher();
  42. byte status = 0;
  43. status = changeMask(status, 0, false); // FIRE
  44. status = changeMask(status, 1, false); // SNEAK
  45. status = changeMask(status, 2, false); // NOT_SET
  46. status = changeMask(status, 3, false); // SPRINT
  47. status = changeMask(status, 4, false); // USE_ITEM
  48. status = changeMask(status, 5, false); // INVISABLE
  49. dataWatcher.add(EnumDataWatcherObjects.LIVING_HEALTH_06, (float) 20F);
  50. dataWatcher.add(EnumDataWatcherObjects.LIVING_POITION_COLOR_07, 0);
  51. dataWatcher.add(EnumDataWatcherObjects.ENTITY_BITMASK_00, status);
  52. dataWatcher.add(EnumDataWatcherObjects.HUMAN_SKIN_12, (byte) 127);
  53. this.location = location;
  54. }
  55.  
  56. private void sendPacket(Packet packet) {
  57. for (Player player : Bukkit.getOnlinePlayers()) {
  58. ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
  59. }
  60. }
  61.  
  62. private void spawn() {
  63. try {
  64. PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving();
  65. set(packet, "a", entityId);
  66. set(packet, "b", UUID.randomUUID());
  67. set(packet, "c", org.bukkit.entity.EntityType.GUARDIAN.getTypeId());
  68. set(packet, "d", toFixedPointNumber(location.getX()));
  69. set(packet, "e", toFixedPointNumber(location.getY()));
  70. set(packet, "f", toFixedPointNumber(location.getZ()));
  71. set(packet, "g", (int) toPackedByte(location.getYaw()));
  72. set(packet, "h", (int) toPackedByte(location.getPitch()));
  73. set(packet, "i", (int) toPackedByte(location.getPitch()));
  74. set(packet, "j", (byte) 0);
  75. set(packet, "k", (byte) 0);
  76. set(packet, "l", (byte) 0);
  77. set(packet, "m", dataWatcher.toNMS());
  78.  
  79. sendPacket(packet);
  80.  
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84. }
  85.  
  86. public void setTarget(Entity en) {
  87. try {
  88. spawn();
  89. PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata();
  90. set(packet, "a", entityId);
  91. set(packet, "b", dataWatcher.toNMS().c());
  92. sendPacket(packet);
  93.  
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. }
  97. }
  98.  
  99. public void despawn(Player show) {
  100. PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(new int[] { entityId });
  101. sendPacket(packet);
  102. }
  103.  
  104. protected int calcData(int data, int id, boolean flag) {
  105. if (flag) {
  106. return Integer.valueOf(data | 1 << id);
  107. } else {
  108. return Integer.valueOf(data & ~(1 << id));
  109. }
  110. }
  111.  
  112. protected int calcType(int type, int id, boolean flag) {
  113. if (flag) {
  114. return Integer.valueOf(type | id);
  115. } else {
  116. return Integer.valueOf(type & ~id);
  117. }
  118. }
  119.  
  120. protected byte toPackedByte(float f) {
  121. return (byte) ((int) (f * 256.0F / 360.0F));
  122. }
  123.  
  124. protected int toFixedPointNumber(Double d) {
  125. return (int) (d * 32D);
  126. }
  127.  
  128. protected void set(Object instance, String name, Object value) throws Exception {
  129. Field field = instance.getClass().getDeclaredField(name);
  130. field.setAccessible(true);
  131. field.set(instance, value);
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement