package com.legacy.aether.api.events;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;

import com.legacy.aether.api.accessories.AetherAccessory;
import com.legacy.aether.api.enchantments.AetherEnchantment;
import com.legacy.aether.api.events.accessories.ValidAccessoryEvent;
import com.legacy.aether.api.events.enchantments.AetherEnchantmentEvent;
import com.legacy.aether.api.events.freezables.AetherFreezableEvent;
import com.legacy.aether.api.events.moas.MoaHatchEvent;
import com.legacy.aether.api.freezables.AetherFreezable;
import com.legacy.aether.api.moa.AetherMoaType;

public class AetherHooks {

	public static boolean isValidAccessory(EntityPlayer player, AetherAccessory accessory) {
		ValidAccessoryEvent event = new ValidAccessoryEvent(player, accessory);

		if (MinecraftForge.EVENT_BUS.post(event)) return false;

		return !event.isCanceled();
	}

	public static void onMoaHatched(AetherMoaType type, TileEntity incubator) {
		MoaHatchEvent event = new MoaHatchEvent(type, incubator);

		MinecraftForge.EVENT_BUS.post(event);
	}

	public static void onItemEnchant(TileEntity enchanter, AetherEnchantment enchantment) {
		AetherEnchantmentEvent.EnchantEvent event = new AetherEnchantmentEvent.EnchantEvent(enchanter, enchantment);

		MinecraftForge.EVENT_BUS.post(event);
	}

	public static void onItemFreeze(TileEntity freezer, AetherFreezable freezable) {
		AetherFreezableEvent.FreezeEvent event = new AetherFreezableEvent.FreezeEvent(freezer, freezable);

		MinecraftForge.EVENT_BUS.post(event);
	}

	public static int onSetEnchantmentTime(TileEntity enchanter, AetherEnchantment enchantment, int original) {
		AetherEnchantmentEvent.SetTimeEvent event = new AetherEnchantmentEvent.SetTimeEvent(enchanter, enchantment, original);

		if (MinecraftForge.EVENT_BUS.post(event)) return original;

		return event.getNewTime();
	}

	public static int onSetFreezableTime(TileEntity freezer, AetherFreezable freezable, int original) {
		AetherFreezableEvent.SetTimeEvent event = new AetherFreezableEvent.SetTimeEvent(freezer, freezable, original);

		if (MinecraftForge.EVENT_BUS.post(event)) return original;

		return event.getNewTime();
	}
}