2018-01-15 12:32:49 +01:00
/ *
* Copyright ( c ) 2018 univento . eu - All rights reserved
* You are not allowed to use , distribute or modify this code
* /
2016-08-03 00:03:09 +02:00
package eu.univento.free4all.listeners ;
2018-01-15 12:32:49 +01:00
import eu.univento.commons.player.currency.CurrencyType ;
2016-08-03 00:03:09 +02:00
import eu.univento.core.Core ;
import eu.univento.core.api.player.CustomPlayer ;
import eu.univento.free4all.Free4All ;
import eu.univento.free4all.utils.RespawnHelper ;
2018-01-15 12:32:49 +01:00
import org.bukkit.Bukkit ;
2016-08-03 00:03:09 +02:00
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 < > ( ) ;
2018-01-15 12:32:49 +01:00
private Map < CustomPlayer , RespawnHelper > helpers = new LinkedHashMap < > ( ) ;
2016-08-03 00:03:09 +02:00
@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. " ) ;
2018-01-15 12:32:49 +01:00
killer . getDatabasePlayer ( ) . addCurrency ( CurrencyType . Vents , 10 ) ;
2016-08-03 00:03:09 +02:00
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. " ) ;
2018-01-15 12:32:49 +01:00
killer . getDatabasePlayer ( ) . addCurrency ( CurrencyType . Vents , 10 ) ;
2016-08-03 00:03:09 +02:00
}
} else {
e . setDeathMessage ( p . getDatabasePlayer ( ) . getRank ( ) . getColor ( ) + p . getDisplayName ( ) + " §cist nun tot. " ) ;
}
}
@EventHandler
public void onPlayerRespawn ( PlayerRespawnEvent e ) {
CustomPlayer p = CustomPlayer . getPlayer ( e . getPlayer ( ) ) ;
2018-01-15 12:32:49 +01:00
RespawnHelper helper = helpers . get ( p ) ;
2016-08-03 00:03:09 +02:00
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 ( ) ) ;
2018-01-15 12:32:49 +01:00
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. " ) ) ;
2016-08-03 00:03:09 +02:00
}
@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 ( ) ;
2018-01-15 12:32:49 +01:00
killer . getDatabasePlayer ( ) . addCurrency ( CurrencyType . Vents , 10 ) ;
2016-08-03 00:03:09 +02:00
}
2018-01-15 12:32:49 +01:00
e . setQuitMessage ( " §cDer Spieler " + p . getDatabasePlayer ( ) . getRank ( ) . getColor ( ) + p . getDisplayName ( ) + " §chat sich während eines Kampfes ausgeloggt. " ) ;
2016-08-03 00:03:09 +02:00
lastDamage . remove ( p ) ;
}
2018-01-15 12:32:49 +01:00
e . setQuitMessage ( " §cDer Spieler " + p . getDatabasePlayer ( ) . getRank ( ) . getColor ( ) + p . getDisplayName ( ) + " §c hat das Spiel verlassen. " ) ;
2016-08-03 00:03:09 +02:00
}
@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 ) ;
}
}
}