From 2208f39d3db226cefa5b48d25920dd36674bef41 Mon Sep 17 00:00:00 2001 From: TonimatasDEV Date: Sat, 20 Jan 2024 18:00:10 +0100 Subject: [PATCH] Update Forge to 40.2.17 --- build.gradle | 2 +- .../minecraftforge/fml/IExtensionPoint.java | 19 +++++++++ .../net/minecraftforge/fml/ModContainer.java | 21 +++++++++- .../minecraftforge/fml/ModLoadingContext.java | 39 +++++++++++++++++ .../fml/loading/moddiscovery/ModInfo.java | 4 +- .../common/ForgeConfigSpec.java | 42 +++++++++---------- src/main/resources/META-INF/mods.toml | 3 +- 7 files changed, 103 insertions(+), 27 deletions(-) diff --git a/build.gradle b/build.gradle index d7f4a307..d4ffb0b7 100644 --- a/build.gradle +++ b/build.gradle @@ -63,7 +63,7 @@ ext { JARJAR_VERSION = '0.3.19' GIT_INFO = gradleutils.gitInfo - FORGE_VERSION = '40.2.14' + FORGE_VERSION = '40.2.17' MAGMA_VERSION = "1.18.2-$FORGE_VERSION-" + versioning.info.commit.substring(0, 7) // Use 8 characters for the commit hash VERSION = "1.18.2-$FORGE_VERSION" diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/IExtensionPoint.java b/fmlcore/src/main/java/net/minecraftforge/fml/IExtensionPoint.java index bbf5825d..981a86e7 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/IExtensionPoint.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/IExtensionPoint.java @@ -46,5 +46,24 @@ public interface IExtensionPoint */ record DisplayTest(Supplier suppliedVersion, BiPredicate remoteVersionTest) implements IExtensionPoint { public static final String IGNORESERVERONLY = "OHNOES\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31\uD83D\uDE31"; + + /** + * Ignores any version information coming from the server - use for server only mods + */ + public static final Supplier IGNORE_SERVER_VERSION = () -> new DisplayTest(IGNORESERVERONLY, (remoteVersion, isFromServer) -> true); + + /** + * Ignores all information and provides no information + */ + public static final Supplier IGNORE_ALL_VERSION = () -> new DisplayTest("", (remoteVersion, isFromServer) -> true); + + /** + * An optional alternative to {@link #DisplayTest(Supplier, BiPredicate)} which accepts a constant version string + * instead of a {@link Supplier}. + *

Internally, the provided version string is wrapped in a Supplier for you.

+ */ + public DisplayTest(String version, BiPredicate remoteVersionTest) { + this(() -> version, remoteVersionTest); + } } } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java index 47e76806..6ff77cd6 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java @@ -20,6 +20,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.function.BiFunction; +import java.util.function.BiPredicate; import java.util.function.Consumer; import java.util.function.Supplier; @@ -63,9 +64,9 @@ public ModContainer(IModInfo info) () -> new IExtensionPoint.DisplayTest(() -> this.modInfo.getVersion().toString(), (incoming, isNetwork) -> Objects.equals(incoming, this.modInfo.getVersion().toString())); case "IGNORE_SERVER_VERSION" -> // Ignores any version information coming from the server - use for server only mods - () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (incoming, isNetwork) -> true); + IExtensionPoint.DisplayTest.IGNORE_SERVER_VERSION; case "IGNORE_ALL_VERSION" -> // Ignores all information and provides no information - () -> new IExtensionPoint.DisplayTest(() -> "", (incoming, isNetwork) -> true); + IExtensionPoint.DisplayTest.IGNORE_ALL_VERSION; case "NONE" -> null; // NO display test at all - use this if you're going to do your own display test default -> // any other value throws an exception throw new IllegalArgumentException("Invalid displayTest value supplied in mods.toml"); @@ -142,6 +143,22 @@ public > void registerExtensionPoint(Class extensionPoints.put(point, extension); } + public void registerDisplayTest(IExtensionPoint.DisplayTest displayTest) { + registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> displayTest); + } + + public void registerDisplayTest(Supplier displayTest) { + registerExtensionPoint(IExtensionPoint.DisplayTest.class, displayTest); + } + + public void registerDisplayTest(String version, BiPredicate remoteVersionTest) { + registerDisplayTest(new IExtensionPoint.DisplayTest(version, remoteVersionTest)); + } + + public void registerDisplayTest(Supplier suppliedVersion, BiPredicate remoteVersionTest) { + registerDisplayTest(new IExtensionPoint.DisplayTest(suppliedVersion, remoteVersionTest)); + } + public void addConfig(final ModConfig modConfig) { configs.put(modConfig.getType(), modConfig); } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java index 0d36c1b3..d26135ca 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java @@ -8,6 +8,7 @@ import net.minecraftforge.fml.config.IConfigSpec; import net.minecraftforge.fml.config.ModConfig; +import java.util.function.BiPredicate; import java.util.function.Supplier; public class ModLoadingContext @@ -49,6 +50,44 @@ public void registerConfig(ModConfig.Type type, IConfigSpec spec) { getActiveContainer().addConfig(new ModConfig(type, spec, getActiveContainer())); } + /** + * Register a {@link IExtensionPoint.DisplayTest} with the mod container. + *

