diff --git a/forge/forge_client/src/net/minecraft/src/forge/PacketHandlerClient.java b/forge/forge_client/src/net/minecraft/src/forge/PacketHandlerClient.java index 47f547cf3..1e697f0ba 100644 --- a/forge/forge_client/src/net/minecraft/src/forge/PacketHandlerClient.java +++ b/forge/forge_client/src/net/minecraft/src/forge/PacketHandlerClient.java @@ -37,11 +37,9 @@ public class PacketHandlerClient implements IPacketHandler break; case ForgePacket.MODLIST: - /* pkt = new PacketModList(false); pkt.readData(data); - */ - onModListCheck(net); + onModListCheck(net, (PacketModList)pkt); break; case ForgePacket.MOD_MISSING: @@ -50,12 +48,6 @@ public class PacketHandlerClient implements IPacketHandler onMissingMods((PacketMissingMods)pkt, net); break; - case ForgePacket.MOD_IDS: - pkt = new PacketModIDs(); - pkt.readData(data); - onModIDs((PacketModIDs)pkt); - break; - case ForgePacket.OPEN_GUI: pkt = new PacketOpenGUI(); pkt.readData(data); @@ -104,7 +96,7 @@ public class PacketHandlerClient implements IPacketHandler } entity.serverPosX = packet.posX; - entity.serverPosY = packet.posX; + entity.serverPosY = packet.posY; entity.serverPosZ = packet.posZ; entity.rotationYaw = 0.0F; entity.rotationPitch = 0.0F; @@ -142,16 +134,45 @@ public class PacketHandlerClient implements IPacketHandler } /** + * Sets up the list of ID to mod mappings. + * TODO; Make it display an error, and prompt if the user wishes to continue anyways + * if it detects that the server does not have a corresponding mod to one it has installed. + * * Sends a list of all loaded mods to the server. * For now, it it simple a String[] of mod.toString() + * * @param network The network connection to send the packet on. + * @param packet The Server to client packet containing a list of NetworkMod ID's */ - private void onModListCheck(NetClientHandler net) + private void onModListCheck(NetClientHandler net, PacketModList packet) { if (DEBUG) { - System.out.println("S->C: " + (new PacketModList(false)).toString(true)); + System.out.println("S->C: " + packet.toString(true)); } + + ForgeHooks.networkMods.clear(); + NetworkMod[] mods = MinecraftForge.getNetworkMods(); + for (NetworkMod mod : mods) + { + for (Entry entry : packet.ModIDs.entrySet()) + { + if (mod.toString().equals(entry.getValue())) + { + ForgeHooks.networkMods.put(entry.getKey(), mod); + } + } + } + ArrayList missing = new ArrayList(); + for (NetworkMod mod : mods) + { + if (MinecraftForge.getModID(mod) == -1 && mod.serverSideRequired()) + { + missing.add(mod); + } + } + //TODO: Display error/confirmation screen + PacketModList pkt = new PacketModList(false); pkt.Mods = new String[ModLoader.getLoadedMods().size()]; int x = 0; @@ -185,42 +206,6 @@ public class PacketHandlerClient implements IPacketHandler mc.displayGuiScreen(new GuiMissingMods(pkt)); } - /** - * Sets up the list of ID to mod mappings. - * TODO; Make it display an error, and prompt if the user wishes to continue anyways - * if it detects that the server does not have a corresponding mod to one it has installed. - * - * @param pkt The mod id packet - */ - private void onModIDs(PacketModIDs pkt) - { - if (DEBUG) - { - System.out.println("S->C: " + pkt.toString(true)); - } - ForgeHooks.networkMods.clear(); - NetworkMod[] mods = MinecraftForge.getNetworkMods(); - for (NetworkMod mod : mods) - { - for (Entry entry : pkt.Mods.entrySet()) - { - if (mod.toString().equals(entry.getValue())) - { - ForgeHooks.networkMods.put(entry.getKey(), mod); - } - } - } - ArrayList missing = new ArrayList(); - for (NetworkMod mod : mods) - { - if (MinecraftForge.getModID(mod) == -1 && mod.serverSideRequired()) - { - missing.add(mod); - } - } - //TODO: Display error/confirmation screen - } - /** * Handles opening the Gui for the player. * diff --git a/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java b/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java index 9213e1b87..fd0e9026f 100755 --- a/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java +++ b/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java @@ -912,7 +912,7 @@ public class MinecraftForge for (Map.Entry entry : ForgeHooks.entityTrackerMap.entrySet()) { EntityTrackerInfo info = entry.getValue(); - if (type == info.ID && modID == info.Mod.toString().hashCode()) + if (type == info.ID && modID == getModID(info.Mod)) { return entry.getKey(); } diff --git a/forge/forge_common/net/minecraft/src/forge/packets/ForgePacket.java b/forge/forge_common/net/minecraft/src/forge/packets/ForgePacket.java index 262b66b2e..49e54121f 100644 --- a/forge/forge_common/net/minecraft/src/forge/packets/ForgePacket.java +++ b/forge/forge_common/net/minecraft/src/forge/packets/ForgePacket.java @@ -17,7 +17,6 @@ public abstract class ForgePacket public static final int SPAWN = 1; public static final int MODLIST = 2; public static final int MOD_MISSING = 3; - public static final int MOD_IDS = 4; public static final int OPEN_GUI = 5; public Packet getPacket() diff --git a/forge/forge_common/net/minecraft/src/forge/packets/PacketModIDs.java b/forge/forge_common/net/minecraft/src/forge/packets/PacketModIDs.java deleted file mode 100644 index 38ab34a4d..000000000 --- a/forge/forge_common/net/minecraft/src/forge/packets/PacketModIDs.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.minecraft.src.forge.packets; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Hashtable; -import java.util.Map.Entry; - -public class PacketModIDs extends ForgePacket -{ - public Hashtable Mods = new Hashtable(); - public int Length; - - @Override - public void writeData(DataOutputStream data) throws IOException - { - data.writeInt(Mods.size()); - for (Entry entry : Mods.entrySet()) - { - data.writeInt(entry.getKey()); - data.writeUTF(entry.getValue()); - } - } - - @Override - public void readData(DataInputStream data) throws IOException - { - Length = data.readInt(); - for (int x = 0; x < Length; x++) - { - Mods.put(data.readInt(), data.readUTF()); - } - } - - @Override - public int getID() - { - return ForgePacket.MOD_IDS; - } - - @Override - public String toString(boolean full) - { - if (full) - { - StringBuilder ret = new StringBuilder(); - ret.append(toString()).append('\n'); - for (Entry mod : Mods.entrySet()) - { - ret.append(String.format(" %5d ", mod.getKey()) + mod.getValue() + '\n'); - } - return ret.toString(); - } - else - { - return toString(); - } - } - -} diff --git a/forge/forge_common/net/minecraft/src/forge/packets/PacketModList.java b/forge/forge_common/net/minecraft/src/forge/packets/PacketModList.java index 2c65397e9..bd02438cb 100644 --- a/forge/forge_common/net/minecraft/src/forge/packets/PacketModList.java +++ b/forge/forge_common/net/minecraft/src/forge/packets/PacketModList.java @@ -3,12 +3,15 @@ package net.minecraft.src.forge.packets; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.util.Hashtable; import java.util.List; +import java.util.Map.Entry; public class PacketModList extends ForgePacket { private boolean isServer = false; public String[] Mods; + public Hashtable ModIDs = new Hashtable(); public int Length = -1; public PacketModList(boolean server) @@ -27,6 +30,15 @@ public class PacketModList extends ForgePacket data.writeUTF(mod); } } + else + { + data.writeInt(ModIDs.size()); + for (Entry entry : ModIDs.entrySet()) + { + data.writeInt(entry.getKey()); + data.writeUTF(entry.getValue()); + } + } } @Override @@ -44,6 +56,14 @@ public class PacketModList extends ForgePacket } } } + else + { + Length = data.readInt(); + for (int x = 0; x < Length; x++) + { + ModIDs.put(data.readInt(), data.readUTF()); + } + } } @Override @@ -66,6 +86,13 @@ public class PacketModList extends ForgePacket ret.append(" " + mod + '\n'); } } + else if (ModIDs.size() != 0) + { + for (Entry mod : ModIDs.entrySet()) + { + ret.append(String.format(" %03d ", mod.getKey()) + mod.getValue() + '\n'); + } + } return ret.toString(); } else diff --git a/forge/forge_server/src/net/minecraft/src/forge/ForgeHooksServer.java b/forge/forge_server/src/net/minecraft/src/forge/ForgeHooksServer.java index a0c33acc1..d59008477 100644 --- a/forge/forge_server/src/net/minecraft/src/forge/ForgeHooksServer.java +++ b/forge/forge_server/src/net/minecraft/src/forge/ForgeHooksServer.java @@ -28,7 +28,14 @@ public class ForgeHooksServer public static void sendModListRequest(NetworkManager net) { + NetworkMod[] list = MinecraftForge.getNetworkMods(); PacketModList pkt = new PacketModList(true); + + for (NetworkMod mod : list) + { + pkt.ModIDs.put(MinecraftForge.getModID(mod), mod.toString()); + } + ((NetServerHandler)net.getNetHandler()).sendPacket(pkt.getPacket()); if (((PacketHandlerServer)ForgeHooks.getPacketHandler()).DEBUG) { diff --git a/forge/forge_server/src/net/minecraft/src/forge/PacketHandlerServer.java b/forge/forge_server/src/net/minecraft/src/forge/PacketHandlerServer.java index 9d15924bb..d5b8ca7d0 100644 --- a/forge/forge_server/src/net/minecraft/src/forge/PacketHandlerServer.java +++ b/forge/forge_server/src/net/minecraft/src/forge/PacketHandlerServer.java @@ -91,10 +91,6 @@ public class PacketHandlerServer implements IPacketHandler { doMissingMods(net, missing); } - else - { - sendModIDs(net, serverMods); - } } /** @@ -117,29 +113,7 @@ public class PacketHandlerServer implements IPacketHandler net.sendPacket(pkt.getPacket()); disconnectUser(net); } - - - /** - * Sends a list of mod id mappings to the client. - * Only mod ID's are sent, not item or blocks. - * - * @param net The network handler - * @param list A list of network mods - */ - private void sendModIDs(NetServerHandler net, NetworkMod[] list) - { - PacketModIDs pkt = new PacketModIDs(); - for (NetworkMod mod : list) - { - pkt.Mods.put(MinecraftForge.getModID(mod), mod.toString()); - } - net.sendPacket(pkt.getPacket()); - if (DEBUG) - { - System.out.println("S->C: " + pkt.toString(true)); - } - } - + /** * Disconnects the player just like kicking them, just without the kick message. * @param net The network handler