package crazypants.enderio.machine.capbank.packet;
import io.netty.buffer.ByteBuf;
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;
import crazypants.enderio.machine.capbank.network.ClientNetworkManager;
import crazypants.enderio.machine.capbank.network.ICapBankNetwork;
import crazypants.enderio.machine.capbank.network.NetworkState;
public class PacketNetworkStateResponse implements IMessage, IMessageHandler<PacketNetworkStateResponse, IMessage> {
private int id;
private NetworkState state;
public PacketNetworkStateResponse() {
}
public PacketNetworkStateResponse(ICapBankNetwork network) {
this(network, false);
}
public PacketNetworkStateResponse(ICapBankNetwork network, boolean remove) {
id = network.getId();
if(!remove) {
state = network.getState();
} else {
state = null;
}
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(id);
buf.writeBoolean(state != null);
if(state != null) {
state.writeToBuf(buf);
}
}
@Override
public void fromBytes(ByteBuf buf) {
id = buf.readInt();
boolean hasState = buf.readBoolean();
if(hasState) {
state = NetworkState.readFromBuf(buf);
} else {
state = null;
}
}
@Override
public IMessage onMessage(PacketNetworkStateResponse message, MessageContext ctx) {
if(message.state != null) {
ClientNetworkManager.getInstance().updateState(EnderIO.proxy.getClientWorld(), message.id, message.state);
} else {
ClientNetworkManager.getInstance().destroyNetwork(message.id);
}
return null;
}
}