001package net.minecraftforge.event;
002
003import java.util.List;
004
005import net.minecraft.block.Block;
006import net.minecraft.entity.EntityLiving;
007import net.minecraft.entity.EnumCreatureType;
008import net.minecraft.entity.player.EntityPlayer;
009import net.minecraft.item.ItemStack;
010import net.minecraft.world.World;
011import net.minecraft.world.WorldServer;
012import net.minecraftforge.common.MinecraftForge;
013import net.minecraftforge.event.Event.Result;
014import net.minecraftforge.event.entity.living.LivingPackSizeEvent;
015import net.minecraftforge.event.entity.living.LivingSpawnEvent;
016import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
017import net.minecraftforge.event.entity.player.PlayerEvent;
018import net.minecraftforge.event.entity.player.PlayerInteractEvent;
019import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
020import net.minecraftforge.event.world.WorldEvent;
021
022@SuppressWarnings("deprecation")
023public class ForgeEventFactory
024{
025    public static boolean doPlayerHarvestCheck(EntityPlayer player, Block block, boolean success)
026    {
027        PlayerEvent.HarvestCheck event = new PlayerEvent.HarvestCheck(player, block, success);
028        MinecraftForge.EVENT_BUS.post(event);
029        return event.success;
030    }
031
032    public static float getBreakSpeed(EntityPlayer player, Block block, int metadata, float original)
033    {
034        PlayerEvent.BreakSpeed event = new PlayerEvent.BreakSpeed(player, block, metadata, original);
035        return (MinecraftForge.EVENT_BUS.post(event) ? -1 : event.newSpeed);
036    }
037
038    public static PlayerInteractEvent onPlayerInteract(EntityPlayer player, Action action, int x, int y, int z, int face)
039    {
040        PlayerInteractEvent event = new PlayerInteractEvent(player, action, x, y, z, face);
041        MinecraftForge.EVENT_BUS.post(event);
042        return event;
043    }
044
045    public static void onPlayerDestroyItem(EntityPlayer player, ItemStack stack)
046    {
047        MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(player, stack));
048    }
049
050    public static Result canEntitySpawn(EntityLiving entity, World world, float x, float y, float z)
051    {
052        LivingSpawnEvent.CheckSpawn event = new LivingSpawnEvent.CheckSpawn(entity, world, x, y, z);
053        MinecraftForge.EVENT_BUS.post(event);
054        return event.getResult();
055    }
056
057    public static boolean doSpecialSpawn(EntityLiving entity, World world, float x, float y, float z)
058    {
059        return MinecraftForge.EVENT_BUS.post(new LivingSpawnEvent.SpecialSpawn(entity, world, x, y, z));
060    }
061
062    public static List getPotentialSpawns(WorldServer world, EnumCreatureType type, int x, int y, int z, List oldList)
063    {
064        WorldEvent.PotentialSpawns event = new WorldEvent.PotentialSpawns(world, type, x, y, z, oldList);
065        if (MinecraftForge.EVENT_BUS.post(event))
066        {
067            return null;
068        }
069        return event.list;
070    }
071    
072    public static int getMaxSpawnPackSize(EntityLiving entity)
073    {
074        LivingPackSizeEvent maxCanSpawnEvent = new LivingPackSizeEvent(entity);
075        MinecraftForge.EVENT_BUS.post(maxCanSpawnEvent);
076        return maxCanSpawnEvent.getResult() == Result.ALLOW ? maxCanSpawnEvent.maxPackSize : entity.getMaxSpawnedInChunk();
077    }
078}