Free4All/src/main/java/eu/univento/free4all/listeners/PlayerEvents.java

133 lines
6.1 KiB
Java
Raw Normal View History

2016-08-03 00:03:09 +02:00
package eu.univento.free4all.listeners;
import eu.univento.core.Core;
import eu.univento.core.api.Hologram;
import eu.univento.core.api.effects.Effects;
import eu.univento.core.api.player.CustomPlayer;
import eu.univento.free4all.Free4All;
import eu.univento.free4all.utils.RespawnHelper;
import net.minecraft.server.v1_10_R1.EnumParticle;
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<CustomPlayer, LinkedHashMap<CustomPlayer, BukkitTask>> lastDamage = 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.");
Hologram holo = new Hologram(new String[]{"§6+1 Coins"}, p.getEyeLocation());
killer.getDatabasePlayer().addCoins(1);
holo.showPlayerTemp(killer, 50);
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<CustomPlayer, BukkitTask> 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.");
Effects.playEffect(killer.getLocation(), EnumParticle.DRIP_LAVA, 10);
killer.getDatabasePlayer().addCoins(1);
}
}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 = new RespawnHelper(p);
e.setRespawnLocation(helper.getRespawnLocation());
helper.setRespawnInventory();
Effects.playEffect(e.getRespawnLocation(), EnumParticle.HEART, 5);
}
@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<CustomPlayer, BukkitTask> 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<CustomPlayer, BukkitTask> map = new LinkedHashMap<>();
map.put(damager, task);
lastDamage.put(p, map);
}
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
e.setJoinMessage(p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §aist dem Spiel beigetreten.");
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
for(Map.Entry<CustomPlayer, LinkedHashMap<CustomPlayer, BukkitTask>> 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<CustomPlayer, BukkitTask> entry : lastDamage.get(p).entrySet()) {
CustomPlayer killer = entry.getKey();
killer.getDatabasePlayer().addCoins(1);
Effects.playEffect(p.getLocation(), EnumParticle.FLAME, 10);
}
e.setQuitMessage(Free4All.prefix + "§cDer Spieler " + p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + " §chat sich während eines Kampfes ausgeloggt.");
lastDamage.remove(p);
}
e.setQuitMessage(Free4All.prefix + "§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);
}
}
}