public class NetworkManager{
private FMLEventChannel channel;
private String channelName;
private IPacketHandler packetHandler;
public NetworkManager(String name, IPacketHandler pktHandler){
channelName = name;
channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(channelName);
channel.register(this);
packetHandler = pktHandler;
}
public static NetworkManager registerPacketHandler(String name, IPacketHandler packetHandler){
return new NetworkManager(name, packetHandler);
}
@SubscribeEvent
public void onServerPacket(ServerCustomPacketEvent e){
EntityPlayerMP player = ((NetHandlerPlayServer)e.handler).playerEntity;
ByteBuf buf = e.packet.payload();
packetHandler.handleServerSide(buf, player.worldObj, player);
}
@SubscribeEvent
public void onClientPacket(ClientCustomPacketEvent event){
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
ByteBuf buf = event.packet.payload();
packetHandler.handleClientSide(buf, player.worldObj, player);
}
public void sendToServer(FMLProxyPacket packet){
channel.sendToServer(packet);
}
public void sendToAll(FMLProxyPacket packet){
channel.sendToAll(packet);
}
public void sendTo(FMLProxyPacket packet, EntityPlayerMP player){
channel.sendTo(packet, player);
}
public void sendToAllAround(FMLProxyPacket packet, double x, double y, double z, double range, int dim){
channel.sendToAllAround(packet, new TargetPoint(dim, x, y, z, range));
}
public void sendToDimension(FMLProxyPacket packet, int id){
channel.sendToDimension(packet, id);
}
public FMLProxyPacket createPacket(Object... data){
return createPacket(Unpooled.buffer(32), data);
}
public FMLProxyPacket createPacket(ByteBuf buf, Object... data){
for(Object obj : data){
if(obj instanceof Byte){
buf.writeByte((Byte)obj);
}
if(obj instanceof Short){
buf.writeShort((Short)obj);
}
if(obj instanceof Integer){
buf.writeInt((Integer)obj);
}
if(obj instanceof Float){
buf.writeFloat((Float)obj);
}
if(obj instanceof Double){
buf.writeDouble((Double)obj);
}
if(obj instanceof Long){
buf.writeLong((Long)obj);
}
if(obj instanceof Character){
buf.writeChar((Character)obj);
}
if(obj instanceof String){
ByteBufUtils.writeUTF8String(buf, (String)obj);
}
if(obj instanceof ItemStack){
ByteBufUtils.writeItemStack(buf, (ItemStack)obj);
}
if(obj instanceof NBTTagCompound){
ByteBufUtils.writeTag(buf, (NBTTagCompound)obj);
}
}
return new FMLProxyPacket(buf, channelName);
}
}