Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.03 KB | None | 0 0
  1. package es.omegaserver.miniskywars.events;
  2.  
  3. import es.omegaserver.miniskywars.MiniSkywars;
  4. import es.omegaserver.miniskywars.game.Game;
  5. import es.omegaserver.miniskywars.game.GameState;
  6. import es.omegaserver.miniskywars.player.PlayerData;
  7. import es.omegaserver.miniskywars.player.TargetCombat;
  8. import es.omegaserver.miniskywars.utils.TitleUtil;
  9. import org.bukkit.*;
  10. import org.bukkit.entity.*;
  11. import org.bukkit.event.EventHandler;
  12. import org.bukkit.event.Listener;
  13. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  14. import org.bukkit.event.entity.EntityDamageEvent;
  15. import org.bukkit.inventory.ItemStack;
  16. import org.bukkit.scheduler.BukkitRunnable;
  17.  
  18. import java.text.DecimalFormat;
  19.  
  20. import static es.omegaserver.miniskywars.utils.StringUtility.format;
  21.  
  22. public class EntityDamageByEntity implements Listener {
  23.  
  24. public static Player getTargetedPlayerFrom(Player death) {
  25. TargetCombat deathCombat = MiniSkywars.getPlugin().targetCombat.get(death.getUniqueId());
  26. if (deathCombat != null && deathCombat.getTarget() != null && deathCombat.isTimeCorrect()) {
  27. return deathCombat.getTarget();
  28. }
  29. return null;
  30. }
  31.  
  32. @EventHandler
  33. public void onPlayerDamage(EntityDamageEvent event) {
  34. Entity entity = event.getEntity();
  35.  
  36. if (entity instanceof Player) {
  37. Player player = (Player) event.getEntity();
  38. if (event.getCause() == EntityDamageEvent.DamageCause.VOID) event.setDamage(player.getHealth());
  39.  
  40. Game game = MiniSkywars.getPlugin().getGameOfPlayer(player);
  41. double currentHealth = player.getHealth() - event.getFinalDamage();
  42. boolean isDying = currentHealth <= 0;
  43. if (game != null) {
  44. if (game.getGameState() != GameState.INGAME) {
  45. event.setCancelled(true);
  46. } else {
  47. if (isDying) {
  48. event.setCancelled(true);
  49. killPlayer(player, getTargetedPlayerFrom(player));
  50. }
  51. }
  52. } else {
  53. event.setCancelled(true);
  54. }
  55. }
  56. }
  57.  
  58. @EventHandler
  59. public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
  60. Entity entity = event.getEntity();
  61. Entity source = event.getDamager();
  62. Entity damager = null;
  63.  
  64. if (source instanceof Projectile) damager = (Entity) ((Projectile) source).getShooter();
  65. else if (source instanceof Player) damager = source;
  66.  
  67.  
  68. if (entity instanceof Player) {
  69. if (MiniSkywars.getPlugin().getGameOfPlayer((Player) entity) == null) {
  70. event.setCancelled(true);
  71. return;
  72. }
  73. Player player = (Player) entity;
  74.  
  75. double currentHealth = player.getHealth() - event.getFinalDamage();
  76. boolean isDying = currentHealth <= 0;
  77.  
  78. event.setCancelled(isDying);
  79.  
  80. if (source instanceof Arrow && damager != null && damager instanceof Player && damager != player) {
  81. DecimalFormat decimalFormat = new DecimalFormat("0.0");
  82.  
  83. if (!isDying)
  84. damager.sendMessage(format("&e¡&a" + entity.getName() + " &etiene ahora &c" + decimalFormat.format(currentHealth) + "❤&e!"));
  85.  
  86. }
  87.  
  88. if (damager != null && damager instanceof Player && damager != entity) {
  89. TargetCombat playerCombat = MiniSkywars.getPlugin().targetCombat.get(player.getUniqueId());
  90. MiniSkywars.getPlugin().targetCombat.get(damager.getUniqueId()).setTarget(player.getUniqueId());
  91. playerCombat.setTarget(damager.getUniqueId());
  92.  
  93. if (event.getFinalDamage() > 0.0) playerCombat.addToCombatQueque((Player) damager);
  94. }
  95. if (isDying) killPlayer(player, getTargetedPlayerFrom(player));
  96. }
  97. }
  98.  
  99. @EventHandler
  100. public void onNPCInteract(EntityDamageByEntityEvent event) {
  101. Entity entity = event.getEntity();
  102. if (entity instanceof ArmorStand) {
  103. if (entity.getName().contains("MiniSkywars")) {
  104. ((Player) event.getDamager()).chat("/join");
  105. }
  106. }
  107. }
  108.  
  109. public static void deathMessage(Player death, String cause) {
  110. Game game = MiniSkywars.getPlugin().getGameOfPlayer(death);
  111. game.sendGameMessage("&a" + death.getName() + "&e" + cause, false);
  112. }
  113.  
  114. public static Player playerKillMessaging(Player death, Player killer) {
  115. if (death == killer)
  116. killer = null;
  117.  
  118. if (killer == null)
  119. killer = getTargetedPlayerFrom(death);
  120.  
  121. if (killer != null) {
  122. killer.playSound(killer.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f);
  123. PlayerData killerPlayerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(killer);
  124. killerPlayerData.addInGameKill();
  125. killerPlayerData.setKills(killerPlayerData.getKills() + 1);
  126. killerPlayerData.addGold(20, "Asesinato");
  127. deathMessage(death, " ha muerto a manos de &a" + killer.getName());
  128. } else {
  129. if (death.getLastDamageCause() != null) {
  130. if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION || death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)
  131. deathMessage(death, " ha volado por los aires.");
  132. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.FIRE || death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)
  133. deathMessage(death, " se ha reducido a cenizas.");
  134. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.DROWNING)
  135. deathMessage(death, " se ha ahogado.");
  136. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.FALL)
  137. deathMessage(death, " ha caído desde muy alto.");
  138. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.VOID)
  139. deathMessage(death, " ha caído al vacío.");
  140. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.LAVA)
  141. deathMessage(death, " se ha ahogado en lava.");
  142. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.WITHER || death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.POISON)
  143. deathMessage(death, " ha muerto envenenado.");
  144. else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.STARVATION)
  145. deathMessage(death, " ha muerto de hambre.");
  146. else
  147. deathMessage(death, " ha muerto.");
  148. } else {
  149. deathMessage(death, " ha muerto.");
  150. }
  151. }
  152. return killer;
  153. }
  154.  
  155.  
  156. public static void killPlayer(Player death, Player killer) {
  157. Game game = MiniSkywars.getPlugin().getGameOfPlayer(death);
  158.  
  159. if (game != null && game.getPlayerList().contains(death)) {
  160. Location deathLocation = death.getLocation();
  161. if (killer != null) {
  162. PlayerData playerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(killer);
  163. if (playerData.getKillEffect() != null && playerData.getKillEffect().getKillEffectAction() != null)
  164. playerData.getKillEffect().getKillEffectAction().run(death, deathLocation, killer, killer.getLocation());
  165. }
  166. death.closeInventory();
  167. game.sendRewardSummary(death, false);
  168. PlayerData deathPlayerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(death);
  169. deathPlayerData.setDeaths(deathPlayerData.getDeaths() + 1);
  170. TitleUtil.sendTitle(death, "&c&l¡HAS MUERTO!", 10, 30, 10);
  171. death.sendMessage(format("&c¡Has muerto! &eAhora estás en el lobby."));
  172. playerKillMessaging(death, killer);
  173. for (ItemStack item : death.getInventory().getContents())
  174. if (item != null) deathLocation.getWorld().dropItem(deathLocation, item);
  175. game.getPlayerList().remove(death);
  176. MiniSkywars.getPlugin().removePlayerGame(death);
  177.  
  178. MiniSkywars.getPlugin().getLobbyManager().sendToLobby(death);
  179.  
  180. if (game.getPlayerList().size() == 1) {
  181. Player winner = game.getPlayerList().get(0);
  182. game.setGameState(GameState.ENDING);
  183. TitleUtil.sendTitle(winner, "&6&lVICTORIA", 10, 30, 10);
  184. game.sendGameMessage("&a¡&e" + winner.getName() + "&a es el ganador!", false);
  185. game.soundGame(Sound.ENDERDRAGON_GROWL);
  186. MiniSkywars.getPlugin().getScoreboardManager().buildScoreboard(game, winner);
  187. PlayerData winnerPlayerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(winner);
  188. winnerPlayerData.setWins(winnerPlayerData.getWins() + 1);
  189. winnerPlayerData.addGold(50, "Victoria");
  190. if (winnerPlayerData.getWinEffect() != null && winnerPlayerData.getWinEffect().getAction() != null)
  191. winnerPlayerData.getWinEffect().getAction().run(winner);
  192.  
  193. game.sendRewardSummary(winner, true);
  194.  
  195. new BukkitRunnable() {
  196. @Override
  197. public void run() {
  198. game.sendGameMessage("Reiniciando mapa...", true);
  199. game.resetMap();
  200. game.resetGame();
  201. if (winnerPlayerData.getWinEffect() != null)
  202. winnerPlayerData.getWinEffect().getAction().stop(winner);
  203. }
  204. }.runTaskLater(MiniSkywars.getPlugin(), 20 * 10L);
  205. }
  206. }
  207. }
  208.  
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement