package com.arckenver.nations.listener;

import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.EntityTypes;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.Order;
import org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource;
import org.spongepowered.api.event.cause.entity.damage.source.IndirectEntityDamageSource;
import org.spongepowered.api.event.entity.DamageEntityEvent;
import org.spongepowered.api.event.filter.cause.All;

import com.arckenver.nations.ConfigHandler;
import com.arckenver.nations.DataHandler;

public class PvpListener
{
	
	@Listener(order=Order.FIRST, beforeModifications = true)
	public void onEntityDamagedByPlayer(DamageEntityEvent event, @All(ignoreEmpty=false) EntityDamageSource[] sources)
	{
		if (!ConfigHandler.getNode("worlds").getNode(event.getTargetEntity().getWorld().getName()).getNode("enabled").getBoolean())
		{
			return;
		}
		Entity attacker = null;
		for (int i = 0; i < sources.length; i++)
		{
			if (sources[i].getSource().getType() == EntityTypes.PLAYER
					|| (sources[i] instanceof IndirectEntityDamageSource && ((IndirectEntityDamageSource) sources[i]).getIndirectSource().getType() == EntityTypes.PLAYER))
			{
				attacker = sources[i].getSource();
			}
		}
		if (attacker != null && event.getTargetEntity().getType() == EntityTypes.PLAYER)
		{
			if (!DataHandler.getFlag("pvp", attacker.getLocation()) || !DataHandler.getFlag("pvp", event.getTargetEntity().getLocation()))
			{
				event.setCancelled(true);
				return;
			}
		}
	}
}