001package cpw.mods.fml.common.network;
002
003import net.minecraft.entity.player.EntityPlayerMP;
004import net.minecraft.network.packet.Packet;
005import net.minecraft.network.packet.Packet131MapData;
006import net.minecraft.network.packet.Packet250CustomPayload;
007import net.minecraft.server.MinecraftServer;
008import cpw.mods.fml.common.FMLCommonHandler;
009import cpw.mods.fml.common.FMLLog;
010
011/**
012 * A simple utility class to send packet 250 packets around the place
013 *
014 * @author cpw
015 *
016 */
017public class PacketDispatcher
018{
019    public static Packet250CustomPayload getPacket(String type, byte[] data)
020    {
021        return new Packet250CustomPayload(type, data);
022    }
023
024    public static void sendPacketToServer(Packet packet)
025    {
026        FMLCommonHandler.instance().getSidedDelegate().sendPacket(packet);
027    }
028
029    public static void sendPacketToPlayer(Packet packet, Player player)
030    {
031        if (player instanceof EntityPlayerMP)
032        {
033            ((EntityPlayerMP)player).playerNetServerHandler.sendPacketToPlayer(packet);
034        }
035    }
036
037    public static void sendPacketToAllAround(double X, double Y, double Z, double range, int dimensionId, Packet packet)
038    {
039        MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
040        if (server != null)
041        {
042            server.getConfigurationManager().sendToAllNear(X, Y, Z, range, dimensionId, packet);
043        }
044        else
045        {
046            FMLLog.fine("Attempt to send packet to all around without a server instance available");
047        }
048    }
049
050    public static void sendPacketToAllInDimension(Packet packet, int dimId)
051    {
052        MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
053        if (server != null)
054        {
055            server.getConfigurationManager().sendPacketToAllPlayersInDimension(packet, dimId);
056        }
057        else
058        {
059            FMLLog.fine("Attempt to send packet to all in dimension without a server instance available");
060        }
061    }
062
063    public static void sendPacketToAllPlayers(Packet packet)
064    {
065        MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
066        if (server != null)
067        {
068            server.getConfigurationManager().sendPacketToAllPlayers(packet);
069        }
070        else
071        {
072            FMLLog.fine("Attempt to send packet to all in dimension without a server instance available");
073        }
074    }
075
076    public static Packet131MapData getTinyPacket(Object mod, short tag, byte[] data)
077    {
078        NetworkModHandler nmh = FMLNetworkHandler.instance().findNetworkModHandler(mod);
079        return new Packet131MapData((short) nmh.getNetworkId(), tag, data);
080    }
081}