Advertisement
Notifyz

CombatLogListener

Jun 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.97 KB | None | 0 0
  1. package notifyz.hardcorefactions.combatlog;
  2.  
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.Iterator;
  7. import java.util.Map;
  8. import java.util.Set;
  9. import java.util.UUID;
  10.  
  11. import org.bukkit.Bukkit;
  12. import org.bukkit.GameMode;
  13. import org.bukkit.Location;
  14. import org.bukkit.World;
  15. import org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity;
  16. import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
  17. import org.bukkit.entity.Entity;
  18. import org.bukkit.entity.Player;
  19. import org.bukkit.event.EventHandler;
  20. import org.bukkit.event.EventPriority;
  21. import org.bukkit.event.Listener;
  22. import org.bukkit.event.entity.EntityInteractEvent;
  23. import org.bukkit.event.player.PlayerQuitEvent;
  24. import org.bukkit.inventory.EntityEquipment;
  25. import org.bukkit.inventory.PlayerInventory;
  26. import org.bukkit.potion.PotionEffect;
  27. import org.bukkit.potion.PotionEffectType;
  28. import org.bukkit.scheduler.BukkitRunnable;
  29. import org.spigotmc.event.player.PlayerSpawnLocationEvent;
  30.  
  31. import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy;
  32. import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntityLiving;
  33. import notifyz.hardcorefactions.HardcoreFactionsPlugin;
  34.  
  35. public class CombatLogListener implements Listener {
  36. private static final Set<UUID> SAFE_DISCONNECTS = new HashSet<>();
  37. private static final Map<UUID, CombatLogEntry> LOGGERS = new HashMap<>();
  38. private final HardcoreFactionsPlugin plugin;
  39.  
  40. public CombatLogListener(HardcoreFactionsPlugin plugin) {
  41. this.plugin = plugin;
  42. }
  43.  
  44. public static void safelyDisconnect(Player player, String reason) {
  45. if (SAFE_DISCONNECTS.add(player.getUniqueId())) {
  46. player.kickPlayer(reason);
  47. }
  48. }
  49.  
  50. public static void removeCombatLoggers() {
  51. Iterator<CombatLogEntry> iterator = LOGGERS.values().iterator();
  52. while (iterator.hasNext()) {
  53. CombatLogEntry entry = iterator.next();
  54. entry.task.cancel();
  55. entry.loggerEntity.getBukkitEntity().remove();
  56. iterator.remove();
  57. }
  58. SAFE_DISCONNECTS.clear();
  59. }
  60.  
  61. @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
  62. public void onPlayerQuitSafe(PlayerQuitEvent event) {
  63. SAFE_DISCONNECTS.remove(event.getPlayer().getUniqueId());
  64. }
  65.  
  66. @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
  67. public void onLoggerInteract(EntityInteractEvent event) {
  68. Collection<CombatLogEntry> entries = LOGGERS.values();
  69. Iterator<CombatLogEntry> var3 = entries.iterator();
  70. while (var3.hasNext()) {
  71. CombatLogEntry entry = var3.next();
  72. if (entry.loggerEntity.getBukkitEntity().equals(event.getEntity())) {
  73. event.setCancelled(true);
  74. break;
  75. }
  76. }
  77. }
  78.  
  79. @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
  80. public void onLoggerDeath(LoggerDeathEvent event) {
  81. CombatLogEntry entry = LOGGERS.remove(event.getLoggerEntity().getPlayerUUID());
  82. if (entry != null) {
  83. entry.task.cancel();
  84. }
  85. this.plugin.getTimerManager().getCombatTimer().clearCooldown(event.getLoggerEntity().getPlayerUUID());
  86. Bukkit.getLogger().info("Logger died with combat timer on so we cleared it.");
  87. }
  88.  
  89. @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
  90. public void onPlayerSpawnLocation(PlayerSpawnLocationEvent event) {
  91. CombatLogEntry combatLogEntry = LOGGERS.remove(event.getPlayer().getUniqueId());
  92. if (combatLogEntry != null) {
  93. CraftLivingEntity loggerEntity = combatLogEntry.loggerEntity.getBukkitEntity();
  94. Player player = event.getPlayer();
  95. event.setSpawnLocation(loggerEntity.getLocation());
  96. player.setFallDistance(loggerEntity.getFallDistance());
  97.  
  98. player.setRemainingAir(loggerEntity.getRemainingAir());
  99. loggerEntity.remove();
  100. combatLogEntry.task.cancel();
  101. PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(loggerEntity.getEntityId());
  102. for (Entity entity : loggerEntity.getNearbyEntities(50, 25, 50)) {
  103. if (entity instanceof Player) {
  104. Player targetPacket = (Player) entity;
  105. ((CraftPlayer) targetPacket).getHandle().playerConnection.sendPacket(packetPlayOutEntityDestroy);
  106. }
  107. }
  108. }
  109. }
  110.  
  111. @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL)
  112. public void onPlayerQuit(PlayerQuitEvent event) {
  113. Player player = event.getPlayer();
  114. UUID uuid = player.getUniqueId();
  115. PlayerInventory inventory = player.getInventory();
  116. if ((player.getGameMode() != GameMode.CREATIVE) && (!player.isDead()) && (!SAFE_DISCONNECTS.contains(uuid))) {
  117. if ((this.plugin.getTimerManager().getInvincibilityTimer().getRemainingCooldown(uuid) > 0L)) {
  118. return;
  119. }
  120. if (this.plugin.getTimerManager().teleportTimer.getNearbyEnemies(player, 64) <= 0) {
  121. return;
  122. }
  123. Location location = player.getLocation();
  124. if (this.plugin.getFactionManager().getFactionAt(location).isSafezone()) {
  125. return;
  126. }
  127. if (LOGGERS.containsKey(player.getUniqueId())) {
  128. return;
  129. }
  130. World world = location.getWorld();
  131. LoggerEntity loggerEntity = new LoggerEntity(world, location, player);
  132. LoggerSpawnEvent calledEvent = new LoggerSpawnEvent(loggerEntity);
  133. Bukkit.getPluginManager().callEvent(calledEvent);
  134. LOGGERS.put(uuid, new CombatLogEntry(loggerEntity, new LoggerRemovable(uuid, loggerEntity).runTaskLater(this.plugin, 600L)));
  135. CraftLivingEntity craftEntity = loggerEntity.getBukkitEntity();
  136. if (craftEntity != null) {
  137. CraftLivingEntity craftLivingEntity = craftEntity;
  138. EntityEquipment entityEquipment = craftLivingEntity.getEquipment();
  139. entityEquipment.setItemInHand(inventory.getItemInHand());
  140. entityEquipment.setArmorContents(inventory.getArmorContents());
  141. craftLivingEntity.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 999999, 1));
  142. PacketPlayOutSpawnEntityLiving packetPlayOutSpawnEntityLiving = new PacketPlayOutSpawnEntityLiving(craftEntity.getHandle());
  143. for (Entity entity : craftLivingEntity.getNearbyEntities(50, 25, 50)) {
  144. if (entity instanceof Player) {
  145. Player packetTarget = (Player) entity;
  146. ((CraftPlayer) packetTarget).getHandle().playerConnection.sendPacket(packetPlayOutSpawnEntityLiving);
  147. }
  148. }
  149. }
  150. }
  151. }
  152.  
  153. private static class LoggerRemovable extends BukkitRunnable {
  154. private final UUID uuid;
  155. private final LoggerEntity loggerEntity;
  156.  
  157. public LoggerRemovable(UUID uuid, LoggerEntity loggerEntity) {
  158. this.uuid = uuid;
  159. this.loggerEntity = loggerEntity;
  160. }
  161.  
  162. @Override
  163. public void run() {
  164. if (CombatLogListener.LOGGERS.remove(this.uuid) != null) {
  165. this.loggerEntity.dead = true;
  166. }
  167. CraftLivingEntity craftEntity = loggerEntity.getBukkitEntity();
  168. PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(craftEntity.getEntityId());
  169. for (Entity entity : craftEntity.getNearbyEntities(50, 25, 50)) {
  170. if (entity instanceof Player) {
  171. Player targetPacket = (Player) entity;
  172. ((CraftPlayer) targetPacket).getHandle().playerConnection.sendPacket(packetPlayOutEntityDestroy);
  173. }
  174. }
  175.  
  176. }
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement