package com.arckenver.nations.listener;

import org.spongepowered.api.block.BlockSnapshot;
import org.spongepowered.api.data.Transaction;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.Order;
import org.spongepowered.api.event.world.ExplosionEvent;

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

public class ExplosionListener
{
	@Listener(order=Order.FIRST, beforeModifications = true)
	public void onExplosion(ExplosionEvent.Pre event)
	{
		if (!ConfigHandler.getNode("worlds").getNode(event.getTargetWorld().getName()).getNode("enabled").getBoolean())
		{
			return;
		}
		if (!DataHandler.getFlag("explosions", event.getExplosion().getLocation()))
		{
			event.setCancelled(true);
			/*event.setExplosion(Sponge.getRegistry().createBuilder(Explosion.Builder.class)
					.from(event.getExplosion())
					.canCauseFire(canCauseFire)
					.shouldBreakBlocks(canBreakBlocks)
					.build());*/
		}
	}
	
	@Listener(order=Order.FIRST, beforeModifications = true)
	public void onExplosion(ExplosionEvent.Post event)
	{
		if (!ConfigHandler.getNode("worlds").getNode(event.getTargetWorld().getName()).getNode("enabled").getBoolean())
		{
			return;
		}
		if (event.getTransactions().size() > 100)
		{
            event.setCancelled(true);
		}
		for (Transaction<BlockSnapshot> transaction : event.getTransactions()) {
            BlockSnapshot blockSnapshot = transaction.getOriginal();
            if (blockSnapshot.getLocation().isPresent() && !DataHandler.getFlag("explosions", blockSnapshot.getLocation().get()))
    		{
            	transaction.setValid(false);
    		}
		}

	}
}