A shorthand for registering a DisplayTest with {@link #registerExtensionPoint(Class, Supplier)}.

+ * @param displayTest The {@link IExtensionPoint.DisplayTest} to register + */ + public void registerDisplayTest(IExtensionPoint.DisplayTest displayTest) { + getActiveContainer().registerDisplayTest(() -> displayTest); + } + + /** + * Register a {@link IExtensionPoint.DisplayTest} with the mod container. + *

A shorthand for registering a DisplayTest supplier with {@link #registerExtensionPoint(Class, Supplier)}.

+ * @param displayTest The {@link Supplier} to register + */ + public void registerDisplayTest(Supplier displayTest) { + getActiveContainer().registerDisplayTest(displayTest); + } + + /** + * Register a {@link IExtensionPoint.DisplayTest} with the mod container. + *

A shorthand for registering a DisplayTest with {@link #registerExtensionPoint(Class, Supplier)} that also + * creates the DisplayTest instance for you using the provided parameters.

+ * @see IExtensionPoint.DisplayTest#DisplayTest(String, BiPredicate) + */ + public void registerDisplayTest(String version, BiPredicate remoteVersionTest) { + getActiveContainer().registerDisplayTest(new IExtensionPoint.DisplayTest(version, remoteVersionTest)); + } + + /** + * Register a {@link IExtensionPoint.DisplayTest} with the mod container. + *

A shorthand for registering a DisplayTest with {@link #registerExtensionPoint(Class, Supplier)} that also + * creates the DisplayTest instance for you using the provided parameters.

+ * @see IExtensionPoint.DisplayTest#DisplayTest(Supplier, BiPredicate) + */ + public void registerDisplayTest(Supplier suppliedVersion, BiPredicate remoteVersionTest) { + getActiveContainer().registerDisplayTest(new IExtensionPoint.DisplayTest(suppliedVersion, remoteVersionTest)); + } + public void registerConfig(ModConfig.Type type, IConfigSpec spec, String fileName) { getActiveContainer().addConfig(new ModConfig(type, spec, getActiveContainer(), fileName)); } diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java index f8d74758..971b8fb0 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java @@ -78,7 +78,9 @@ public ModInfo(final ModFileInfo owningFile, final IConfigurable config) .map(s -> StringSubstitutor.replace(s, ownFile.map(ModFileInfo::getFile).orElse(null))) .map(DefaultArtifactVersion::new).orElse(DEFAULT_VERSION); this.displayName = config.getConfigElement("displayName").orElse(this.modId); - this.description = config.getConfigElement("description").orElse("MISSING DESCRIPTION"); + this.description = config.getConfigElement("description") + .orElse("MISSING DESCRIPTION") + .replace("\r\n", "\n").stripIndent(); this.logoFile = Optional.ofNullable(config.getConfigElement("logoFile") .orElseGet(() -> ownFile.flatMap(mf -> mf.getConfigElement("logoFile")).orElse(null))); diff --git a/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java b/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java index 7fb8dcfb..5ffdbb4d 100644 --- a/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java +++ b/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java @@ -24,6 +24,7 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -55,14 +56,16 @@ */ public class ForgeConfigSpec extends UnmodifiableConfigWrapper implements IConfigSpec//TODO: Remove extends and pipe everything through getSpec/getValues? { - private Map, String> levelComments; - private Map, String> levelTranslationKeys; + private final Map, String> levelComments; + private final Map, String> levelTranslationKeys; - private UnmodifiableConfig values; + private final UnmodifiableConfig values; private Config childConfig; private boolean isCorrecting = false; + private static final Pattern WINDOWS_NEWLINE = Pattern.compile("\r\n"); + private ForgeConfigSpec(UnmodifiableConfig storage, UnmodifiableConfig values, Map, String> levelComments, Map, String> levelTranslationKeys) { super(storage); this.values = values; @@ -123,11 +126,9 @@ public void afterReload() { private void resetCaches(final Iterable configValues) { configValues.forEach(value -> { - if (value instanceof ConfigValue) { - final ConfigValue configValue = (ConfigValue) value; + if (value instanceof ConfigValue configValue) { configValue.clearCache(); - } else if (value instanceof Config) { - final Config innerConfig = (Config) value; + } else if (value instanceof Config innerConfig) { this.resetCaches(innerConfig.valueMap().values()); } }); @@ -266,15 +267,12 @@ else if (dryRun) private boolean stringsMatchIgnoringNewlines(@Nullable Object obj1, @Nullable Object obj2) { - if(obj1 instanceof String && obj2 instanceof String) + if(obj1 instanceof String string1 && obj2 instanceof String string2) { - String string1 = (String) obj1; - String string2 = (String) obj2; - - if(string1.length() > 0 && string2.length() > 0) + if (!string1.isEmpty() && !string2.isEmpty()) { - return string1.replaceAll("\r\n", "\n") - .equals(string2.replaceAll("\r\n", "\n")); + return WINDOWS_NEWLINE.matcher(string1).replaceAll("\n") + .equals(WINDOWS_NEWLINE.matcher(string2).replaceAll("\n")); } } @@ -286,10 +284,10 @@ public static class Builder { private final Config storage = Config.of(LinkedHashMap::new, InMemoryFormat.withUniversalSupport()); // Use LinkedHashMap for consistent ordering private BuilderContext context = new BuilderContext(); - private Map, String> levelComments = new HashMap<>(); - private Map, String> levelTranslationKeys = new HashMap<>(); - private List currentPath = new ArrayList<>(); - private List> values = new ArrayList<>(); + private final Map, String> levelComments = new HashMap<>(); + private final Map, String> levelTranslationKeys = new HashMap<>(); + private final List currentPath = new ArrayList<>(); + private final List> values = new ArrayList<>(); private boolean hasInvalidComment = false; //Object @@ -375,7 +373,7 @@ public Object correct(Object value) { LogManager.getLogger().debug(CORE, "List on key {} is deemed to need correction. It is null, not a list, or an empty list. Modders, consider defineListAllowEmpty?", path.get(path.size() - 1)); return getDefault(); } - List list = Lists.newArrayList((List) value); + List list = new ArrayList<>((List) value); list.removeIf(elementValidator.negate()); if (list.isEmpty()) { LogManager.getLogger().debug(CORE, "List on key {} is deemed to need correction. It failed validation.", path.get(path.size() - 1)); @@ -395,7 +393,7 @@ public Object correct(Object value) { LogManager.getLogger().debug(CORE, "List on key {} is deemed to need correction, as it is null or not a list.", path.get(path.size() - 1)); return getDefault(); } - List list = Lists.newArrayList((List) value); + List list = new ArrayList<>((List) value); list.removeIf(elementValidator.negate()); if (list.isEmpty()) { LogManager.getLogger().debug(CORE, "List on key {} is deemed to need correction. It failed validation.", path.get(path.size() - 1)); @@ -696,7 +694,7 @@ private void validate(boolean value, String message) } @SuppressWarnings("unused") - private static class Range> implements Predicate + public static class Range> implements Predicate { private final Class clazz; private final V min; @@ -832,7 +830,7 @@ public static class ConfigValue implements Supplier public List getPath() { - return Lists.newArrayList(path); + return new ArrayList<>(path); } @Override diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index b1c6aee0..891f2b79 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,6 +1,6 @@ modLoader="javafml" loaderVersion="[24,]" -issueTrackerURL="http://www.minecraftforge.net/" +issueTrackerURL="https://minecraftforge.net/" logoFile="forge_logo.png" license="LGPL v2.1" @@ -9,6 +9,7 @@ license="LGPL v2.1" # We use the global forge version version="${global.forgeVersion}" updateJSONURL="https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json" + displayURL="https://minecraftforge.net/" displayName="Forge" credits="Anyone who has contributed on Github and supports our development" authors="LexManos,cpw"