package de.tobiyas.racesandclasses.infight;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import de.tobiyas.racesandclasses.RacesAndClasses;
public class InFightManager implements Listener {
/**
* All IDs that are in Fight.
*/
private final Map<UUID,Long> inFight = new HashMap<UUID,Long>();
/**
* The Maximal time in Fight possible.
*/
private long timeInFight = 1000 * 10;
public InFightManager() {
Bukkit.getPluginManager().registerEvents(this, RacesAndClasses.getPlugin());
}
public void reload(){
//TODO replace with config.
timeInFight = 1000 * 10;
inFight.clear();
OutOfFightHealer.kill();
OutOfFightHealer.launch();
}
/**
* If the Entity with the following ID is in Fight.
*
* @param id to check
* @return true if in fight.
*/
public boolean isInFight(UUID id){
if(!inFight.containsKey(id)) return false;
long lastFightTime = inFight.get(id);
long now = System.currentTimeMillis();
return (now - lastFightTime) < timeInFight;
}
@EventHandler(priority = EventPriority.MONITOR)
public void playerGotDamage(EntityDamageEvent event){
if(event.isCancelled()) return;
if(event.getEntity().getType() == EntityType.PLAYER){
inFight.put(event.getEntity().getUniqueId(), System.currentTimeMillis());
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void playerDamaged(EntityDamageByEntityEvent event){
if(event.isCancelled()) return;
if(event.getDamager().getType() == EntityType.PLAYER){
inFight.put(event.getDamager().getUniqueId(), System.currentTimeMillis());
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void gotAggro(EntityTargetEvent event){
if(event.isCancelled()) return;
if(event.getTarget() == null) return;
if(event.getTarget().getType() == EntityType.PLAYER){
inFight.put(event.getTarget().getUniqueId(), System.currentTimeMillis());
}
}
}