From c284de366b6e1ae2396f094892fd4be3d1a5b8d0 Mon Sep 17 00:00:00 2001 From: LexManos Date: Tue, 25 Jun 2019 18:03:51 -0700 Subject: [PATCH] Split userdev data entry point into it's own provider to fix duplicate mod issue. --- build.gradle | 10 ++- mdk/build.gradle | 18 ++++++ mdk/src/main/resources/META-INF/mods.toml | 4 +- .../ExplodedDirectoryLocator.java | 1 + .../userdev/ClasspathLocator.java | 1 + .../userdev/FMLUserdevDataLaunchProvider.java | 61 +++++++++++++++++++ ...mods.modlauncher.api.ILaunchHandlerService | 1 + 7 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 src/userdev/java/net/minecraftforge/userdev/FMLUserdevDataLaunchProvider.java diff --git a/build.gradle b/build.gradle index a1bc39dd9..7332d4db3 100644 --- a/build.gradle +++ b/build.gradle @@ -335,6 +335,14 @@ project(':forge') { 'Implementation-Title': 'FML Launcher', 'Implementation-Version': SPEC_VERSION, 'Implementation-Vendor': 'Forge' + ] as LinkedHashMap, + 'net/minecraftforge/fml/userdev/': [ + 'Specification-Title': 'Forge User Development', + 'Specification-Vendor': 'Forge Development LLC', + 'Specification-Version': SPEC_VERSION, + 'Implementation-Title': project.group, + 'Implementation-Version': project.version.substring(MC_VERSION.length() + 1), + 'Implementation-Vendor': 'Forge Development LLC' ] as LinkedHashMap ] } @@ -881,7 +889,7 @@ project(':forge') { data { main 'net.minecraftforge.userdev.LaunchTesting' - environment 'target', 'fmldevdata' + environment 'target', 'fmluserdevdata' environment 'MC_VERSION', "${MC_VERSION}" environment 'FORGE_GROUP', "${project.group}" diff --git a/mdk/build.gradle b/mdk/build.gradle index f693e1913..1978015a9 100644 --- a/mdk/build.gradle +++ b/mdk/build.gradle @@ -64,6 +64,24 @@ minecraft { } } } + + data { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + + args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/') + + mods { + examplemod { + source sourceSets.main + } + } + } } } diff --git a/mdk/src/main/resources/META-INF/mods.toml b/mdk/src/main/resources/META-INF/mods.toml index 8b35f0c0b..c1392eb1e 100644 --- a/mdk/src/main/resources/META-INF/mods.toml +++ b/mdk/src/main/resources/META-INF/mods.toml @@ -42,7 +42,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magn # Does this dependency have to exist - if not, ordering below must be specified mandatory=true #mandatory # The version range of the dependency - versionRange="[26,)" #mandatory + versionRange="[27,)" #mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory ordering="NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER @@ -51,6 +51,6 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magn [[dependencies.examplemod]] modId="minecraft" mandatory=true - versionRange="[1.14.2]" + versionRange="[1.14.3]" ordering="NONE" side="BOTH" \ No newline at end of file diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java index c363e8d8c..fa40653ab 100644 --- a/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java @@ -52,6 +52,7 @@ public class ExplodedDirectoryLocator implements IModLocator { Path resources = pathPathPair.getLeft(); Path modtoml = resources.resolve(modstoml); if (Files.exists(modtoml)) { + LOGGER.debug(LOADING, "Found exploded directory mod manifest at {}", modtoml.toString()); ModFile mf = new ModFile(pathPathPair.getLeft(), this); mods.put(mf, pathPathPair); } else { diff --git a/src/userdev/java/net/minecraftforge/userdev/ClasspathLocator.java b/src/userdev/java/net/minecraftforge/userdev/ClasspathLocator.java index 38a3a509c..264bf7d46 100644 --- a/src/userdev/java/net/minecraftforge/userdev/ClasspathLocator.java +++ b/src/userdev/java/net/minecraftforge/userdev/ClasspathLocator.java @@ -67,6 +67,7 @@ public class ClasspathLocator extends AbstractJarFileLocator { if (Files.isDirectory(path)) continue; + LOGGER.debug(CORE, "Found classpath mod: {}", path); this.modCoords.add(path); } } catch (IOException e) { diff --git a/src/userdev/java/net/minecraftforge/userdev/FMLUserdevDataLaunchProvider.java b/src/userdev/java/net/minecraftforge/userdev/FMLUserdevDataLaunchProvider.java new file mode 100644 index 000000000..826a51890 --- /dev/null +++ b/src/userdev/java/net/minecraftforge/userdev/FMLUserdevDataLaunchProvider.java @@ -0,0 +1,61 @@ +/* + * Minecraft Forge + * Copyright (c) 2016-2019. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package net.minecraftforge.userdev; + +import cpw.mods.modlauncher.api.ILaunchHandlerService; +import cpw.mods.modlauncher.api.ITransformingClassLoader; +import net.minecraftforge.api.distmarker.Dist; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.concurrent.Callable; + +import static net.minecraftforge.fml.loading.LogMarkers.CORE; + +public class FMLUserdevDataLaunchProvider extends FMLUserdevLaunchProvider implements ILaunchHandlerService +{ + private static final Logger LOGGER = LogManager.getLogger(); + + @Override + public String name() + { + return "fmluserdevdata"; + } + + @Override + public Callable launchService(String[] arguments, ITransformingClassLoader launchClassLoader) + { + return () -> { + LOGGER.debug(CORE, "Launching minecraft in {} with arguments {}", launchClassLoader, arguments); + super.beforeStart(launchClassLoader); + launchClassLoader.addTargetPackageFilter(getPackagePredicate()); + Thread.currentThread().setContextClassLoader(launchClassLoader.getInstance()); + Class.forName("net.minecraft.data.Main", true, launchClassLoader.getInstance()).getMethod("main", String[].class).invoke(null, (Object)arguments); + return null; + }; + } + + @Override + public Dist getDist() + { + return Dist.CLIENT; + } +} diff --git a/src/userdev/resources/META-INF/services/cpw.mods.modlauncher.api.ILaunchHandlerService b/src/userdev/resources/META-INF/services/cpw.mods.modlauncher.api.ILaunchHandlerService index 81e1deada..5fe859dab 100644 --- a/src/userdev/resources/META-INF/services/cpw.mods.modlauncher.api.ILaunchHandlerService +++ b/src/userdev/resources/META-INF/services/cpw.mods.modlauncher.api.ILaunchHandlerService @@ -1,5 +1,6 @@ net.minecraftforge.userdev.FMLUserdevClientLaunchProvider net.minecraftforge.userdev.FMLUserdevServerLaunchProvider +net.minecraftforge.userdev.FMLUserdevDataLaunchProvider net.minecraftforge.userdev.FMLDevClientLaunchProvider net.minecraftforge.userdev.FMLDevServerLaunchProvider net.minecraftforge.userdev.FMLDevDataLaunchProvider