From 7f42cd94e012256b908439fb24acc456d08a9080 Mon Sep 17 00:00:00 2001 From: Chicken Bones Date: Mon, 5 Aug 2013 08:23:26 +1000 Subject: [PATCH] Acquire NetClientHandler for packets sent before the Player and World are established. --- codechicken/lib/packet/PacketCustom.java | 54 +++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/codechicken/lib/packet/PacketCustom.java b/codechicken/lib/packet/PacketCustom.java index 73e6235..49a2b9d 100644 --- a/codechicken/lib/packet/PacketCustom.java +++ b/codechicken/lib/packet/PacketCustom.java @@ -14,6 +14,7 @@ import codechicken.lib.vec.BlockCoord; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.common.network.FMLNetworkHandler; +import cpw.mods.fml.common.network.IConnectionHandler; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.ITinyPacketHandler; import cpw.mods.fml.common.network.NetworkModHandler; @@ -28,10 +29,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.INetworkManager; +import net.minecraft.network.NetLoginHandler; import net.minecraft.network.NetServerHandler; import net.minecraft.network.packet.NetHandler; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet131MapData; +import net.minecraft.network.packet.Packet1Login; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.management.PlayerInstance; @@ -148,6 +151,7 @@ public final class PacketCustom implements MCDataInput, MCDataOutput public ClientPacketHandler(String channel) { super(channel); + NetClientHandlerHelper.register(); } @Override @@ -159,7 +163,7 @@ public final class PacketCustom implements MCDataInput, MCDataOutput @Override public void handle(ICustomPacketHandler handler, PacketCustom packet, Player player) { - ((IClientPacketHandler)handler).handlePacket(packet, Minecraft.getMinecraft().getNetHandler(), Minecraft.getMinecraft()); + ((IClientPacketHandler)handler).handlePacket(packet, NetClientHandlerHelper.handler, Minecraft.getMinecraft()); } } @@ -254,6 +258,54 @@ public final class PacketCustom implements MCDataInput, MCDataOutput } } + private static class NetClientHandlerHelper implements IConnectionHandler + { + private static boolean registered = false; + public static NetClientHandler handler; + + public static void register() + { + if(registered) + return; + + NetworkRegistry.instance().registerConnectionHandler(new NetClientHandlerHelper()); + registered = true; + } + + @Override + public void connectionOpened(NetHandler netClientHandler, MinecraftServer server, INetworkManager manager) + { + handler = (NetClientHandler) netClientHandler; + } + + @Override + public void connectionOpened(NetHandler netClientHandler, String server, int port, INetworkManager manager) + { + handler = (NetClientHandler) netClientHandler; + } + + @Override + public void connectionClosed(INetworkManager manager) + { + } + + @Override + public String connectionReceived(NetLoginHandler netHandler, INetworkManager manager) + { + return null; + } + + @Override + public void clientLoggedIn(NetHandler clientHandler, INetworkManager manager, Packet1Login login) + { + } + + @Override + public void playerLoggedIn(Player player, NetHandler netHandler, INetworkManager manager) + { + } + } + public static interface IPacketCarrier { public int readType(Packet packet);