From 92ebab79a7572679210c51f70dddd02b76b874b2 Mon Sep 17 00:00:00 2001 From: izstas Date: Sun, 4 Aug 2013 19:09:43 +0400 Subject: [PATCH 1/2] IClientPacketHandler can now get non-null NetClientHandler before log in --- codechicken/lib/packet/PacketCustom.java | 44 ++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/codechicken/lib/packet/PacketCustom.java b/codechicken/lib/packet/PacketCustom.java index 73e6235..784b54c 100644 --- a/codechicken/lib/packet/PacketCustom.java +++ b/codechicken/lib/packet/PacketCustom.java @@ -14,6 +14,7 @@ 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,9 +29,11 @@ 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.Packet1Login; import net.minecraft.network.packet.Packet131MapData; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.server.MinecraftServer; @@ -143,11 +146,48 @@ public void registerRange(int firstID, int lastID, ICustomPacketHandler handler) public abstract void handle(ICustomPacketHandler handler, PacketCustom packet, Player player); } - private static class ClientPacketHandler extends CustomPacketHandler + private static class ClientPacketHandler extends CustomPacketHandler implements IConnectionHandler { + NetClientHandler netClientHandler; + public ClientPacketHandler(String channel) { super(channel); + NetworkRegistry.instance().registerConnectionHandler(this); + } + + @Override + public void connectionOpened(NetHandler netHandler, String server, int port, INetworkManager manager) + { + netClientHandler = (NetClientHandler) netHandler; + } + + @Override + public void connectionOpened(NetHandler netHandler, MinecraftServer server, INetworkManager manager) + { + netClientHandler = (NetClientHandler) netHandler; + } + + @Override + public void connectionClosed(INetworkManager manager) + { + netClientHandler = null; + } + + @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) + { } @Override @@ -159,7 +199,7 @@ public Side getSide() @Override public void handle(ICustomPacketHandler handler, PacketCustom packet, Player player) { - ((IClientPacketHandler)handler).handlePacket(packet, Minecraft.getMinecraft().getNetHandler(), Minecraft.getMinecraft()); + ((IClientPacketHandler)handler).handlePacket(packet, netClientHandler, Minecraft.getMinecraft()); } } From 1b6028a7e280c391b201b60467fd2014d6d7625f Mon Sep 17 00:00:00 2001 From: izstas Date: Sun, 4 Aug 2013 20:11:13 +0400 Subject: [PATCH 2/2] Moved IConnectionHandler implementation into separate class --- codechicken/lib/packet/PacketCustom.java | 101 ++++++++++++++--------- 1 file changed, 62 insertions(+), 39 deletions(-) diff --git a/codechicken/lib/packet/PacketCustom.java b/codechicken/lib/packet/PacketCustom.java index 784b54c..cc7509b 100644 --- a/codechicken/lib/packet/PacketCustom.java +++ b/codechicken/lib/packet/PacketCustom.java @@ -146,48 +146,12 @@ public void registerRange(int firstID, int lastID, ICustomPacketHandler handler) public abstract void handle(ICustomPacketHandler handler, PacketCustom packet, Player player); } - private static class ClientPacketHandler extends CustomPacketHandler implements IConnectionHandler + private static class ClientPacketHandler extends CustomPacketHandler { - NetClientHandler netClientHandler; - public ClientPacketHandler(String channel) { super(channel); - NetworkRegistry.instance().registerConnectionHandler(this); - } - - @Override - public void connectionOpened(NetHandler netHandler, String server, int port, INetworkManager manager) - { - netClientHandler = (NetClientHandler) netHandler; - } - - @Override - public void connectionOpened(NetHandler netHandler, MinecraftServer server, INetworkManager manager) - { - netClientHandler = (NetClientHandler) netHandler; - } - - @Override - public void connectionClosed(INetworkManager manager) - { - netClientHandler = null; - } - - @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) - { + NetClientHandlerHelper.register(); } @Override @@ -199,7 +163,7 @@ public Side getSide() @Override public void handle(ICustomPacketHandler handler, PacketCustom packet, Player player) { - ((IClientPacketHandler)handler).handlePacket(packet, netClientHandler, Minecraft.getMinecraft()); + ((IClientPacketHandler)handler).handlePacket(packet, NetClientHandlerHelper.getNetHandler(), Minecraft.getMinecraft()); } } @@ -294,6 +258,65 @@ else if(handler instanceof IServerPacketHandler) } } + private static class NetClientHandlerHelper implements IConnectionHandler + { + NetClientHandler netClientHandler; + + NetClientHandlerHelper() + { + NetworkRegistry.instance().registerConnectionHandler(this); + } + + @Override + public void connectionOpened(NetHandler netHandler, String server, int port, INetworkManager manager) + { + netClientHandler = (NetClientHandler) netHandler; + } + + @Override + public void connectionOpened(NetHandler netHandler, MinecraftServer server, INetworkManager manager) + { + netClientHandler = (NetClientHandler) netHandler; + } + + @Override + public void connectionClosed(INetworkManager manager) + { + netClientHandler = null; + } + + @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) + { + } + + static NetClientHandlerHelper instance; + + public static void register() + { + if (instance == null) + { + instance = new NetClientHandlerHelper(); + } + } + + public static NetClientHandler getNetHandler() + { + return instance.netClientHandler; + } + } + public static interface IPacketCarrier { public int readType(Packet packet);