package openmods.network.senders;
import cpw.mods.fml.common.network.FMLOutboundHandler;
import io.netty.channel.Channel;
import java.util.Collection;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import openmods.network.DimCoord;
import openmods.network.ExtendedOutboundHandler;
import openmods.network.IPacketTargetSelector;
import openmods.network.targets.SelectChunkWatchers;
import openmods.network.targets.SelectEntityWatchers;
import openmods.network.targets.SelectMultiplePlayers;
public class ExtPacketSenderFactory {
public static <T> ITargetedPacketSender<T> createSender(Channel channel, IPacketTargetSelector<T> selector) {
return new ExtTargetedPacketSender<T>(channel, selector);
}
public static ITargetedPacketSender<DimCoord> createBlockSender(Channel channel) {
return createSender(channel, SelectChunkWatchers.INSTANCE);
}
public static ITargetedPacketSender<Entity> createEntitySender(Channel channel) {
return createSender(channel, SelectEntityWatchers.INSTANCE);
}
public static ITargetedPacketSender<Collection<EntityPlayerMP>> createMultiplePlayersSender(Channel channel) {
return createSender(channel, SelectMultiplePlayers.INSTANCE);
}
private static class ExtTargetedPacketSender<T> extends TargetedPacketSenderBase<T> {
public final IPacketTargetSelector<T> selector;
public ExtTargetedPacketSender(Channel channel, IPacketTargetSelector<T> selector) {
super(channel);
this.selector = selector;
}
@Override
protected void configureChannel(Channel channel, T target) {
channel.attr(ExtendedOutboundHandler.MESSAGETARGET).set(selector);
channel.attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(target);
}
@Override
protected void cleanupChannel(Channel channel) {
channel.attr(ExtendedOutboundHandler.MESSAGETARGET).set(null);
}
}
}