001    package net.minecraftforge.event;
002    
003    import net.minecraft.block.Block;
004    import net.minecraft.entity.EntityLiving;
005    import net.minecraft.entity.player.EntityPlayer;
006    import net.minecraft.item.ItemStack;
007    import net.minecraft.world.World;
008    import net.minecraftforge.common.MinecraftForge;
009    import net.minecraftforge.event.Event.Result;
010    import net.minecraftforge.event.entity.living.LivingSpawnEvent;
011    import net.minecraftforge.event.entity.living.LivingSpecialSpawnEvent;
012    import net.minecraftforge.event.entity.player.*;
013    import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
014    
015    @SuppressWarnings("deprecation")
016    public class ForgeEventFactory
017    {
018        public static boolean doPlayerHarvestCheck(EntityPlayer player, Block block, boolean success)
019        {
020            PlayerEvent.HarvestCheck event = new PlayerEvent.HarvestCheck(player, block, success);
021            MinecraftForge.EVENT_BUS.post(event);
022            return event.success;
023        }
024    
025        public static float getBreakSpeed(EntityPlayer player, Block block, int metadata, float original)
026        {
027            PlayerEvent.BreakSpeed event = new PlayerEvent.BreakSpeed(player, block, metadata, original);
028            return (MinecraftForge.EVENT_BUS.post(event) ? -1 : event.newSpeed);
029        }
030    
031        public static PlayerInteractEvent onPlayerInteract(EntityPlayer player, Action action, int x, int y, int z, int face)
032        {
033            PlayerInteractEvent event = new PlayerInteractEvent(player, action, x, y, z, face);
034            MinecraftForge.EVENT_BUS.post(event);
035            return event;
036        }
037    
038        public static void onPlayerDestroyItem(EntityPlayer player, ItemStack stack)
039        {
040            MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(player, stack));
041        }
042    
043        public static Result canEntitySpawn(EntityLiving entity, World world, float x, float y, float z)
044        {
045            LivingSpawnEvent.CheckSpawn event = new LivingSpawnEvent.CheckSpawn(entity, world, x, y, z);
046            MinecraftForge.EVENT_BUS.post(event);
047            return event.getResult();
048        }
049    
050        public static boolean doSpecialSpawn(EntityLiving entity, World world, float x, float y, float z)
051        {
052            boolean result = MinecraftForge.EVENT_BUS.post(new LivingSpecialSpawnEvent(entity, world, x, y, z));
053            LivingSpawnEvent.SpecialSpawn nEvent = new LivingSpawnEvent.SpecialSpawn(entity, world, x, y, z);
054    
055            if (result) //For the time being, copy the canceled state from the old legacy event
056            {           // Remove when we remove LivingSpecialSpawnEvent.
057                nEvent.setCanceled(true);
058            }
059    
060            return MinecraftForge.EVENT_BUS.post(nEvent);
061        }
062    }