136 lines
6.1 KiB
Java
136 lines
6.1 KiB
Java
/*
|
|
* 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<CustomPlayer, LinkedHashMap<CustomPlayer, BukkitTask>> lastDamage = new LinkedHashMap<>();
|
|
private Map<CustomPlayer, RespawnHelper> 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<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.");
|
|
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<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());
|
|
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<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().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);
|
|
}
|
|
}
|
|
|
|
} |