package mekanism.common.network; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.entity.EntityRobit; import mekanism.common.network.PacketRobit.RobitMessage; import net.minecraft.entity.player.EntityPlayer; 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 io.netty.buffer.ByteBuf; public class PacketRobit implements IMessageHandler<RobitMessage, IMessage> { @Override public IMessage onMessage(RobitMessage message, MessageContext context) { EntityPlayer player = PacketHandler.getPlayer(context); if(message.activeType == RobitPacketType.GUI) { if(message.guiType == 0) { player.openGui(Mekanism.instance, 21, player.worldObj, message.entityId, 0, 0); } else if(message.guiType == 1) { player.openGui(Mekanism.instance, 22, player.worldObj, message.entityId, 0, 0); } else if(message.guiType == 2) { player.openGui(Mekanism.instance, 23, player.worldObj, message.entityId, 0, 0); } else if(message.guiType == 3) { player.openGui(Mekanism.instance, 24, player.worldObj, message.entityId, 0, 0); } else if(message.guiType == 4) { player.openGui(Mekanism.instance, 25, player.worldObj, message.entityId, 0, 0); } } else if(message.activeType == RobitPacketType.FOLLOW) { EntityRobit robit = (EntityRobit)player.worldObj.getEntityByID(message.entityId); if(robit != null) { robit.setFollowing(!robit.getFollowing()); } } else if(message.activeType == RobitPacketType.NAME) { EntityRobit robit = (EntityRobit)player.worldObj.getEntityByID(message.entityId); if(robit != null) { robit.setName(message.name); } } else if(message.activeType == RobitPacketType.GO_HOME) { EntityRobit robit = (EntityRobit)player.worldObj.getEntityByID(message.entityId); if(robit != null) { robit.goHome(); } } else if(message.activeType == RobitPacketType.DROP_PICKUP) { EntityRobit robit = (EntityRobit)player.worldObj.getEntityByID(message.entityId); if(robit != null) { robit.setDropPickup(!robit.getDropPickup()); } } return null; } public static class RobitMessage implements IMessage { public RobitPacketType activeType; public int guiType; public int entityId; public String name; public RobitMessage() {} public RobitMessage(RobitPacketType type, int i1, int i2, String s) { activeType = type; switch(activeType) { case GUI: guiType = i1; entityId = i2; break; case FOLLOW: entityId = i1; break; case NAME: name = s; entityId = i1; break; case GO_HOME: entityId = i1; break; case DROP_PICKUP: entityId = i1; break; } } @Override public void toBytes(ByteBuf dataStream) { dataStream.writeInt(activeType.ordinal()); switch(activeType) { case GUI: dataStream.writeInt(guiType); dataStream.writeInt(entityId); break; case FOLLOW: dataStream.writeInt(entityId); break; case NAME: PacketHandler.writeString(dataStream, name); dataStream.writeInt(entityId); break; case GO_HOME: dataStream.writeInt(entityId); break; case DROP_PICKUP: dataStream.writeInt(entityId); break; } } @Override public void fromBytes(ByteBuf dataStream) { activeType = RobitPacketType.values()[dataStream.readInt()]; if(activeType == RobitPacketType.GUI) { guiType = dataStream.readInt(); entityId = dataStream.readInt(); } else if(activeType == RobitPacketType.FOLLOW) { entityId = dataStream.readInt(); } else if(activeType == RobitPacketType.NAME) { name = PacketHandler.readString(dataStream); entityId = dataStream.readInt(); } else if(activeType == RobitPacketType.GO_HOME) { entityId = dataStream.readInt(); } else if(activeType == RobitPacketType.DROP_PICKUP) { entityId = dataStream.readInt(); } } } public static enum RobitPacketType { GUI, FOLLOW, NAME, GO_HOME, DROP_PICKUP; } }