package openmods.network.senders; import cpw.mods.fml.common.network.FMLOutboundHandler; import cpw.mods.fml.common.network.FMLOutboundHandler.OutboundTarget; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import io.netty.channel.Channel; import net.minecraft.entity.player.EntityPlayer; public class FmlPacketSenderFactory { public static ITargetedPacketSender<EntityPlayer> createPlayerSender(Channel channel) { return new FmlTargetedPacketSender<EntityPlayer>(channel, OutboundTarget.PLAYER); } public static ITargetedPacketSender<Integer> createDimensionSender(Channel channel) { return new FmlTargetedPacketSender<Integer>(channel, OutboundTarget.DIMENSION); } public static ITargetedPacketSender<TargetPoint> createPointSender(Channel channel) { return new FmlTargetedPacketSender<TargetPoint>(channel, OutboundTarget.ALLAROUNDPOINT); } public static IPacketSender createSender(Channel channel, OutboundTarget target) { return new FmlPacketSender(channel, target); } private static class FmlPacketSender extends PacketSenderBase { private final OutboundTarget selector; public FmlPacketSender(Channel channel, OutboundTarget selector) { super(channel); this.selector = selector; } @Override protected void configureChannel(Channel channel) { channel.attr(FMLOutboundHandler.FML_MESSAGETARGET).set(selector); } } private static class FmlTargetedPacketSender<T> extends TargetedPacketSenderBase<T> { private final OutboundTarget selector; public FmlTargetedPacketSender(Channel channel, OutboundTarget selector) { super(channel); this.selector = selector; } @Override protected void configureChannel(Channel channel, T target) { channel.attr(FMLOutboundHandler.FML_MESSAGETARGET).set(selector); channel.attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(target); } } }