package crazypants.enderio.conduit.gui.item;
import io.netty.buffer.ByteBuf;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import crazypants.enderio.conduit.item.IItemConduit;
import crazypants.enderio.conduit.item.filter.ModItemFilter;
import crazypants.enderio.conduit.packet.AbstractConduitPacket;
import crazypants.enderio.conduit.packet.ConTypeEnum;
public class PacketModItemFilter extends AbstractConduitPacket<IItemConduit> implements IMessageHandler<PacketModItemFilter, IMessage> {
private ForgeDirection dir;
private boolean isInput;
private int index;
private String name;
public PacketModItemFilter() {
}
public PacketModItemFilter(IItemConduit con, ForgeDirection dir, boolean isInput, int index, String name) {
super(con.getBundle().getEntity(), ConTypeEnum.ITEM);
this.dir = dir;
this.isInput= isInput;
this.index = index;
this.name = name;
}
@Override
public void fromBytes(ByteBuf buf) {
super.fromBytes(buf);
dir = ForgeDirection.values()[buf.readShort()];
isInput = buf.readBoolean();
index = buf.readInt();
boolean isNull = buf.readBoolean();
if(isNull) {
name = null;
} else {
name = ByteBufUtils.readUTF8String(buf);
}
}
@Override
public void toBytes(ByteBuf buf) {
super.toBytes(buf);
buf.writeShort(dir.ordinal());
buf.writeBoolean(isInput);
buf.writeInt(index);
buf.writeBoolean(name == null);
if(name != null) {
ByteBufUtils.writeUTF8String(buf, name);
}
}
@Override
public IMessage onMessage(PacketModItemFilter message, MessageContext ctx) {
IItemConduit conduit = message.getTileCasted(ctx);
if(conduit == null) {
return null;
}
ModItemFilter filter;
if(message.isInput) {
filter = (ModItemFilter)conduit.getInputFilter(message.dir);
} else {
filter = (ModItemFilter)conduit.getOutputFilter(message.dir);
}
if (message.index == -1) {
filter.setBlacklist("1".equals(message.name));
} else {
filter.setMod(message.index, message.name);
}
if(message.isInput) {
conduit.setInputFilter(message.dir, filter);
} else {
conduit.setOutputFilter(message.dir, filter);
}
return null;
}
}