diff --git a/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java b/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java index 1be0b029f..99f47254a 100644 --- a/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java +++ b/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java @@ -26,6 +26,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.lang.ref.WeakReference; import java.nio.charset.StandardCharsets; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -635,8 +636,9 @@ public class FMLCommonHandler if (packet.getRequestedState() == EnumConnectionState.LOGIN && (!NetworkRegistry.INSTANCE.isVanillaAccepted(Side.CLIENT) && !packet.hasFMLMarker())) { manager.setConnectionState(EnumConnectionState.LOGIN); - TextComponentString text = new TextComponentString("This server requires FML/Forge to be installed. Contact your server admin for more details."); - FMLLog.log.info("Disconnecting Player: {}", text.getUnformattedText()); + TextComponentString text = new TextComponentString("This server has mods that require FML/Forge to be installed on the client. Contact your server admin for more details."); + Collection modNames = NetworkRegistry.INSTANCE.getRequiredMods(Side.CLIENT); + FMLLog.log.info("Disconnecting Player: This server has mods that require FML/Forge to be installed on the client: {}", modNames); manager.sendPacket(new SPacketDisconnect(text)); manager.closeChannel(text); return false; diff --git a/src/main/java/net/minecraftforge/fml/common/network/NetworkRegistry.java b/src/main/java/net/minecraftforge/fml/common/network/NetworkRegistry.java index 53aeed772..4d658b029 100644 --- a/src/main/java/net/minecraftforge/fml/common/network/NetworkRegistry.java +++ b/src/main/java/net/minecraftforge/fml/common/network/NetworkRegistry.java @@ -24,10 +24,12 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageCodec; import io.netty.util.AttributeKey; +import java.util.Collection; import java.util.EnumMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Collectors; import org.apache.logging.log4j.Level; @@ -304,13 +306,19 @@ public enum NetworkRegistry public boolean isVanillaAccepted(Side from) { - boolean result = true; - for (Entry e : registry.entrySet()) - { - result &= e.getValue().acceptsVanilla(from); - } - return result; + return registry.values().stream() + .allMatch(mod -> mod.acceptsVanilla(from)); } + + public Collection getRequiredMods(Side from) + { + return registry.values().stream() + .filter(mod -> !mod.acceptsVanilla(from)) + .map(mod -> mod.getContainer().getName()) + .sorted() + .collect(Collectors.toList()); + } + public Map registry() { return ImmutableMap.copyOf(registry);