From af73743eb7e3c4c5a2afa82e00e909fdadaa582d Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 30 Apr 2014 22:26:16 -0400 Subject: [PATCH] Fix mod version checking --- .../network/internal/NetworkModHolder.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/network/internal/NetworkModHolder.java b/fml/src/main/java/cpw/mods/fml/common/network/internal/NetworkModHolder.java index ff0bd484d0..696ba9a1dd 100644 --- a/fml/src/main/java/cpw/mods/fml/common/network/internal/NetworkModHolder.java +++ b/fml/src/main/java/cpw/mods/fml/common/network/internal/NetworkModHolder.java @@ -17,6 +17,7 @@ import java.util.Map; import java.util.Set; import org.apache.logging.log4j.Level; +import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import com.google.common.collect.SetMultimap; @@ -33,7 +34,7 @@ import cpw.mods.fml.relauncher.Side; public class NetworkModHolder { - private abstract class NetworkChecker { + public abstract class NetworkChecker { public abstract boolean check(Map remoteVersions, Side side); } @@ -43,6 +44,11 @@ public class NetworkModHolder { return true; } + @Override + public String toString() + { + return "No network checking performed"; + } } private class DefaultNetworkChecker extends NetworkChecker { @Override @@ -50,7 +56,11 @@ public class NetworkModHolder { return remoteVersions.containsKey(container.getModId()) ? acceptVersion(remoteVersions.get(container.getModId())) : false; } - + @Override + public String toString() + { + return acceptableRange != null ? String.format("Accepting range %s", acceptableRange) : String.format("Accepting version %s", container.getVersion()); + } } private class MethodNetworkChecker extends NetworkChecker { @Override @@ -66,6 +76,11 @@ public class NetworkModHolder return false; } } + @Override + public String toString() + { + return String.format("Invoking method %s", checkHandler.getName()); + } } private static int assignedIds = 1; @@ -85,6 +100,12 @@ public class NetworkModHolder this.localId = assignedIds++; this.networkId = this.localId; } + public NetworkModHolder(ModContainer container, NetworkChecker checker) + { + this(container); + this.checker = Preconditions.checkNotNull(checker); + FMLLog.fine("The mod %s is using a custom checker %s", container.getModId(), checker.getClass().getName()); + } public NetworkModHolder(ModContainer container, Class modClass, String acceptableVersionRange, ASMDataTable table) { this(container); @@ -144,7 +165,12 @@ public class NetworkModHolder if (this.checkHandler != null) { this.checker = new MethodNetworkChecker(); - } else if (!Strings.isNullOrEmpty(acceptableVersionRange) && !acceptableVersionRange.equals('*')) + } + else if (!Strings.isNullOrEmpty(acceptableVersionRange) && acceptableVersionRange.equals("*")) + { + this.checker = new IgnoredChecker(); + } + else { try { @@ -155,9 +181,8 @@ public class NetworkModHolder FMLLog.log(Level.WARN, e, "Invalid bounded range %s specified for network mod id %s", acceptableVersionRange, container.getModId()); } this.checker = new DefaultNetworkChecker(); - } else { - this.checker = new IgnoredChecker(); } + FMLLog.finer("Mod %s is using network checker : %s", container.getModId(), this.checker); FMLLog.finer("Testing mod %s to verify it accepts its own version in a remote connection", container.getModId()); boolean acceptsSelf = acceptVersion(container.getVersion()); if (!acceptsSelf)