package crazypants.enderio.machine.transceiver;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import com.enderio.core.common.network.MessageTileEntity;
import com.enderio.core.common.network.NetworkUtil;
import com.google.common.collect.MultimapBuilder;
import com.google.common.collect.SetMultimap;
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.EnderIO;
public class PacketSendRecieveChannelList extends MessageTileEntity<TileTransceiver> implements IMessageHandler<PacketSendRecieveChannelList, IMessage> {
private boolean isSend;
private SetMultimap<ChannelType, Channel> channels;
public PacketSendRecieveChannelList() {
}
public PacketSendRecieveChannelList(TileTransceiver te, boolean isSend) {
super(te);
this.isSend = isSend;
if(isSend) {
this.channels = te.getSendChannels();
} else {
this.channels = te.getReceiveChannels();
}
}
@Override
public void toBytes(ByteBuf buf) {
super.toBytes(buf);
buf.writeBoolean(isSend);
NBTTagList tagList = TileTransceiver.createTagList(channels);
NBTTagCompound root = new NBTTagCompound();
root.setTag("chans", tagList);
NetworkUtil.writeNBTTagCompound(root, buf);
}
@Override
public void fromBytes(ByteBuf buf) {
super.fromBytes(buf);
isSend = buf.readBoolean();
NBTTagCompound root = NetworkUtil.readNBTTagCompound(buf);
channels = MultimapBuilder.enumKeys(ChannelType.class).hashSetValues().build();
TileTransceiver.readChannels(root, channels, "chans");
}
@Override
public IMessage onMessage(PacketSendRecieveChannelList message, MessageContext ctx) {
EntityPlayer player = EnderIO.proxy.getClientPlayer();
TileTransceiver tile = message.getTileEntity(player.worldObj);
if(tile != null) {
if(message.isSend) {
tile.setSendChannels(message.channels);
} else {
tile.setRecieveChannels(message.channels);
}
}
return null;
}
}