/* * Copyright (c) 2018 univento.eu - All rights reserved * You are not allowed to use, distribute or modify this code */ package eu.univento.free4all.listeners; import eu.univento.commons.player.currency.CurrencyType; import eu.univento.core.Core; import eu.univento.core.api.player.CustomPlayer; import eu.univento.free4all.Free4All; import eu.univento.free4all.utils.RespawnHelper; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import java.util.LinkedHashMap; import java.util.Map; /** * @author joethei * @version 0.1 */ public class PlayerEvents implements Listener{ private Map> lastDamage = new LinkedHashMap<>(); private Map helpers = new LinkedHashMap<>(); @EventHandler public void onPlayerDeath(PlayerDeathEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getEntity()); if(p.getKiller() != null) { CustomPlayer killer = CustomPlayer.getPlayer(p.getKiller()); e.setDeathMessage(p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §awurde von " + killer.getDatabasePlayer().getRank().getColor() + killer.getDisplayName() + " §agetötet."); killer.getDatabasePlayer().addCurrency(CurrencyType.Vents, 10); for(CustomPlayer players : Core.getOnlinePlayers()) { players.playEffect(killer.getLocation(), Effect.CHORUS_FLOWER_DEATH, 5, 2, 0.5F, 0.0F, 0.5F, 0.1F, 20, 5); } }else if(lastDamage.containsKey(p)){ for(Map.Entry entry : lastDamage.get(p).entrySet()) { CustomPlayer killer = entry.getKey(); e.setDeathMessage(p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §a wurde von " + killer.getDatabasePlayer().getRank().getColor() + killer.getDisplayName() + " §cgetötet."); killer.getDatabasePlayer().addCurrency(CurrencyType.Vents, 10); } }else { e.setDeathMessage(p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §cist nun tot."); } } @EventHandler public void onPlayerRespawn(PlayerRespawnEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); RespawnHelper helper = helpers.get(p); e.setRespawnLocation(helper.getRespawnLocation()); helper.setRespawnInventory(); } @EventHandler public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { if(e.getEntity() instanceof Player) { CustomPlayer p = CustomPlayer.getPlayer((Player) e.getEntity()); if(e.getDamager() instanceof Player) { CustomPlayer damager = CustomPlayer.getPlayer((Player) e.getEntity()); BukkitTask task = new BukkitRunnable() { @Override public void run() { if(lastDamage.containsKey(p)) lastDamage.remove(p); } }.runTaskLater(Free4All.getInstance(), 10 * 20L); LinkedHashMap map = new LinkedHashMap<>(); map.put(damager, task); lastDamage.put(p, map); } if(e.getDamager() instanceof Projectile) { CustomPlayer damager = CustomPlayer.getPlayer((Player) ((Projectile) e.getDamager()).getShooter()); BukkitTask task = new BukkitRunnable() { @Override public void run() { if(lastDamage.containsKey(p)) lastDamage.remove(p); } }.runTaskLater(Free4All.getInstance(), 10 * 20L); LinkedHashMap map = new LinkedHashMap<>(); map.put(damager, task); lastDamage.put(p, map); } } } @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); helpers.put(p, new RespawnHelper(p)); e.setJoinMessage(null); p.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> Bukkit.broadcastMessage(rank.getColor() + p.getDisplayName() + " §aist dem Spiel beigetreten.")); } @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); for(Map.Entry> entry : lastDamage.entrySet()) { entry.getValue().entrySet().stream().filter(mapEntry -> mapEntry.equals(p)).forEach(mapEntry -> lastDamage.remove(entry.getKey())); } if(lastDamage.containsKey(p)) { for(Map.Entry entry : lastDamage.get(p).entrySet()) { CustomPlayer killer = entry.getKey(); killer.getDatabasePlayer().addCurrency(CurrencyType.Vents, 10); } e.setQuitMessage("§cDer Spieler " + p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §chat sich während eines Kampfes ausgeloggt."); lastDamage.remove(p); } e.setQuitMessage("§cDer Spieler " + p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §c hat das Spiel verlassen."); } @EventHandler public void onPlayerMove(PlayerMoveEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(e.getTo().getBlock().getRelative(BlockFace.UP).getType() == Material.STATIONARY_WATER) { p.damage(0.5D); } } }