package net.minecraftforge.event.entity.living; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.eventhandler.Cancelable; public abstract class LivingEntityUseItemEvent extends LivingEvent { public final ItemStack item; public int duration; private LivingEntityUseItemEvent(EntityLivingBase entity, ItemStack item, int duration) { super(entity); this.item = item; this.duration = duration; } /** * Fired when a player starts 'using' an item, typically when they hold right mouse. * Examples: * Drawing a bow * Eating Food * Drinking Potions/Milk * Guarding with a sword * * Cancel the event, or set the duration or <= 0 to prevent it from processing. * */ @Cancelable public static class Start extends LivingEntityUseItemEvent { public Start(EntityLivingBase entity, ItemStack item, int duration) { super(entity, item, duration); } } /** * Fired every tick that a player is 'using' an item, see {@link Start} for info. * * Cancel the event, or set the duration or <= 0 to cause the player to stop using the item. * */ @Cancelable public static class Tick extends LivingEntityUseItemEvent { public Tick(EntityLivingBase entity, ItemStack item, int duration) { super(entity, item, duration); } } /** * Fired when a player stops using an item without the use duration timing out. * Example: * Stop eating 1/2 way through * Stop defending with sword * Stop drawing bow. This case would fire the arrow * * Duration on this event is how long the item had left in it's count down before 'finishing' * * Canceling this event will prevent the Item from being notified that it has stopped being used, * The only vanilla item this would effect are bows, and it would cause them NOT to fire there arrow. */ @Cancelable public static class Stop extends LivingEntityUseItemEvent { public Stop(EntityLivingBase entity, ItemStack item, int duration) { super(entity, item, duration); } } /** * Fired after an item has fully finished being used. * The item has been notified that it was used, and the item/result stacks reflect after that state. * This means that when this is fired for a Potion, the potion effect has already been applied. * * If you wish to cancel those effects, you should cancel one of the above events. * * The result item stack is the stack that is placed in the player's inventory in replacement of the stack that is currently being used. * */ public static class Finish extends LivingEntityUseItemEvent { public ItemStack result; public Finish(EntityLivingBase entity, ItemStack item, int duration, ItemStack result) { super(entity, item, duration); this.result = result; } } }