mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
Fix up MC version compatibility checking to be a little less verbose.
If people use properly formatted version compatibility strings, or the default compiled in one, this will work exactly as before, but has less dependence on specific formats for the mcversion string. So a mod declaring [1.11, 1.12] will now be 1.12.1 compatible by default, for example.
This commit is contained in:
1 parent
f73c7cb764
commit
1927fd76e2
3 files changed
+24
-17
No files matched your search
@@ -31,15 +31,17 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
|
||||
import net.minecraftforge.fml.common.versioning.VersionRange;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import net.minecraftforge.fml.common.FMLLog;
|
||||
import net.minecraftforge.fml.common.InjectedModContainer;
|
||||
import net.minecraftforge.fml.common.Loader;
|
||||
import net.minecraftforge.fml.common.ModContainer;
|
||||
@@ -60,6 +62,7 @@ public class ForgeVersion
|
||||
//This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code.
|
||||
public static final int buildVersion = 0;
|
||||
// This is the minecraft version we're building for - used in various places in Forge/FML code
|
||||
// Update version compatibility list below if there is SRG compatibility between this version and some previous versions
|
||||
public static final String mcVersion = "1.12.1";
|
||||
// This is the MCP data version we're using
|
||||
public static final String mcpVersion = "9.41";
|
||||
@@ -68,6 +71,12 @@ public class ForgeVersion
|
||||
@SuppressWarnings("unused")
|
||||
private static String target = null;
|
||||
|
||||
/*
|
||||
* Version compatibility. Add new version strings for each version we're SRG compatible with.
|
||||
* Reset the list to empty only when incompatible changes occur.
|
||||
*/
|
||||
private static String[] extraCompatibleVersions = { "1.12" };
|
||||
|
||||
private static final Logger log = LogManager.getLogger("ForgeVersionCheck");
|
||||
|
||||
public static int getMajorVersion()
|
||||
@@ -107,6 +116,15 @@ public class ForgeVersion
|
||||
return String.format("%d.%d.%d.%d", majorVersion, minorVersion, revisionVersion, buildVersion);
|
||||
}
|
||||
|
||||
// We add in the current version (we're compatible with it) and test additional versions for compatibility
|
||||
private static List<DefaultArtifactVersion> COMPATIBLE_VERSIONS = Stream.concat(Stream.of(mcVersion), Stream.of(extraCompatibleVersions))
|
||||
.map(s -> new DefaultArtifactVersion("dummy", s)).collect(Collectors.toList());
|
||||
|
||||
// Tests the mod supplied version range for compatibility with our version compatibility list
|
||||
public static boolean testMinecraftVersionCompatibility(VersionRange modVersion) {
|
||||
return COMPATIBLE_VERSIONS.stream().anyMatch(modVersion::containsVersion);
|
||||
}
|
||||
|
||||
public static enum Status
|
||||
{
|
||||
PENDING(),
|
||||
|
||||
@@ -67,7 +67,6 @@ import java.util.function.Function;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableList.Builder;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
@@ -256,16 +255,7 @@ public class FMLModContainer implements ModContainer
|
||||
}
|
||||
|
||||
String mcVersionString = (String)descriptor.get("acceptedMinecraftVersions");
|
||||
if ("[1.8.8]".equals(mcVersionString)) mcVersionString = "[1.8.8,1.8.9]"; // MC 1.8.8 and 1.8.9 is forward SRG compatible so accept these versions by default.
|
||||
if ("[1.9.4]".equals(mcVersionString) ||
|
||||
"[1.9,1.9.4]".equals(mcVersionString) ||
|
||||
"[1.9.4,1.10)".equals(mcVersionString) ||
|
||||
"[1.10]".equals(mcVersionString))
|
||||
mcVersionString = "[1.9.4,1.10.2]";
|
||||
if ("[1.11]".equals(mcVersionString))
|
||||
mcVersionString = "[1.11,1.11.2]";
|
||||
if ("[1.12]".equals(mcVersionString))
|
||||
mcVersionString = "[1.12,1.12.1]";
|
||||
|
||||
if (!Strings.isNullOrEmpty(mcVersionString))
|
||||
{
|
||||
minecraftAccepted = VersionParser.parseRange(mcVersionString);
|
||||
|
||||
@@ -26,7 +26,6 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -35,6 +34,7 @@ import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.ForgeVersion;
|
||||
import net.minecraftforge.common.capabilities.CapabilityManager;
|
||||
import net.minecraftforge.common.config.ConfigManager;
|
||||
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||
@@ -62,7 +62,6 @@ import org.apache.commons.io.IOUtils;
|
||||
import org.apache.logging.log4j.Level;
|
||||
|
||||
import com.google.common.base.CharMatcher;
|
||||
import java.util.function.Function;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
@@ -238,9 +237,9 @@ public class Loader
|
||||
ArrayListMultimap<String, String> reqList = ArrayListMultimap.create();
|
||||
for (ModContainer mod : getActiveModList())
|
||||
{
|
||||
if (!mod.acceptableMinecraftVersionRange().containsVersion(minecraft.getProcessedVersion()))
|
||||
if (!ForgeVersion.testMinecraftVersionCompatibility(mod.acceptableMinecraftVersionRange()))
|
||||
{
|
||||
FMLLog.log.fatal("The mod {} does not wish to run in Minecraft version {}. You will have to remove it to play.", mod.getModId(), getMCVersionString());
|
||||
FMLLog.log.fatal("The mod {} does not wish to run in Minecraft version {}. It is compatible with {}. You will have to remove it to play.", mod.getModId(), getMCVersionString(), mod.acceptableMinecraftVersionRange());
|
||||
WrongMinecraftVersionException ret = new WrongMinecraftVersionException(mod, getMCVersionString());
|
||||
FMLLog.log.fatal(ret.getMessage());
|
||||
wrongMinecraftExceptions.add(ret);
|
||||
|
||||
Reference in new issue
Block a user