package openmods.network;
import com.google.common.collect.ImmutableList;
import cpw.mods.fml.common.network.FMLOutboundHandler.OutboundTarget;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import io.netty.channel.embedded.EmbeddedChannel;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import openmods.network.senders.ExtPacketSenderFactory;
import openmods.network.senders.FmlPacketSenderFactory;
import openmods.network.senders.IPacketSender;
import openmods.network.senders.ITargetedPacketSender;
public abstract class Dispatcher {
protected abstract EmbeddedChannel getChannel(Side side);
protected EmbeddedChannel serverChannel() {
return getChannel(Side.SERVER);
}
protected EmbeddedChannel clientChannel() {
return getChannel(Side.CLIENT);
}
public class Senders {
public final IPacketSender client = FmlPacketSenderFactory.createSender(clientChannel(), OutboundTarget.TOSERVER);
public final IPacketSender global = FmlPacketSenderFactory.createSender(serverChannel(), OutboundTarget.ALL);
public final IPacketSender nowhere = FmlPacketSenderFactory.createSender(serverChannel(), OutboundTarget.NOWHERE);
public final ITargetedPacketSender<EntityPlayer> player = FmlPacketSenderFactory.createPlayerSender(serverChannel());
public final ITargetedPacketSender<Integer> dimension = FmlPacketSenderFactory.createDimensionSender(serverChannel());
public final ITargetedPacketSender<TargetPoint> point = FmlPacketSenderFactory.createPointSender(serverChannel());
public final ITargetedPacketSender<DimCoord> block = ExtPacketSenderFactory.createBlockSender(serverChannel());
public final ITargetedPacketSender<Entity> entity = ExtPacketSenderFactory.createEntitySender(serverChannel());
public List<Object> serialize(Object msg) {
nowhere.sendMessage(msg);
ImmutableList.Builder<Object> result = ImmutableList.builder();
Object packet;
while ((packet = serverChannel().outboundMessages().poll()) != null)
result.add(packet);
return result.build();
}
}
}