Fix mod version checking
This commit is contained in:
parent
0be4719fd5
commit
af73743eb7
1 changed files with 30 additions and 5 deletions
|
@ -17,6 +17,7 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.apache.logging.log4j.Level;
|
import org.apache.logging.log4j.Level;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.SetMultimap;
|
import com.google.common.collect.SetMultimap;
|
||||||
|
@ -33,7 +34,7 @@ import cpw.mods.fml.relauncher.Side;
|
||||||
|
|
||||||
public class NetworkModHolder
|
public class NetworkModHolder
|
||||||
{
|
{
|
||||||
private abstract class NetworkChecker {
|
public abstract class NetworkChecker {
|
||||||
public abstract boolean check(Map<String,String> remoteVersions, Side side);
|
public abstract boolean check(Map<String,String> remoteVersions, Side side);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +44,11 @@ public class NetworkModHolder
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "No network checking performed";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private class DefaultNetworkChecker extends NetworkChecker {
|
private class DefaultNetworkChecker extends NetworkChecker {
|
||||||
@Override
|
@Override
|
||||||
|
@ -50,7 +56,11 @@ public class NetworkModHolder
|
||||||
{
|
{
|
||||||
return remoteVersions.containsKey(container.getModId()) ? acceptVersion(remoteVersions.get(container.getModId())) : false;
|
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 {
|
private class MethodNetworkChecker extends NetworkChecker {
|
||||||
@Override
|
@Override
|
||||||
|
@ -66,6 +76,11 @@ public class NetworkModHolder
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return String.format("Invoking method %s", checkHandler.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private static int assignedIds = 1;
|
private static int assignedIds = 1;
|
||||||
|
|
||||||
|
@ -85,6 +100,12 @@ public class NetworkModHolder
|
||||||
this.localId = assignedIds++;
|
this.localId = assignedIds++;
|
||||||
this.networkId = this.localId;
|
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)
|
public NetworkModHolder(ModContainer container, Class<?> modClass, String acceptableVersionRange, ASMDataTable table)
|
||||||
{
|
{
|
||||||
this(container);
|
this(container);
|
||||||
|
@ -144,7 +165,12 @@ public class NetworkModHolder
|
||||||
if (this.checkHandler != null)
|
if (this.checkHandler != null)
|
||||||
{
|
{
|
||||||
this.checker = new MethodNetworkChecker();
|
this.checker = new MethodNetworkChecker();
|
||||||
} else if (!Strings.isNullOrEmpty(acceptableVersionRange) && !acceptableVersionRange.equals('*'))
|
}
|
||||||
|
else if (!Strings.isNullOrEmpty(acceptableVersionRange) && acceptableVersionRange.equals("*"))
|
||||||
|
{
|
||||||
|
this.checker = new IgnoredChecker();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
try
|
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());
|
FMLLog.log(Level.WARN, e, "Invalid bounded range %s specified for network mod id %s", acceptableVersionRange, container.getModId());
|
||||||
}
|
}
|
||||||
this.checker = new DefaultNetworkChecker();
|
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());
|
FMLLog.finer("Testing mod %s to verify it accepts its own version in a remote connection", container.getModId());
|
||||||
boolean acceptsSelf = acceptVersion(container.getVersion());
|
boolean acceptsSelf = acceptVersion(container.getVersion());
|
||||||
if (!acceptsSelf)
|
if (!acceptsSelf)
|
||||||
|
|
Loading…
Reference in a new issue