package crazypants.enderio.conduit.item.filter;
import crazypants.enderio.conduit.gui.GuiExternalConnection;
import crazypants.enderio.conduit.gui.item.IItemFilterGui;
import crazypants.enderio.conduit.item.IItemConduit;
import io.netty.buffer.ByteBuf;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import com.enderio.core.client.gui.widget.GhostSlot;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.conduit.item.NetworkedInventory;
public interface IItemFilter {
@SideOnly(Side.CLIENT)
IItemFilterGui getGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput);
void readFromNBT(NBTTagCompound nbtRoot);
void writeToNBT(NBTTagCompound nbtRoot);
void writeToByteBuf(ByteBuf buf);
void readFromByteBuf(ByteBuf buf);
/**
* Checks if the given item passes the filter or not.
* @param inv the attached inventory - or null when used without an inventory (eg for a GUI)
* @param item the item to check
* @return true if the item is allowed to pass
*/
boolean doesItemPassFilter(NetworkedInventory inv, ItemStack item);
boolean doesFilterCaptureStack(NetworkedInventory inv, ItemStack item);
boolean isValid();
boolean isSticky();
void createGhostSlots(List<GhostSlot> slots, int xOffset, int yOffset, Runnable cb);
int getSlotCount();
}