Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package es.omegaserver.miniskywars.events;
- import es.omegaserver.miniskywars.MiniSkywars;
- import es.omegaserver.miniskywars.game.Game;
- import es.omegaserver.miniskywars.game.GameState;
- import es.omegaserver.miniskywars.player.PlayerData;
- import es.omegaserver.miniskywars.player.TargetCombat;
- import es.omegaserver.miniskywars.utils.TitleUtil;
- import org.bukkit.*;
- import org.bukkit.entity.*;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.EntityDamageByEntityEvent;
- import org.bukkit.event.entity.EntityDamageEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.scheduler.BukkitRunnable;
- import java.text.DecimalFormat;
- import static es.omegaserver.miniskywars.utils.StringUtility.format;
- public class EntityDamageByEntity implements Listener {
- public static Player getTargetedPlayerFrom(Player death) {
- TargetCombat deathCombat = MiniSkywars.getPlugin().targetCombat.get(death.getUniqueId());
- if (deathCombat != null && deathCombat.getTarget() != null && deathCombat.isTimeCorrect()) {
- return deathCombat.getTarget();
- }
- return null;
- }
- @EventHandler
- public void onPlayerDamage(EntityDamageEvent event) {
- Entity entity = event.getEntity();
- if (entity instanceof Player) {
- Player player = (Player) event.getEntity();
- if (event.getCause() == EntityDamageEvent.DamageCause.VOID) event.setDamage(player.getHealth());
- Game game = MiniSkywars.getPlugin().getGameOfPlayer(player);
- double currentHealth = player.getHealth() - event.getFinalDamage();
- boolean isDying = currentHealth <= 0;
- if (game != null) {
- if (game.getGameState() != GameState.INGAME) {
- event.setCancelled(true);
- } else {
- if (isDying) {
- event.setCancelled(true);
- killPlayer(player, getTargetedPlayerFrom(player));
- }
- }
- } else {
- event.setCancelled(true);
- }
- }
- }
- @EventHandler
- public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
- Entity entity = event.getEntity();
- Entity source = event.getDamager();
- Entity damager = null;
- if (source instanceof Projectile) damager = (Entity) ((Projectile) source).getShooter();
- else if (source instanceof Player) damager = source;
- if (entity instanceof Player) {
- if (MiniSkywars.getPlugin().getGameOfPlayer((Player) entity) == null) {
- event.setCancelled(true);
- return;
- }
- Player player = (Player) entity;
- double currentHealth = player.getHealth() - event.getFinalDamage();
- boolean isDying = currentHealth <= 0;
- event.setCancelled(isDying);
- if (source instanceof Arrow && damager != null && damager instanceof Player && damager != player) {
- DecimalFormat decimalFormat = new DecimalFormat("0.0");
- if (!isDying)
- damager.sendMessage(format("&e¡&a" + entity.getName() + " &etiene ahora &c" + decimalFormat.format(currentHealth) + "❤&e!"));
- }
- if (damager != null && damager instanceof Player && damager != entity) {
- TargetCombat playerCombat = MiniSkywars.getPlugin().targetCombat.get(player.getUniqueId());
- MiniSkywars.getPlugin().targetCombat.get(damager.getUniqueId()).setTarget(player.getUniqueId());
- playerCombat.setTarget(damager.getUniqueId());
- if (event.getFinalDamage() > 0.0) playerCombat.addToCombatQueque((Player) damager);
- }
- if (isDying) killPlayer(player, getTargetedPlayerFrom(player));
- }
- }
- @EventHandler
- public void onNPCInteract(EntityDamageByEntityEvent event) {
- Entity entity = event.getEntity();
- if (entity instanceof ArmorStand) {
- if (entity.getName().contains("MiniSkywars")) {
- ((Player) event.getDamager()).chat("/join");
- }
- }
- }
- public static void deathMessage(Player death, String cause) {
- Game game = MiniSkywars.getPlugin().getGameOfPlayer(death);
- game.sendGameMessage("&a" + death.getName() + "&e" + cause, false);
- }
- public static Player playerKillMessaging(Player death, Player killer) {
- if (death == killer)
- killer = null;
- if (killer == null)
- killer = getTargetedPlayerFrom(death);
- if (killer != null) {
- killer.playSound(killer.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f);
- PlayerData killerPlayerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(killer);
- killerPlayerData.addInGameKill();
- killerPlayerData.setKills(killerPlayerData.getKills() + 1);
- killerPlayerData.addGold(20, "Asesinato");
- deathMessage(death, " ha muerto a manos de &a" + killer.getName());
- } else {
- if (death.getLastDamageCause() != null) {
- if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION || death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)
- deathMessage(death, " ha volado por los aires.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.FIRE || death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)
- deathMessage(death, " se ha reducido a cenizas.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.DROWNING)
- deathMessage(death, " se ha ahogado.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.FALL)
- deathMessage(death, " ha caído desde muy alto.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.VOID)
- deathMessage(death, " ha caído al vacío.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.LAVA)
- deathMessage(death, " se ha ahogado en lava.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.WITHER || death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.POISON)
- deathMessage(death, " ha muerto envenenado.");
- else if (death.getLastDamageCause().getCause() == EntityDamageEvent.DamageCause.STARVATION)
- deathMessage(death, " ha muerto de hambre.");
- else
- deathMessage(death, " ha muerto.");
- } else {
- deathMessage(death, " ha muerto.");
- }
- }
- return killer;
- }
- public static void killPlayer(Player death, Player killer) {
- Game game = MiniSkywars.getPlugin().getGameOfPlayer(death);
- if (game != null && game.getPlayerList().contains(death)) {
- Location deathLocation = death.getLocation();
- if (killer != null) {
- PlayerData playerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(killer);
- if (playerData.getKillEffect() != null && playerData.getKillEffect().getKillEffectAction() != null)
- playerData.getKillEffect().getKillEffectAction().run(death, deathLocation, killer, killer.getLocation());
- }
- death.closeInventory();
- game.sendRewardSummary(death, false);
- PlayerData deathPlayerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(death);
- deathPlayerData.setDeaths(deathPlayerData.getDeaths() + 1);
- TitleUtil.sendTitle(death, "&c&l¡HAS MUERTO!", 10, 30, 10);
- death.sendMessage(format("&c¡Has muerto! &eAhora estás en el lobby."));
- playerKillMessaging(death, killer);
- for (ItemStack item : death.getInventory().getContents())
- if (item != null) deathLocation.getWorld().dropItem(deathLocation, item);
- game.getPlayerList().remove(death);
- MiniSkywars.getPlugin().removePlayerGame(death);
- MiniSkywars.getPlugin().getLobbyManager().sendToLobby(death);
- if (game.getPlayerList().size() == 1) {
- Player winner = game.getPlayerList().get(0);
- game.setGameState(GameState.ENDING);
- TitleUtil.sendTitle(winner, "&6&lVICTORIA", 10, 30, 10);
- game.sendGameMessage("&a¡&e" + winner.getName() + "&a es el ganador!", false);
- game.soundGame(Sound.ENDERDRAGON_GROWL);
- MiniSkywars.getPlugin().getScoreboardManager().buildScoreboard(game, winner);
- PlayerData winnerPlayerData = MiniSkywars.getPlugin().getPlayerDataManager().getPlayerProfile(winner);
- winnerPlayerData.setWins(winnerPlayerData.getWins() + 1);
- winnerPlayerData.addGold(50, "Victoria");
- if (winnerPlayerData.getWinEffect() != null && winnerPlayerData.getWinEffect().getAction() != null)
- winnerPlayerData.getWinEffect().getAction().run(winner);
- game.sendRewardSummary(winner, true);
- new BukkitRunnable() {
- @Override
- public void run() {
- game.sendGameMessage("Reiniciando mapa...", true);
- game.resetMap();
- game.resetGame();
- if (winnerPlayerData.getWinEffect() != null)
- winnerPlayerData.getWinEffect().getAction().stop(winner);
- }
- }.runTaskLater(MiniSkywars.getPlugin(), 20 * 10L);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement