2025-01-28 13:39:46 -05:00
|
|
|
package kamkeel.network;
|
|
|
|
|
|
|
|
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
|
|
|
import cpw.mods.fml.common.network.FMLEventChannel;
|
|
|
|
|
import cpw.mods.fml.common.network.FMLNetworkEvent;
|
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry;
|
|
|
|
|
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
|
2025-01-28 14:37:07 -05:00
|
|
|
import io.netty.buffer.ByteBuf;
|
2025-01-28 18:14:18 -05:00
|
|
|
import kamkeel.network.AbstractPacket;
|
|
|
|
|
import kamkeel.network.PacketChannel;
|
2025-01-28 14:37:07 -05:00
|
|
|
import kamkeel.network.enums.EnumPacketType;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2025-01-28 13:39:46 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
|
|
|
import net.minecraft.network.NetHandlerPlayServer;
|
|
|
|
|
import noppes.npcs.CustomNpcs;
|
|
|
|
|
|
2025-01-28 18:14:18 -05:00
|
|
|
import java.io.IOException;
|
2025-01-28 14:37:07 -05:00
|
|
|
import java.util.*;
|
2025-01-28 13:39:46 -05:00
|
|
|
|
|
|
|
|
public final class PacketHandler {
|
|
|
|
|
public static PacketHandler Instance;
|
|
|
|
|
|
2025-01-28 14:37:07 -05:00
|
|
|
public Map<EnumPacketType, FMLEventChannel> channels = new Hashtable<>();
|
2025-01-28 13:39:46 -05:00
|
|
|
|
2025-01-28 14:37:07 -05:00
|
|
|
public final static PacketChannel INFO_PACKET = new PacketChannel("CNPC+|Info", EnumPacketType.INFO);
|
|
|
|
|
public final static PacketChannel DATA_PACKET = new PacketChannel("CNPC+|Data", EnumPacketType.DATA);
|
|
|
|
|
public final static PacketChannel CLIENT_PACKET = new PacketChannel("CNPC+|Client", EnumPacketType.CLIENT);
|
|
|
|
|
public final static PacketChannel LARGE_PACKET = new PacketChannel("CNPC+|Large", EnumPacketType.LARGE);
|
|
|
|
|
|
|
|
|
|
public final static List<PacketChannel> packetChannels = new ArrayList<>();
|
2025-01-28 13:39:46 -05:00
|
|
|
|
|
|
|
|
public PacketHandler() {
|
|
|
|
|
// Register Channels
|
2025-01-28 14:37:07 -05:00
|
|
|
packetChannels.add(INFO_PACKET);
|
|
|
|
|
packetChannels.add(DATA_PACKET);
|
|
|
|
|
packetChannels.add(CLIENT_PACKET);
|
2025-01-28 18:14:18 -05:00
|
|
|
packetChannels.add(LARGE_PACKET);
|
2025-01-28 13:39:46 -05:00
|
|
|
this.registerChannels();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void registerChannels() {
|
|
|
|
|
FMLEventChannel eventChannel;
|
2025-01-28 14:37:07 -05:00
|
|
|
for (PacketChannel channel : packetChannels) {
|
|
|
|
|
eventChannel = NetworkRegistry.INSTANCE.newEventDrivenChannel(channel.getChannelName());
|
2025-01-28 13:39:46 -05:00
|
|
|
eventChannel.register(this);
|
2025-01-28 14:37:07 -05:00
|
|
|
channels.put(channel.getChannelType(), eventChannel);
|
2025-01-28 13:39:46 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-28 14:37:07 -05:00
|
|
|
public PacketChannel getPacketChannel(EnumPacketType type){
|
|
|
|
|
PacketChannel packetChannel;
|
|
|
|
|
switch (type){
|
|
|
|
|
case DATA:
|
|
|
|
|
packetChannel = DATA_PACKET;
|
|
|
|
|
break;
|
|
|
|
|
case INFO:
|
|
|
|
|
packetChannel = INFO_PACKET;
|
|
|
|
|
break;
|
|
|
|
|
case LARGE:
|
|
|
|
|
packetChannel = LARGE_PACKET;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
packetChannel = CLIENT_PACKET;
|
|
|
|
|
break;
|
2025-01-28 13:39:46 -05:00
|
|
|
}
|
2025-01-28 14:37:07 -05:00
|
|
|
return packetChannel;
|
2025-01-28 13:39:46 -05:00
|
|
|
}
|
2025-01-28 18:14:18 -05:00
|
|
|
|
|
|
|
|
public FMLEventChannel getEventChannel(AbstractPacket abstractPacket){
|
|
|
|
|
return channels.get(getPacketChannel(abstractPacket.getChannel().getChannelType()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void onServerPacket(FMLNetworkEvent.ServerCustomPacketEvent event) {
|
|
|
|
|
try {
|
|
|
|
|
handlePacket(event.packet, ((NetHandlerPlayServer) event.handler).playerEntity);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void onClientPacket(FMLNetworkEvent.ClientCustomPacketEvent event) {
|
|
|
|
|
try {
|
|
|
|
|
handlePacket(event.packet, CustomNpcs.proxy.getPlayer());
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void handlePacket(FMLProxyPacket packet, EntityPlayer player) {
|
|
|
|
|
ByteBuf buf = packet.payload();
|
|
|
|
|
try {
|
|
|
|
|
int channelTypeOrdinal = buf.readInt();
|
|
|
|
|
int packetTypeOrdinal = buf.readInt();
|
|
|
|
|
|
|
|
|
|
EnumPacketType channelType = EnumPacketType.values()[channelTypeOrdinal];
|
|
|
|
|
PacketChannel packetChannel = getPacketChannel(channelType);
|
|
|
|
|
|
|
|
|
|
AbstractPacket abstractPacket = packetChannel.packets.get(packetTypeOrdinal);
|
|
|
|
|
if (abstractPacket != null) {
|
|
|
|
|
try {
|
|
|
|
|
abstractPacket.receiveData(buf, player);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void sendToPlayer(AbstractPacket packet, EntityPlayerMP player) {
|
|
|
|
|
try {
|
|
|
|
|
FMLProxyPacket proxyPacket = packet.generatePacket();
|
|
|
|
|
getEventChannel(packet).sendTo(proxyPacket, player);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void sendToServer(AbstractPacket packet) {
|
|
|
|
|
try {
|
|
|
|
|
FMLProxyPacket proxyPacket = packet.generatePacket();
|
|
|
|
|
getEventChannel(packet).sendToServer(proxyPacket);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void sendToAll(AbstractPacket packet) {
|
|
|
|
|
try {
|
|
|
|
|
FMLProxyPacket proxyPacket = packet.generatePacket();
|
|
|
|
|
getEventChannel(packet).sendToAll(proxyPacket);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void sendToAllAround(AbstractPacket packet, NetworkRegistry.TargetPoint point) {
|
|
|
|
|
try {
|
|
|
|
|
FMLProxyPacket proxyPacket = packet.generatePacket();
|
|
|
|
|
getEventChannel(packet).sendToAllAround(proxyPacket, point);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void sendToDimension(AbstractPacket packet, int dimensionId) {
|
|
|
|
|
try {
|
|
|
|
|
FMLProxyPacket proxyPacket = packet.generatePacket();
|
|
|
|
|
getEventChannel(packet).sendToDimension(proxyPacket, dimensionId);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-28 13:39:46 -05:00
|
|
|
}
|