@Override public byte[] generatePacket(Object... data) { ByteArrayDataOutput dat = ByteStreams.newDataOutput(); Set<ModContainer> activeMods = FMLNetworkHandler.instance().getNetworkModList(); dat.writeInt(activeMods.size()); for (ModContainer mc : activeMods) { dat.writeUTF(mc.getModId()); } dat.writeByte(FMLNetworkHandler.getCompatibilityLevel()); return dat.toByteArray(); }
public void registerGuiHandler(Object mod, IGuiHandler handler) { ModContainer mc = FMLCommonHandler.instance().findContainerFor(mod); NetworkModHandler nmh = FMLNetworkHandler.instance().findNetworkModHandler(mc); if (nmh == null) { FMLLog.log( Level.FINE, "The mod %s needs to be a @NetworkMod to register a Networked Gui Handler", mc.getModId()); } else { serverGuiHandlers.put(mc, handler); } clientGuiHandlers.put(mc, handler); }
/** * This packet is executed on the client to evaluate the server's mod list against the client * * @see cpw.mods.fml.common.network.FMLPacket#execute(INetworkManager, FMLNetworkHandler, * NetHandler, String) */ @Override public void execute( INetworkManager mgr, FMLNetworkHandler handler, NetHandler netHandler, String userName) { List<String> missingMods = Lists.newArrayList(); Map<String, String> modVersions = Maps.newHashMap(); Map<String, ModContainer> indexedModList = Maps.newHashMap(Loader.instance().getIndexedModList()); for (String m : sentModList) { ModContainer mc = indexedModList.get(m); if (mc == null) { missingMods.add(m); continue; } indexedModList.remove(m); modVersions.put(m, mc.getVersion()); } if (indexedModList.size() > 0) { for (Entry<String, ModContainer> e : indexedModList.entrySet()) { if (e.getValue().isNetworkMod()) { NetworkModHandler missingHandler = FMLNetworkHandler.instance().findNetworkModHandler(e.getValue()); if (missingHandler.requiresServerSide()) { // TODO : what should we do if a mod is marked "serverSideRequired"? Stop the // connection? FMLLog.warning( "The mod %s was not found on the server you connected to, but requested that the server side be present", e.getKey()); } } } } FMLLog.fine("The server has compatibility level %d", compatibilityLevel); FMLCommonHandler.instance().getSidedDelegate().setClientCompatibilityLevel(compatibilityLevel); mgr.func_74429_a( PacketDispatcher.getPacket( "FML", FMLPacket.makePacket(MOD_LIST_RESPONSE, modVersions, missingMods))); }
void openRemoteGui( ModContainer mc, EntityPlayerMP player, int modGuiId, World world, int x, int y, int z) { IGuiHandler handler = serverGuiHandlers.get(mc); NetworkModHandler nmh = FMLNetworkHandler.instance().findNetworkModHandler(mc); if (handler != null && nmh != null) { Container container = (Container) handler.getServerGuiElement(modGuiId, player, world, x, y, z); if (container != null) { player.incrementWindowID(); player.closeInventory(); int windowId = player.currentWindowId; Packet250CustomPayload pkt = new Packet250CustomPayload(); pkt.channel = "FML"; pkt.data = FMLPacket.makePacket(Type.GUIOPEN, windowId, nmh.getNetworkId(), modGuiId, x, y, z); pkt.length = pkt.data.length; player.serverForThisPlayer.sendPacketToPlayer(pkt); player.craftingInventory = container; player.craftingInventory.windowId = windowId; player.craftingInventory.addCraftingToCrafters(player); } } }
public static Packet131ItemData getTinyPacket(Object var0, short var1, byte[] var2) { NetworkModHandler var3 = FMLNetworkHandler.instance().findNetworkModHandler(var0); return new Packet131ItemData((short) var3.getNetworkId(), var1, var2); }
@Override public void execute( INetworkManager network, FMLNetworkHandler handler, NetHandler netHandler, String userName) { Map<String, ModContainer> indexedModList = Maps.newHashMap(Loader.instance().getIndexedModList()); List<String> missingClientMods = Lists.newArrayList(); List<String> versionIncorrectMods = Lists.newArrayList(); for (String m : missingMods) { ModContainer mc = indexedModList.get(m); NetworkModHandler networkMod = handler.findNetworkModHandler(mc); if (networkMod.requiresClientSide()) { missingClientMods.add(m); } } for (Entry<String, String> modVersion : modVersions.entrySet()) { ModContainer mc = indexedModList.get(modVersion.getKey()); NetworkModHandler networkMod = handler.findNetworkModHandler(mc); if (!networkMod.acceptVersion(modVersion.getValue())) { versionIncorrectMods.add(modVersion.getKey()); } } Packet250CustomPayload pkt = new Packet250CustomPayload(); pkt.field_73630_a = "FML"; if (missingClientMods.size() > 0 || versionIncorrectMods.size() > 0) { pkt.field_73629_c = FMLPacket.makePacket(MOD_MISSING, missingClientMods, versionIncorrectMods); Logger.getLogger("Minecraft") .info( String.format( "User %s connection failed: missing %s, bad versions %s", userName, missingClientMods, versionIncorrectMods)); FMLLog.info( "User %s connection failed: missing %s, bad versions %s", userName, missingClientMods, versionIncorrectMods); // Mark this as bad FMLNetworkHandler.setHandlerState( (NetLoginHandler) netHandler, FMLNetworkHandler.MISSING_MODS_OR_VERSIONS); pkt.field_73628_b = pkt.field_73629_c.length; network.func_74429_a(pkt); } else { pkt.field_73629_c = FMLPacket.makePacket(MOD_IDENTIFIERS, netHandler); Logger.getLogger("Minecraft") .info(String.format("User %s connecting with mods %s", userName, modVersions.keySet())); FMLLog.info("User %s connecting with mods %s", userName, modVersions.keySet()); pkt.field_73628_b = pkt.field_73629_c.length; network.func_74429_a(pkt); NBTTagList itemList = new NBTTagList(); GameData.writeItemData(itemList); byte[][] registryPackets = FMLPacket.makePacketSet(MOD_IDMAP, itemList); for (int i = 0; i < registryPackets.length; i++) { network.func_74429_a(PacketDispatcher.getPacket("FML", registryPackets[i])); } } // reset the continuation flag - we have completed extra negotiation and the login should // complete now NetLoginHandler.func_72531_a((NetLoginHandler) netHandler, true); }