package crazypants.enderio.machine.hypercube; import io.netty.buffer.ByteBuf; import com.enderio.core.common.util.PlayerUtil; import cpw.mods.fml.common.FMLCommonHandler; 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 cpw.mods.fml.relauncher.Side; import crazypants.enderio.network.PacketHandler; public class PacketAddRemoveChannel implements IMessage, IMessageHandler<PacketAddRemoveChannel, IMessage> { private boolean isAdd; private Channel channel; public PacketAddRemoveChannel() { } public PacketAddRemoveChannel(boolean isAdd, Channel channel) { this.isAdd = isAdd; this.channel = channel; } @Override public void toBytes(ByteBuf buf) { buf.writeBoolean(isAdd); buf.writeBoolean(channel.isPublic()); ByteBufUtils.writeUTF8String(buf, channel.name); if(!channel.isPublic()) { ByteBufUtils.writeUTF8String(buf, channel.user.toString()); } } @Override public void fromBytes(ByteBuf data) { isAdd = data.readBoolean(); boolean isPublic = data.readBoolean(); String name = ByteBufUtils.readUTF8String(data); String user = null; if(!isPublic) { user = ByteBufUtils.readUTF8String(data); } channel = new Channel(name, PlayerUtil.getPlayerUIDUnstable(user)); } @Override public IMessage onMessage(PacketAddRemoveChannel message, MessageContext ctx) { if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { if(message.isAdd) { HyperCubeRegister.instance.addChannel(message.channel); } else { HyperCubeRegister.instance.removeChannel(message.channel); } PacketHandler.INSTANCE.sendToAll(new PacketAddRemoveChannel(message.isAdd, message.channel)); } else { if(message.isAdd) { ClientChannelRegister.instance.channelAdded(message.channel); } else { ClientChannelRegister.instance.channelRemoved(message.channel); } } return null; } }