package mekanism.common.network; import io.netty.buffer.ByteBuf; import java.util.ArrayList; import java.util.List; import mekanism.client.MekanismClient; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.frequency.Frequency; import mekanism.common.network.PacketSecurityUpdate.SecurityUpdateMessage; import mekanism.common.security.SecurityData; import mekanism.common.security.SecurityFrequency; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; public class PacketSecurityUpdate implements IMessageHandler<SecurityUpdateMessage, IMessage> { @Override public IMessage onMessage(SecurityUpdateMessage message, MessageContext context) { if(message.packetType == SecurityPacket.UPDATE) { MekanismClient.clientSecurityMap.put(message.playerUsername, message.securityData); } return null; } public static class SecurityUpdateMessage implements IMessage { public SecurityPacket packetType; public String playerUsername; public SecurityData securityData; public SecurityUpdateMessage() {} public SecurityUpdateMessage(SecurityPacket type, String username, SecurityData data) { packetType = type; if(packetType == SecurityPacket.UPDATE) { playerUsername = username; securityData = data; } } @Override public void toBytes(ByteBuf dataStream) { dataStream.writeInt(packetType.ordinal()); if(packetType == SecurityPacket.UPDATE) { PacketHandler.writeString(dataStream, playerUsername); securityData.write(dataStream); } else if(packetType == SecurityPacket.FULL) { List<SecurityFrequency> frequencies = new ArrayList<SecurityFrequency>(); for(Frequency frequency : Mekanism.securityFrequencies.getFrequencies()) { if(frequency instanceof SecurityFrequency) { frequencies.add((SecurityFrequency)frequency); } } dataStream.writeInt(frequencies.size()); for(SecurityFrequency frequency : frequencies) { PacketHandler.writeString(dataStream, frequency.owner); new SecurityData(frequency).write(dataStream); } } } @Override public void fromBytes(ByteBuf dataStream) { packetType = SecurityPacket.values()[dataStream.readInt()]; if(packetType == SecurityPacket.UPDATE) { playerUsername = PacketHandler.readString(dataStream); securityData = SecurityData.read(dataStream); } else if(packetType == SecurityPacket.FULL) { MekanismClient.clientSecurityMap.clear(); int amount = dataStream.readInt(); for(int i = 0; i < amount; i++) { String owner = PacketHandler.readString(dataStream); SecurityData data = SecurityData.read(dataStream); MekanismClient.clientSecurityMap.put(owner, data); } } } } public static enum SecurityPacket { UPDATE, FULL; } }