package net.minecraftforge.event.entity.player; import cpw.mods.fml.common.eventhandler.Cancelable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public abstract class PlayerUseItemEvent extends PlayerEvent { public final ItemStack item; public int duration; private PlayerUseItemEvent(EntityPlayer player, ItemStack item, int duration) { super(player); 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 PlayerUseItemEvent { public Start(EntityPlayer player, ItemStack item, int duration) { super(player, 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 PlayerUseItemEvent { public Tick(EntityPlayer player, ItemStack item, int duration) { super(player, 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 PlayerUseItemEvent { public Stop(EntityPlayer player, ItemStack item, int duration) { super(player, 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 PlayerUseItemEvent { public ItemStack result; public Finish(EntityPlayer player, ItemStack item, int duration, ItemStack result) { super(player, item, duration); this.result = result; } } }