package mekanism.common.content.miner;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import mekanism.common.util.MekanismUtils;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public abstract class MinerFilter
{
public ItemStack replaceStack;
public boolean requireStack;
public abstract boolean canFilter(ItemStack itemStack);
public NBTTagCompound write(NBTTagCompound nbtTags)
{
nbtTags.setBoolean("requireStack", requireStack);
if(replaceStack != null)
{
nbtTags.setTag("replaceStack", replaceStack.writeToNBT(new NBTTagCompound()));
}
return nbtTags;
}
protected void read(NBTTagCompound nbtTags)
{
requireStack = nbtTags.getBoolean("requireStack");
if(nbtTags.hasKey("replaceStack"))
{
replaceStack = ItemStack.loadItemStackFromNBT(nbtTags.getCompoundTag("replaceStack"));
}
}
public void write(ArrayList<Object> data)
{
data.add(requireStack);
if(replaceStack != null)
{
data.add(true);
data.add(MekanismUtils.getID(replaceStack));
data.add(replaceStack.getItemDamage());
}
else {
data.add(false);
}
}
protected void read(ByteBuf dataStream)
{
requireStack = dataStream.readBoolean();
if(dataStream.readBoolean())
{
replaceStack = new ItemStack(Item.getItemById(dataStream.readInt()), 1, dataStream.readInt());
}
else {
replaceStack = null;
}
}
public static MinerFilter readFromNBT(NBTTagCompound nbtTags)
{
int type = nbtTags.getInteger("type");
MinerFilter filter = null;
if(type == 0)
{
filter = new MItemStackFilter();
}
else if(type == 1)
{
filter = new MOreDictFilter();
}
else if(type == 2)
{
filter = new MMaterialFilter();
}
else if(type == 3)
{
filter = new MModIDFilter();
}
filter.read(nbtTags);
return filter;
}
public static MinerFilter readFromPacket(ByteBuf dataStream)
{
int type = dataStream.readInt();
MinerFilter filter = null;
if(type == 0)
{
filter = new MItemStackFilter();
}
else if(type == 1)
{
filter = new MOreDictFilter();
}
else if(type == 2)
{
filter = new MMaterialFilter();
}
else if(type == 3)
{
filter = new MModIDFilter();
}
filter.read(dataStream);
return filter;
}
@Override
public boolean equals(Object filter)
{
return filter instanceof MinerFilter;
}
}