001    package net.minecraftforge.common;
002    
003    import java.util.ArrayList;
004    
005    import net.minecraft.entity.player.EntityPlayer;
006    import net.minecraft.item.ItemStack;
007    import net.minecraft.util.MovingObjectPosition;
008    import net.minecraft.world.World;
009    
010    /**
011     *
012     * This allows for mods to create there own Shear-like items
013     * and have them interact with Blocks/Entities without extra work.
014     * Also, if your block/entity supports the Shears, this allows you
015     * to support mod-shears as well.
016     *
017     */
018    public interface IShearable
019    {
020        /**
021         * Checks if the object is currently shearable
022         * Example: Sheep return false when they have no wool
023         *
024         * @param item The itemstack that is being used, Possible to be null
025         * @param world The current world
026         * @param x The X Position
027         * @param y The Y Position
028         * @param z The Z Position
029         * @return If this is shearable, and onSheared should be called.
030         */
031        public boolean isShearable(ItemStack item, World world, int x, int y, int z);
032    
033        /**
034         * Performs the shear function on this object.
035         * This is called for both client, and server.
036         * The object should perform all actions related to being sheared,
037         * except for dropping of the items.
038         *
039         * Returns a list of items that resulted from the shearing process.
040         *
041         * For entities, they should trust there internal location information
042         * over the values passed into this function.
043         *
044         * @param item The itemstack that is being used, Possible to be null
045         * @param world The current world
046         * @param x The X Position
047         * @param y The Y Position
048         * @param z The Z Position
049         * @param fortune The fortune level of the shears being used
050         * @return A ArrayList containing all items from this shearing. Possible to be null.
051         */
052        public ArrayList<ItemStack> onSheared(ItemStack item, World world, int x, int y, int z, int fortune);
053    }