package advancedsystemsmanager.network;
import advancedsystemsmanager.api.network.IPacketBlock;
import advancedsystemsmanager.commands.ParentCommand;
import advancedsystemsmanager.containers.ContainerBase;
import advancedsystemsmanager.naming.NameRegistry;
import advancedsystemsmanager.registry.BlockRegistry;
import advancedsystemsmanager.registry.FactoryMappingRegistry;
import advancedsystemsmanager.threading.SearchItems;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.network.FMLNetworkEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.minecraft.network.NetHandlerPlayServer;
import net.minecraft.tileentity.TileEntity;
public class PacketEventHandler
{
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onClientPacket(FMLNetworkEvent.ClientCustomPacketEvent event)
{
handlePacket(event.packet.payload(), FMLClientHandler.instance().getClient().thePlayer, Side.CLIENT);
}
public void handlePacket(ByteBuf buffer, EntityPlayer player, Side side)
{
ASMPacket packet = new ASMPacket(buffer, side);
if (player instanceof EntityPlayerMP) packet.setPlayer((EntityPlayerMP)player);
int action = packet.readUnsignedByte();
switch (action)
{
case PacketHandler.CONTAINER:
int containerId = packet.readByte();
Container container = player.openContainer;
if (container != null && container.windowId == containerId && container instanceof ContainerBase)
{
if (player instanceof EntityPlayerMP)
{
((ContainerBase)container).updateServer(packet, (EntityPlayerMP)player);
} else
{
((ContainerBase)container).updateClient(packet, player);
}
}
break;
case PacketHandler.BLOCK:
int x = packet.readInt();
int y = packet.readUnsignedByte();
int z = packet.readInt();
TileEntity te = player.worldObj.getTileEntity(x, y, z);
if (te != null && te instanceof IPacketBlock)
{
int id = packet.readByte();
((IPacketBlock)te).readData(packet, id);
}
break;
case PacketHandler.COMMAND:
ParentCommand.handlePacket(packet);
break;
case PacketHandler.NAME:
if (player instanceof EntityPlayerMP)
{
NameRegistry.updateServer(packet);
} else
{
NameRegistry.updateClient(packet);
}
break;
case PacketHandler.ON_JOIN:
SearchItems.setItems();
FactoryMappingRegistry.INSTANCE.readData(packet);
break;
}
}
@SubscribeEvent
public void onServerPacket(FMLNetworkEvent.ServerCustomPacketEvent event)
{
handlePacket(event.packet.payload(), ((NetHandlerPlayServer)event.handler).playerEntity, Side.SERVER);
}
}