    001package net.minecraftforge.common;
    002
    003import java.util.ArrayList;
    004
    005import net.minecraft.entity.player.EntityPlayer;
    006import net.minecraft.item.ItemStack;
    007import net.minecraft.util.MovingObjectPosition;
    008import 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 */
    018public 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}