From 409f5f8e933f8e721e2c04c51e54e60f4cefea1d Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 11 Feb 2021 18:12:27 +0000 Subject: [PATCH 1/9] Update MCE - Remove auto population of minVersion in mixins - Drop some log levels. --- .../fabricmc/loom/LoomGradleExtension.java | 80 ------------------- .../loom/build/MixinRefmapHelper.java | 6 +- .../MinecraftProcessedProvider.java | 2 +- .../providers/MinecraftProvider.java | 2 +- .../providers/mappings/MappingsProvider.java | 2 +- .../assets/MinecraftAssetsProvider.java | 2 +- .../loom/task/MigrateMappingsTask.java | 6 +- .../net/fabricmc/loom/task/RemapJarTask.java | 6 +- .../net/fabricmc/loom/util/Constants.java | 2 +- .../fabricmc/loom/util/SourceRemapper.java | 2 +- 10 files changed, 13 insertions(+), 97 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 4c6557ab..acb588c1 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -27,13 +27,10 @@ package net.fabricmc.loom; import java.io.File; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Objects; import java.util.Set; -import java.util.function.BiPredicate; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -44,12 +41,10 @@ import org.cadixdev.mercury.Mercury; import org.gradle.api.Action; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Project; -import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.plugins.BasePluginConvention; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; import net.fabricmc.loom.api.decompilers.LoomDecompiler; import net.fabricmc.loom.configuration.LoomDependencyManager; @@ -263,81 +258,6 @@ public class LoomGradleExtension { return new File(getProjectPersistentCache(), "launch.cfg"); } - @Nullable - private static Dependency findDependency(Project p, Collection configs, BiPredicate groupNameFilter) { - for (Configuration config : configs) { - for (Dependency dependency : config.getDependencies()) { - String group = dependency.getGroup(); - String name = dependency.getName(); - - if (groupNameFilter.test(group, name)) { - p.getLogger().debug("Loom findDependency found: " + group + ":" + name + ":" + dependency.getVersion()); - return dependency; - } - } - } - - return null; - } - - @Nullable - private T recurseProjects(Function projectTFunction) { - Project p = this.project; - T result; - - while (p.getRootProject() != p) { - if ((result = projectTFunction.apply(p)) != null) { - return result; - } - - p = p.getRootProject(); - } - - result = projectTFunction.apply(p); - return result; - } - - @Nullable - private Dependency getMixinDependency() { - return recurseProjects(p -> { - List configs = new ArrayList<>(); - // check compile classpath first - Configuration possibleCompileClasspath = p.getConfigurations().findByName("compileClasspath"); - - if (possibleCompileClasspath != null) { - configs.add(possibleCompileClasspath); - } - - // failing that, buildscript - configs.addAll(p.getBuildscript().getConfigurations()); - - return findDependency(p, configs, (group, name) -> { - if (name.equalsIgnoreCase("mixin") && group.equalsIgnoreCase("org.spongepowered")) { - return true; - } - - return name.equalsIgnoreCase("sponge-mixin") && group.equalsIgnoreCase("net.fabricmc"); - }); - }); - } - - @Nullable - public String getMixinJsonVersion() { - Dependency dependency = getMixinDependency(); - - if (dependency != null) { - if (dependency.getGroup().equalsIgnoreCase("net.fabricmc")) { - if (Objects.requireNonNull(dependency.getVersion()).split("\\.").length >= 4) { - return dependency.getVersion().substring(0, dependency.getVersion().lastIndexOf('.')) + "-SNAPSHOT"; - } - } - - return dependency.getVersion(); - } - - return null; - } - public String getLoaderLaunchMethod() { return loaderLaunchMethod != null ? loaderLaunchMethod : ""; } diff --git a/src/main/java/net/fabricmc/loom/build/MixinRefmapHelper.java b/src/main/java/net/fabricmc/loom/build/MixinRefmapHelper.java index dace6895..1a819a13 100644 --- a/src/main/java/net/fabricmc/loom/build/MixinRefmapHelper.java +++ b/src/main/java/net/fabricmc/loom/build/MixinRefmapHelper.java @@ -42,7 +42,7 @@ import net.fabricmc.loom.LoomGradlePlugin; public final class MixinRefmapHelper { private MixinRefmapHelper() { } - public static boolean addRefmapName(String filename, String mixinVersion, Path outputPath) { + public static boolean addRefmapName(String filename, Path outputPath) { File output = outputPath.toFile(); Set mixinFilenames = findMixins(output, true); @@ -56,10 +56,6 @@ public final class MixinRefmapHelper { json.addProperty("refmap", filename); } - if (!json.has("minVersion") && mixinVersion != null) { - json.addProperty("minVersion", mixinVersion); - } - return LoomGradlePlugin.GSON.toJson(json); } })).toArray(ZipEntryTransformerEntry[]::new)); diff --git a/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftProcessedProvider.java b/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftProcessedProvider.java index 38547817..adf85fd2 100644 --- a/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftProcessedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftProcessedProvider.java @@ -51,7 +51,7 @@ public class MinecraftProcessedProvider extends MinecraftMappedProvider { @Override protected void addDependencies(DependencyInfo dependency, Consumer postPopulationScheduler) { if (jarProcessorManager.isInvalid(projectMappedJar) || isRefreshDeps()) { - getProject().getLogger().lifecycle(":processing mapped jar"); + getProject().getLogger().info(":processing mapped jar"); invalidateJars(); try { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java index bbb6d196..8e6af5f4 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java @@ -217,7 +217,7 @@ public class MinecraftProvider extends DependencyProvider { } private void mergeJars(Logger logger) throws IOException { - logger.lifecycle(":merging jars"); + logger.info(":merging jars"); try (JarMerger jarMerger = new JarMerger(minecraftClientJar, minecraftServerJar, minecraftMergedJar)) { jarMerger.enableSyntheticParamsOffset(); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java index 810a34f3..8b19a3da 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java @@ -176,7 +176,7 @@ public class MappingsProvider extends DependencyProvider { } private void storeMappings(Project project, MinecraftProvider minecraftProvider, Path yarnJar) throws IOException { - project.getLogger().lifecycle(":extracting " + yarnJar.getFileName()); + project.getLogger().info(":extracting " + yarnJar.getFileName()); try (FileSystem fileSystem = FileSystems.newFileSystem(yarnJar, (ClassLoader) null)) { extractMappings(fileSystem, baseTinyMappings); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java index da349e78..55e07c15 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java @@ -73,7 +73,7 @@ public class MinecraftAssetsProvider { File checksumInfo = new File(assets, "checksum" + File.separator + minecraftProvider.getMinecraftVersion() + ".json"); if (!assetsInfo.exists() || !Checksum.equals(assetsInfo, assetIndex.sha1)) { - project.getLogger().lifecycle(":downloading asset index"); + project.getLogger().info(":downloading asset index"); if (offline) { if (assetsInfo.exists()) { diff --git a/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java b/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java index 4de1997b..97217fcb 100644 --- a/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java +++ b/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java @@ -87,7 +87,7 @@ public class MigrateMappingsTask extends AbstractLoomTask { Project project = getProject(); LoomGradleExtension extension = getExtension(); - project.getLogger().lifecycle(":loading mappings"); + project.getLogger().info(":loading mappings"); if (!Files.exists(inputDir) || !Files.isDirectory(inputDir)) { throw new IllegalArgumentException("Could not find input directory: " + inputDir.toAbsolutePath()); @@ -161,7 +161,7 @@ public class MigrateMappingsTask extends AbstractLoomTask { private static void migrateMappings(Project project, MinecraftMappedProvider minecraftMappedProvider, Path inputDir, Path outputDir, TinyTree currentMappings, TinyTree targetMappings ) throws IOException { - project.getLogger().lifecycle(":joining mappings"); + project.getLogger().info(":joining mappings"); MappingSet mappingSet = new TinyMappingsJoiner( currentMappings, "named", @@ -191,7 +191,7 @@ public class MigrateMappingsTask extends AbstractLoomTask { project.getLogger().warn("Could not remap fully!", e); } - project.getLogger().lifecycle(":cleaning file descriptors"); + project.getLogger().info(":cleaning file descriptors"); System.gc(); } } diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index ab6306c8..10d52579 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -116,7 +116,7 @@ public class RemapJarTask extends Jar { remapOption.execute(remapperBuilder); } - project.getLogger().lifecycle(":remapping " + input.getFileName()); + project.getLogger().info(":remapping " + input.getFileName()); StringBuilder rc = new StringBuilder("Remap classpath: "); @@ -148,7 +148,7 @@ public class RemapJarTask extends Jar { throw new RuntimeException("Failed to remap " + input + " to " + output + " - file missing!"); } - if (MixinRefmapHelper.addRefmapName(extension.getRefmapName(), extension.getMixinJsonVersion(), output)) { + if (MixinRefmapHelper.addRefmapName(extension.getRefmapName(), output)) { project.getLogger().debug("Transformed mixin reference maps in output JAR!"); } @@ -218,7 +218,7 @@ public class RemapJarTask extends Jar { throw new RuntimeException("Failed to remap " + input + " to " + output + " - file missing!"); } - if (MixinRefmapHelper.addRefmapName(extension.getRefmapName(), extension.getMixinJsonVersion(), output)) { + if (MixinRefmapHelper.addRefmapName(extension.getRefmapName(), output)) { project.getLogger().debug("Transformed mixin reference maps in output JAR!"); } diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index f130a824..f5afeb8d 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -99,7 +99,7 @@ public class Constants { * Constants for versions of dependencies. */ public static final class Versions { - public static final String MIXIN_COMPILE_EXTENSIONS = "0.3.2.6"; + public static final String MIXIN_COMPILE_EXTENSIONS = "0.4.0"; public static final String DEV_LAUNCH_INJECTOR = "0.2.1+build.8"; public static final String TERMINAL_CONSOLE_APPENDER = "1.2.0"; public static final String JETBRAINS_ANNOTATIONS = "19.0.0"; diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java index b8a0a3f8..873b2e09 100644 --- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java @@ -173,7 +173,7 @@ public class SourceRemapper { MappingSet mappings = extension.getOrCreateSrcMappingCache(toNamed ? 1 : 0, () -> { try { TinyTree m = mappingsProvider.getMappings(); - project.getLogger().lifecycle(":loading " + (toNamed ? "intermediary -> named" : "named -> intermediary") + " source mappings"); + project.getLogger().info(":loading " + (toNamed ? "intermediary -> named" : "named -> intermediary") + " source mappings"); return new TinyMappingsReader(m, toNamed ? "intermediary" : "named", toNamed ? "named" : "intermediary").read(); } catch (Exception e) { throw new RuntimeException(e); From 4daec03a0f1fdc6ded627b71d1d0ae05a936b851 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 11 Feb 2021 18:18:07 +0000 Subject: [PATCH 2/9] Rename `runs` -> `runConfigs` --- .../java/net/fabricmc/loom/LoomGradleExtension.java | 12 ++++++------ .../configuration/ide/SetupIntelijRunConfigs.java | 2 +- .../net/fabricmc/loom/task/GenEclipseRunsTask.java | 2 +- .../net/fabricmc/loom/task/GenIdeaProjectTask.java | 2 +- .../net/fabricmc/loom/task/GenVsCodeProjectTask.java | 2 +- src/main/java/net/fabricmc/loom/task/LoomTasks.java | 8 ++++---- .../java/net/fabricmc/loom/task/RunClientTask.java | 2 +- .../java/net/fabricmc/loom/task/RunServerTask.java | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index acb588c1..98a0e1bd 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -80,7 +80,7 @@ public class LoomGradleExtension { private Mercury[] srcMercuryCache = new Mercury[2]; private Set mixinMappings = Collections.synchronizedSet(new HashSet<>()); - private NamedDomainObjectContainer runs; + private NamedDomainObjectContainer runConfigs; /** * Loom will generate a new genSources task (with a new name, based off of {@link LoomDecompiler#name()}) @@ -117,7 +117,7 @@ public class LoomGradleExtension { this.project = project; this.autoGenIDERuns = isRootProject(); this.unmappedMods = project.files(); - this.runs = project.container(RunConfigSettings.class, + this.runConfigs = project.container(RunConfigSettings.class, baseName -> new RunConfigSettings(project, baseName)); } @@ -351,12 +351,12 @@ public class LoomGradleExtension { } @ApiStatus.Experimental - public void runs(Action> action) { - action.execute(runs); + public void runConfigs(Action> action) { + action.execute(runConfigs); } @ApiStatus.Experimental - public NamedDomainObjectContainer getRuns() { - return runs; + public NamedDomainObjectContainer getRunConfigs() { + return runConfigs; } } diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java index c531cee8..e4bcd21a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java @@ -71,7 +71,7 @@ public class SetupIntelijRunConfigs { runConfigsDir.mkdirs(); } - for (RunConfigSettings settings : extension.getRuns()) { + for (RunConfigSettings settings : extension.getRunConfigs()) { RunConfig config = RunConfig.runConfig(project, settings); String name = config.configName.replaceAll("[^a-zA-Z0-9$_]", "_"); diff --git a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java index 5cb45995..9a4dde96 100644 --- a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java @@ -42,7 +42,7 @@ public class GenEclipseRunsTask extends AbstractLoomTask { EclipseModel eclipseModel = getProject().getExtensions().getByType(EclipseModel.class); LoomGradleExtension extension = getExtension(); - for (RunConfigSettings settings : extension.getRuns()) { + for (RunConfigSettings settings : extension.getRunConfigs()) { String name = settings.getName(); File configs = new File(getProject().getRootDir(), eclipseModel.getProject().getName() + "_" + name + ".launch"); diff --git a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java index 8ad3586b..cf08f568 100644 --- a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java @@ -83,7 +83,7 @@ public class GenIdeaProjectTask extends AbstractLoomTask { throw new RuntimeException("Failed to generate IntelliJ run configurations (runManager was not found)"); } - for (RunConfigSettings settings : getExtension().getRuns()) { + for (RunConfigSettings settings : getExtension().getRunConfigs()) { runManager.appendChild(RunConfig.runConfig(project, settings).genRuns(runManager)); settings.makeRunDir(); } diff --git a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java index fe142df5..f7d8fe0f 100644 --- a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java @@ -63,7 +63,7 @@ public class GenVsCodeProjectTask extends AbstractLoomTask { VsCodeLaunch launch = new VsCodeLaunch(); - for (RunConfigSettings settings : getExtension().getRuns()) { + for (RunConfigSettings settings : getExtension().getRunConfigs()) { launch.add(RunConfig.runConfig(project, settings)); settings.makeRunDir(); } diff --git a/src/main/java/net/fabricmc/loom/task/LoomTasks.java b/src/main/java/net/fabricmc/loom/task/LoomTasks.java index a3aca532..198f92e6 100644 --- a/src/main/java/net/fabricmc/loom/task/LoomTasks.java +++ b/src/main/java/net/fabricmc/loom/task/LoomTasks.java @@ -86,9 +86,9 @@ public final class LoomTasks { private static void registerRunTasks(TaskContainer tasks, Project project) { LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); - Preconditions.checkArgument(extension.getRuns().size() == 0, "Run configurations must not be registered before loom"); + Preconditions.checkArgument(extension.getRunConfigs().size() == 0, "Run configurations must not be registered before loom"); - extension.getRuns().whenObjectAdded(config -> { + extension.getRunConfigs().whenObjectAdded(config -> { String configName = config.getName(); String taskName = "run" + configName.substring(0, 1).toUpperCase() + configName.substring(1); @@ -102,8 +102,8 @@ public final class LoomTasks { }); }); - extension.getRuns().create("client", RunConfigSettings::client); - extension.getRuns().create("server", RunConfigSettings::server); + extension.getRunConfigs().create("client", RunConfigSettings::client); + extension.getRunConfigs().create("server", RunConfigSettings::server); } private static void registerDecompileTasks(TaskContainer tasks, Project project) { diff --git a/src/main/java/net/fabricmc/loom/task/RunClientTask.java b/src/main/java/net/fabricmc/loom/task/RunClientTask.java index 0bfaca0c..12504b68 100644 --- a/src/main/java/net/fabricmc/loom/task/RunClientTask.java +++ b/src/main/java/net/fabricmc/loom/task/RunClientTask.java @@ -32,7 +32,7 @@ public class RunClientTask extends AbstractRunTask { public RunClientTask() { super(project -> { LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); - return RunConfig.runConfig(project, extension.getRuns().getByName("client")); + return RunConfig.runConfig(project, extension.getRunConfigs().getByName("client")); }); } } diff --git a/src/main/java/net/fabricmc/loom/task/RunServerTask.java b/src/main/java/net/fabricmc/loom/task/RunServerTask.java index aa9fc94a..7188ce68 100644 --- a/src/main/java/net/fabricmc/loom/task/RunServerTask.java +++ b/src/main/java/net/fabricmc/loom/task/RunServerTask.java @@ -32,7 +32,7 @@ public class RunServerTask extends AbstractRunTask { public RunServerTask() { super(project -> { LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); - return RunConfig.runConfig(project, extension.getRuns().getByName("client")); + return RunConfig.runConfig(project, extension.getRunConfigs().getByName("client")); }); } } From 6b481fbcd6e1460fece97fa5a7128f9fbe971c4f Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 11 Feb 2021 18:32:01 +0000 Subject: [PATCH 3/9] Revert previous change, somewhat. I didnt understand the issue correctly. --- src/main/java/net/fabricmc/loom/LoomGradleExtension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 98a0e1bd..3bb2a66b 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -351,7 +351,7 @@ public class LoomGradleExtension { } @ApiStatus.Experimental - public void runConfigs(Action> action) { + public void runs(Action> action) { action.execute(runConfigs); } From 24c166fc792bc723d8000614947eec6d7eee4b74 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 11 Feb 2021 18:50:25 +0000 Subject: [PATCH 4/9] Generate IDE run configs on a per config basis. Allows for much finer grain control over what run configs are generated. Defaults to generate all run configs on the root project. --- .../net/fabricmc/loom/LoomGradleExtension.java | 2 -- .../loom/configuration/CompileConfiguration.java | 4 +--- .../configuration/ide/RunConfigSettings.java | 16 ++++++++++++++++ .../ide/SetupIntelijRunConfigs.java | 4 ++++ .../fabricmc/loom/task/GenEclipseRunsTask.java | 4 ++++ .../fabricmc/loom/task/GenIdeaProjectTask.java | 4 ++++ .../fabricmc/loom/task/GenVsCodeProjectTask.java | 4 ++++ 7 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 3bb2a66b..1e03120e 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -60,7 +60,6 @@ public class LoomGradleExtension { public String refmapName; public String loaderLaunchMethod; public boolean remapMod = true; - public boolean autoGenIDERuns; public String customManifest = null; public File accessWidener = null; public Function intermediaryUrl = mcVer -> "https://maven.fabricmc.net/net/fabricmc/intermediary/" + mcVer + "/intermediary-" + mcVer + "-v2.jar"; @@ -115,7 +114,6 @@ public class LoomGradleExtension { public LoomGradleExtension(Project project) { this.project = project; - this.autoGenIDERuns = isRootProject(); this.unmappedMods = project.files(); this.runConfigs = project.container(RunConfigSettings.class, baseName -> new RunConfigSettings(project, baseName)); diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index 0f0e6f10..8402ce36 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -168,9 +168,7 @@ public final class CompileConfiguration { project1.getTasks().getByName("eclipse").finalizedBy(project1.getTasks().getByName("genEclipseRuns")); project1.getTasks().getByName("cleanEclipse").finalizedBy(project1.getTasks().getByName("cleanEclipseRuns")); - if (extension.autoGenIDERuns) { - SetupIntelijRunConfigs.setup(project1); - } + SetupIntelijRunConfigs.setup(project1); // Enables the default mod remapper if (extension.remapMod) { diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java index 415fc543..97c4c3e6 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java @@ -92,6 +92,13 @@ public final class RunConfigSettings implements Named { */ private final String baseName; + /** + * When true a run configuration file will be generated for IDE's. + * + *

By default only run configs on the root project will be generated. + */ + private boolean generateIDEConfig; + private final Project project; private final LoomGradleExtension extension; @@ -99,6 +106,7 @@ public final class RunConfigSettings implements Named { this.baseName = baseName; this.project = project; this.extension = project.getExtensions().getByType(LoomGradleExtension.class); + this.generateIDEConfig = extension.isRootProject(); source("main"); runDir("run"); @@ -232,6 +240,10 @@ public final class RunConfigSettings implements Named { }); } + public void generateIDEConfig(boolean generateIDEConfig) { + this.generateIDEConfig = generateIDEConfig; + } + /** * Add the {@code -XstartOnFirstThread} JVM argument when on OSX. */ @@ -287,4 +299,8 @@ public final class RunConfigSettings implements Named { file.mkdir(); } } + + public boolean shouldGenerateIDEConfig() { + return generateIDEConfig; + } } diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java index e4bcd21a..a838faf1 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java @@ -72,6 +72,10 @@ public class SetupIntelijRunConfigs { } for (RunConfigSettings settings : extension.getRunConfigs()) { + if (!settings.shouldGenerateIDEConfig()) { + continue; + } + RunConfig config = RunConfig.runConfig(project, settings); String name = config.configName.replaceAll("[^a-zA-Z0-9$_]", "_"); diff --git a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java index 9a4dde96..61d98ee1 100644 --- a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java @@ -43,6 +43,10 @@ public class GenEclipseRunsTask extends AbstractLoomTask { LoomGradleExtension extension = getExtension(); for (RunConfigSettings settings : extension.getRunConfigs()) { + if (!settings.shouldGenerateIDEConfig()) { + continue; + } + String name = settings.getName(); File configs = new File(getProject().getRootDir(), eclipseModel.getProject().getName() + "_" + name + ".launch"); diff --git a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java index cf08f568..cc9ce76e 100644 --- a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java @@ -84,6 +84,10 @@ public class GenIdeaProjectTask extends AbstractLoomTask { } for (RunConfigSettings settings : getExtension().getRunConfigs()) { + if (!settings.shouldGenerateIDEConfig()) { + continue; + } + runManager.appendChild(RunConfig.runConfig(project, settings).genRuns(runManager)); settings.makeRunDir(); } diff --git a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java index f7d8fe0f..927159ec 100644 --- a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java @@ -64,6 +64,10 @@ public class GenVsCodeProjectTask extends AbstractLoomTask { VsCodeLaunch launch = new VsCodeLaunch(); for (RunConfigSettings settings : getExtension().getRunConfigs()) { + if (!settings.shouldGenerateIDEConfig()) { + continue; + } + launch.add(RunConfig.runConfig(project, settings)); settings.makeRunDir(); } From 0d1f40aee4cf8667fc4a2ff6efad50fec9bed81c Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Fri, 12 Feb 2021 17:50:54 +0000 Subject: [PATCH 5/9] Rewrite minecraft game data handling. Much faster asset and native validation logic. Simplfied game metadata model. --- .../ide/SetupIntelijRunConfigs.java | 2 +- .../providers/LaunchProvider.java | 2 +- .../providers/MinecraftProvider.java | 16 +- .../mappings/MojangMappingsDependency.java | 10 +- .../minecraft/MinecraftLibraryProvider.java | 17 +- .../minecraft/MinecraftNativesProvider.java | 114 +++++-- .../minecraft/MinecraftVersionInfo.java | 198 ------------- .../minecraft/MinecraftVersionMeta.java | 277 ++++++++++++++++++ .../assets/MinecraftAssetsProvider.java | 147 ++++------ .../loom/task/DownloadAssetsTask.java | 2 +- 10 files changed, 442 insertions(+), 343 deletions(-) delete mode 100644 src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionInfo.java create mode 100644 src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionMeta.java diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java index a838faf1..14576ec3 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java @@ -59,7 +59,7 @@ public class SetupIntelijRunConfigs { if (extension.ideSync()) { //Ensures the assets are downloaded when idea is syncing a project MinecraftAssetsProvider.provide(extension.getMinecraftProvider(), project); - MinecraftNativesProvider.provide(extension.getMinecraftProvider(), project); + MinecraftNativesProvider.provide(project); } String projectPath = project == rootProject ? "" : project.getPath().replace(':', '_'); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java index 07b8c04e..c809e7a6 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java @@ -64,7 +64,7 @@ public class LaunchProvider extends DependencyProvider { .property("client", "org.lwjgl.librarypath", getExtension().getNativesDirectory().getAbsolutePath()) .argument("client", "--assetIndex") - .argument("client", getExtension().getMinecraftProvider().getVersionInfo().assetIndex.getFabricId(getExtension().getMinecraftProvider().getMinecraftVersion())) + .argument("client", getExtension().getMinecraftProvider().getVersionInfo().getAssetIndex().getFabricId(getExtension().getMinecraftProvider().getMinecraftVersion())) .argument("client", "--assetsDir") .argument("client", new File(getExtension().getUserCache(), "assets").getAbsolutePath()); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java index 8e6af5f4..e25b8ca5 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProvider.java @@ -43,7 +43,7 @@ import net.fabricmc.loom.LoomGradlePlugin; import net.fabricmc.loom.configuration.DependencyProvider; import net.fabricmc.loom.configuration.providers.minecraft.ManifestVersion; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftLibraryProvider; -import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionInfo; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionMeta; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.DownloadUtil; import net.fabricmc.loom.util.HashedDownloadUtil; @@ -52,7 +52,7 @@ import net.fabricmc.stitch.merge.JarMerger; public class MinecraftProvider extends DependencyProvider { private String minecraftVersion; - private MinecraftVersionInfo versionInfo; + private MinecraftVersionMeta versionInfo; private MinecraftLibraryProvider libraryProvider; private File minecraftJson; @@ -76,7 +76,7 @@ public class MinecraftProvider extends DependencyProvider { downloadMcJson(offline); try (FileReader reader = new FileReader(minecraftJson)) { - versionInfo = LoomGradlePlugin.GSON.fromJson(reader, MinecraftVersionInfo.class); + versionInfo = LoomGradlePlugin.GSON.fromJson(reader, MinecraftVersionMeta.class); } // Add Loom as an annotation processor @@ -209,11 +209,11 @@ public class MinecraftProvider extends DependencyProvider { return; } - MinecraftVersionInfo.Downloads client = versionInfo.downloads.get("client"); - MinecraftVersionInfo.Downloads server = versionInfo.downloads.get("server"); + MinecraftVersionMeta.Download client = versionInfo.getDownload("client"); + MinecraftVersionMeta.Download server = versionInfo.getDownload("server"); - HashedDownloadUtil.downloadIfInvalid(new URL(client.url), minecraftClientJar, client.sha1, logger, false); - HashedDownloadUtil.downloadIfInvalid(new URL(server.url), minecraftServerJar, server.sha1, logger, false); + HashedDownloadUtil.downloadIfInvalid(new URL(client.getUrl()), minecraftClientJar, client.getSha1(), logger, false); + HashedDownloadUtil.downloadIfInvalid(new URL(server.getUrl()), minecraftServerJar, server.getSha1(), logger, false); } private void mergeJars(Logger logger) throws IOException { @@ -233,7 +233,7 @@ public class MinecraftProvider extends DependencyProvider { return minecraftVersion; } - public MinecraftVersionInfo getVersionInfo() { + public MinecraftVersionMeta getVersionInfo() { return versionInfo; } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java index 22664957..96c4c307 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java @@ -55,7 +55,7 @@ import org.zeroturnaround.zip.ZipUtil; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.LoomGradlePlugin; -import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionInfo; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionMeta; import net.fabricmc.loom.util.DownloadUtil; import net.fabricmc.lorenztiny.TinyMappingsReader; import net.fabricmc.mapping.tree.TinyMappingFactory; @@ -121,14 +121,14 @@ public class MojangMappingsDependency implements SelfResolvingDependency { } private MappingSet getMappingsSet(Path clientMappings, Path serverMappings) throws IOException { - MinecraftVersionInfo versionInfo = extension.getMinecraftProvider().getVersionInfo(); + MinecraftVersionMeta versionInfo = extension.getMinecraftProvider().getVersionInfo(); - if (versionInfo.downloads.get(MANIFEST_CLIENT_MAPPINGS) == null) { + if (versionInfo.getDownload(MANIFEST_CLIENT_MAPPINGS) == null) { throw new RuntimeException("Failed to find official mojang mappings for " + getVersion()); } - String clientMappingsUrl = versionInfo.downloads.get(MANIFEST_CLIENT_MAPPINGS).url; - String serverMappingsUrl = versionInfo.downloads.get(MANIFEST_SERVER_MAPPINGS).url; + String clientMappingsUrl = versionInfo.getDownload(MANIFEST_CLIENT_MAPPINGS).getUrl(); + String serverMappingsUrl = versionInfo.getDownload(MANIFEST_CLIENT_MAPPINGS).getUrl(); DownloadUtil.downloadIfChanged(new URL(clientMappingsUrl), clientMappings.toFile(), project.getLogger()); DownloadUtil.downloadIfChanged(new URL(serverMappingsUrl), serverMappings.toFile(), project.getLogger()); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftLibraryProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftLibraryProvider.java index 8822140c..dcf846e8 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftLibraryProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftLibraryProvider.java @@ -36,22 +36,13 @@ public class MinecraftLibraryProvider { public File MINECRAFT_LIBS; public void provide(MinecraftProvider minecraftProvider, Project project) { - MinecraftVersionInfo versionInfo = minecraftProvider.getVersionInfo(); + MinecraftVersionMeta versionInfo = minecraftProvider.getVersionInfo(); initFiles(project, minecraftProvider); - for (MinecraftVersionInfo.Library library : versionInfo.libraries) { - if (library.allowed() && !library.isNative() && library.getFile(MINECRAFT_LIBS) != null) { - // TODO: Add custom library locations - - // By default, they are all available on all sides - /* boolean isClientOnly = false; - - if (library.name.contains("java3d") || library.name.contains("paulscode") || library.name.contains("lwjgl") || library.name.contains("twitch") || library.name.contains("jinput") || library.name.contains("text2speech") || library.name.contains("objc")) { - isClientOnly = true; - } */ - - project.getDependencies().add(Constants.Configurations.MINECRAFT_DEPENDENCIES, project.getDependencies().module(library.getArtifactName())); + for (MinecraftVersionMeta.Library library : versionInfo.getLibraries()) { + if (library.isValidForOS() && !library.hasNatives() && library.getArtifact() != null) { + project.getDependencies().add(Constants.Configurations.MINECRAFT_DEPENDENCIES, project.getDependencies().module(library.getName())); } } } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftNativesProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftNativesProvider.java index 9f338ef8..08c4c6d4 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftNativesProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftNativesProvider.java @@ -27,24 +27,39 @@ package net.fabricmc.loom.configuration.providers.minecraft; import java.io.File; import java.io.IOException; import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import org.apache.commons.io.FileUtils; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.zeroturnaround.zip.ZipUtil; import net.fabricmc.loom.LoomGradleExtension; -import net.fabricmc.loom.configuration.providers.MinecraftProvider; -import net.fabricmc.loom.util.DownloadUtil; +import net.fabricmc.loom.LoomGradlePlugin; +import net.fabricmc.loom.util.HashedDownloadUtil; public class MinecraftNativesProvider { - public static void provide(MinecraftProvider minecraftProvider, Project project) throws IOException { - LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); - MinecraftVersionInfo versionInfo = minecraftProvider.getVersionInfo(); - boolean offline = project.getGradle().getStartParameter().isOffline(); + private final Project project; + private final LoomGradleExtension extension; + private final File nativesDir; + private final File jarStore; - File nativesDir = extension.getNativesDirectory(); - File jarStore = extension.getNativesJarStore(); + public MinecraftNativesProvider(Project project) { + this.project = project; + extension = project.getExtensions().getByType(LoomGradleExtension.class); + nativesDir = extension.getNativesDirectory(); + jarStore = extension.getNativesJarStore(); + } + + public static void provide(Project project) throws IOException { + new MinecraftNativesProvider(project).provide(); + } + + private void provide() throws IOException { if (extension.hasCustomNatives()) { if (!nativesDir.exists()) { throw new RuntimeException("Could no find custom natives directory at " + nativesDir.getAbsolutePath()); @@ -53,21 +68,82 @@ public class MinecraftNativesProvider { return; } - for (MinecraftVersionInfo.Library library : versionInfo.libraries) { - File libJarFile = library.getFile(jarStore); + if (!LoomGradlePlugin.refreshDeps && !requiresExtract()) { + project.getLogger().info("Natives do no need extracting, skipping"); + return; + } - if (library.allowed() && library.isNative() && libJarFile != null) { - if (!offline) { - DownloadUtil.downloadIfChanged(new URL(library.getURL()), libJarFile, project.getLogger()); - } + extractNatives(); + } - if (!libJarFile.exists()) { - throw new GradleException("Native jar not found at " + libJarFile.getAbsolutePath()); - } + private void extractNatives() throws IOException { + boolean offline = project.getGradle().getStartParameter().isOffline(); - // TODO possibly find a way to prevent needing to re-extract after each run, doesnt seem too slow - ZipUtil.unpack(libJarFile, nativesDir); + if (nativesDir.exists()) { + try { + FileUtils.deleteDirectory(nativesDir); + } catch (IOException e) { + throw new IOException("Failed to delete the natives directory, is the game running?", e); } } + + nativesDir.mkdirs(); + + for (MinecraftVersionMeta.Classifier library : getNatives()) { + File libJarFile = library.getRelativeFile(jarStore); + + if (!offline) { + HashedDownloadUtil.downloadIfInvalid(new URL(library.getUrl()), libJarFile, library.getSha1(), project.getLogger(), false); + } + + if (!libJarFile.exists()) { + throw new GradleException("Native jar not found at " + libJarFile.getAbsolutePath()); + } + + ZipUtil.unpack(libJarFile, nativesDir); + + // Store a file containing the hash of the extracted natives, used on subsequent runs to skip extracting all the natives if they haven't changed + File libSha1File = new File(nativesDir, libJarFile.getName() + ".sha1"); + FileUtils.writeStringToFile(libSha1File, library.getSha1(), StandardCharsets.UTF_8); + } + } + + private boolean requiresExtract() { + List natives = getNatives(); + + if (natives.isEmpty()) { + throw new IllegalStateException("No natives found for the current system"); + } + + for (MinecraftVersionMeta.Classifier library : natives) { + File libJarFile = library.getRelativeFile(jarStore); + File libSha1File = new File(nativesDir, libJarFile.getName() + ".sha1"); + + if (!libSha1File.exists()) { + return true; + } + + try { + String sha1 = FileUtils.readFileToString(libSha1File, StandardCharsets.UTF_8); + + if (!sha1.equalsIgnoreCase(library.getSha1())) { + return true; + } + } catch (IOException e) { + project.getLogger().error("Failed to read " + libSha1File.getAbsolutePath(), e); + return true; + } + } + + // All looks good, no need to re-extract + return false; + } + + private List getNatives() { + return extension.getMinecraftProvider().getVersionInfo().getLibraries().stream() + .filter((MinecraftVersionMeta.Library::hasNativesForOS)) + .map(MinecraftVersionMeta.Library::getClassifierForOS) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionInfo.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionInfo.java deleted file mode 100644 index 0994b4cc..00000000 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionInfo.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * This file is part of fabric-loom, licensed under the MIT License (MIT). - * - * Copyright (c) 2016, 2017, 2018 FabricMC - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.fabricmc.loom.configuration.providers.minecraft; - -import java.io.File; -import java.util.List; -import java.util.Map; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import net.fabricmc.loom.util.Constants; -import net.fabricmc.loom.util.OperatingSystem; - -public class MinecraftVersionInfo { - public List libraries; - public Map downloads; - public AssetIndex assetIndex; - - public class Downloads { - public String url; - public String sha1; - } - - public class AssetIndex { - private String id; - public String sha1; - public String url; - - public String getId() { - return id; - } - - public String getFabricId(String version) { - return id.equals(version) ? version : version + "-" + id; - } - } - - public class Library { - public String name; - public JsonObject natives; - public JsonObject downloads; - private Artifact artifact; - public Rule[] rules; - - public String getURL() { - String path; - String[] parts = this.name.split(":", 3); - path = parts[0].replace(".", "/") + "/" + parts[1] + "/" + parts[2] + "/" + parts[1] + "-" + parts[2] + getClassifier() + ".jar"; - return Constants.LIBRARIES_BASE + path; - } - - public File getFile(File baseDir) { - String[] parts = this.name.split(":", 3); - return new File(baseDir, parts[0].replace(".", File.separator) + File.separator + parts[1] + File.separator + parts[2] + File.separator + parts[1] + "-" + parts[2] + getClassifier() + ".jar"); - } - - public String getSha1() { - if (this.downloads == null) { - return ""; - } else if (this.downloads.getAsJsonObject("artifact") == null) { - return ""; - } else if (this.downloads.getAsJsonObject("artifact").get("sha1") == null) { - return ""; - } else { - return this.downloads.getAsJsonObject("artifact").get("sha1").getAsString(); - } - } - - public String getClassifier() { - if (natives == null) { - return ""; - } else { - JsonElement element = natives.get(OperatingSystem.getOS().replace("${arch}", OperatingSystem.getArch())); - - if (element == null) { - return ""; - } - - return "-" + element.getAsString().replace("\"", "").replace("${arch}", OperatingSystem.getArch()); - } - } - - public boolean isNative() { - return getClassifier().contains("natives"); - } - - public boolean allowed() { - if (this.rules == null || this.rules.length <= 0) { - return true; - } - - boolean success = false; - - for (Rule rule : this.rules) { - if (rule.os != null && rule.os.name != null) { - if (rule.os.name.equalsIgnoreCase(OperatingSystem.getOS())) { - return rule.action.equalsIgnoreCase("allow"); - } - } else { - success = rule.action.equalsIgnoreCase("allow"); - } - } - - return success; - } - - public String getArtifactName() { - if (artifact == null) { - artifact = new Artifact(name); - } - - if (natives != null) { - JsonElement jsonElement = natives.get(OperatingSystem.getOS()); - - if (jsonElement != null) { - return artifact.getArtifact(jsonElement.getAsString()); - } - } - - return artifact.getArtifact(artifact.classifier); - } - - private class Artifact { - private final String domain, name, version, classifier, ext; - - Artifact(String name) { - String[] splitedArtifact = name.split(":"); - int idx = splitedArtifact[splitedArtifact.length - 1].indexOf('@'); - - if (idx != -1) { - ext = splitedArtifact[splitedArtifact.length - 1].substring(idx + 1); - splitedArtifact[splitedArtifact.length - 1] = splitedArtifact[splitedArtifact.length - 1].substring(0, idx); - } else { - ext = "jar"; - } - - this.domain = splitedArtifact[0]; - this.name = splitedArtifact[1]; - this.version = splitedArtifact[2]; - this.classifier = splitedArtifact.length > 3 ? splitedArtifact[3] : null; - } - - public String getArtifact(String classifier) { - String ret = domain + ":" + name + ":" + version; - - if (classifier != null && classifier.indexOf('$') > -1) { - classifier = classifier.replace("${arch}", Constants.SYSTEM_ARCH); - } - - if (classifier != null) { - ret += ":" + classifier; - } - - if (!"jar".equals(ext)) { - ret += "@" + ext; - } - - return ret; - } - - public String getClassifier() { - return classifier; - } - } - } - - private class Rule { - public String action; - public OS os; - - private class OS { - String name; - } - } -} diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionMeta.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionMeta.java new file mode 100644 index 00000000..f6676283 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftVersionMeta.java @@ -0,0 +1,277 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2016, 2017, 2018 FabricMC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.fabricmc.loom.configuration.providers.minecraft; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import com.google.gson.JsonObject; + +import net.fabricmc.loom.util.OperatingSystem; + +@SuppressWarnings("unused") +public final class MinecraftVersionMeta { + private JsonObject arguments; + private AssetIndex assetIndex; + private String assets; + private int complianceLevel; + private Map downloads; + private String id; + private List libraries; + private JsonObject logging; + private String mainClass; + private int minimumLauncherVersion; + private String releaseTime; + private String time; + private String type; + + public Download getDownload(String key) { + return getDownloads().get(key); + } + + public JsonObject getArguments() { + return arguments; + } + + public AssetIndex getAssetIndex() { + return assetIndex; + } + + public String getAssets() { + return assets; + } + + public int getComplianceLevel() { + return complianceLevel; + } + + public Map getDownloads() { + return downloads; + } + + public String getId() { + return id; + } + + public List getLibraries() { + return libraries; + } + + public JsonObject getLogging() { + return logging; + } + + public String getMainClass() { + return mainClass; + } + + public int getMinimumLauncherVersion() { + return minimumLauncherVersion; + } + + public String getReleaseTime() { + return releaseTime; + } + + public String getTime() { + return time; + } + + public String getType() { + return type; + } + + public final class AssetIndex extends Downloadable { + private String id; + private long totalSize; + + public String getFabricId(String version) { + return id.equals(version) ? version : version + "-" + id; + } + + public String getId() { + return id; + } + + public long getTotalSize() { + return totalSize; + } + } + + public final class Download extends Downloadable { + } + + public final class Library { + private Downloads downloads; + private String name; + private Map natives; + private List rules; + + public boolean isValidForOS() { + if (rules == null || rules.isEmpty()) { + return true; + } + + for (Rule rule : rules) { + if (rule.appliesToOS() && !rule.isAllowed()) { + return false; + } + } + + return true; + } + + public boolean hasNatives() { + return this.natives != null; + } + + public boolean hasNativesForOS() { + if (!hasNatives()) { + return false; + } + + if (natives.get(OperatingSystem.getOS()) == null) { + return false; + } + + return isValidForOS(); + } + + public Classifier getClassifierForOS() { + return getDownloads().getClassifier(natives.get(OperatingSystem.getOS())); + } + + public Downloads getDownloads() { + return downloads; + } + + public Artifact getArtifact() { + if (getDownloads() == null) { + return null; + } + + return getDownloads().getArtifact(); + } + + public String getName() { + return name; + } + + public Map getNatives() { + return natives; + } + + public List getRules() { + return rules; + } + } + + public final class Downloads { + private Artifact artifact; + private Map classifiers; + + public Classifier getClassifier(String os) { + return classifiers.get(os); + } + + public Artifact getArtifact() { + return artifact; + } + + public Map getClassifiers() { + return classifiers; + } + } + + public final class Artifact extends Downloadable { + } + + public final class Classifier extends Downloadable { + } + + public final class Rule { + private String action; + private OS os; + + public boolean appliesToOS() { + return getOS() == null || getOS().isValidForOS(); + } + + public boolean isAllowed() { + return getAction().equals("allow"); + } + + public String getAction() { + return action; + } + + public OS getOS() { + return os; + } + } + + public final class OS { + private String name; + + public boolean isValidForOS() { + return getName() == null || getName().equalsIgnoreCase(OperatingSystem.getOS()); + } + + public String getName() { + return name; + } + } + + // A base class for everything that can be downloaded + public abstract class Downloadable { + private String path; + private String sha1; + private long size; + private String url; + + public File getRelativeFile(File baseDirectory) { + Objects.requireNonNull(getPath(), "Cannot get relative file from a null path"); + return new File(baseDirectory, getPath()); + } + + public String getPath() { + return path; + } + + public String getSha1() { + return sha1; + } + + public long getSize() { + return size; + } + + public String getUrl() { + return url; + } + } +} diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java index 55e07c15..64722c60 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java @@ -26,32 +26,25 @@ package net.fabricmc.loom.configuration.providers.minecraft.assets; import java.io.File; import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; import java.net.URL; import java.util.Deque; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import com.google.common.base.Stopwatch; -import com.google.common.hash.Hashing; -import com.google.common.io.Files; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import org.gradle.api.GradleException; import org.gradle.api.Project; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.LoomGradlePlugin; import net.fabricmc.loom.configuration.providers.MinecraftProvider; -import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionInfo; -import net.fabricmc.loom.util.Checksum; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionMeta; import net.fabricmc.loom.util.Constants; -import net.fabricmc.loom.util.DownloadUtil; +import net.fabricmc.loom.util.HashedDownloadUtil; import net.fabricmc.loom.util.gradle.ProgressLogger; public class MinecraftAssetsProvider { @@ -59,8 +52,8 @@ public class MinecraftAssetsProvider { LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); boolean offline = project.getGradle().getStartParameter().isOffline(); - MinecraftVersionInfo versionInfo = minecraftProvider.getVersionInfo(); - MinecraftVersionInfo.AssetIndex assetIndex = versionInfo.assetIndex; + MinecraftVersionMeta versionInfo = minecraftProvider.getVersionInfo(); + MinecraftVersionMeta.AssetIndex assetIndex = versionInfo.getAssetIndex(); // get existing cache files File assets = new File(extension.getUserCache(), "assets"); @@ -70,42 +63,28 @@ public class MinecraftAssetsProvider { } File assetsInfo = new File(assets, "indexes" + File.separator + assetIndex.getFabricId(minecraftProvider.getMinecraftVersion()) + ".json"); - File checksumInfo = new File(assets, "checksum" + File.separator + minecraftProvider.getMinecraftVersion() + ".json"); - if (!assetsInfo.exists() || !Checksum.equals(assetsInfo, assetIndex.sha1)) { - project.getLogger().info(":downloading asset index"); + project.getLogger().info(":downloading asset index"); - if (offline) { - if (assetsInfo.exists()) { - //We know it's outdated but can't do anything about it, oh well - project.getLogger().warn("Asset index outdated"); - } else { - //We don't know what assets we need, just that we don't have any - throw new GradleException("Asset index not found at " + assetsInfo.getAbsolutePath()); - } + if (offline) { + if (assetsInfo.exists()) { + //We know it's outdated but can't do anything about it, oh well + project.getLogger().warn("Asset index outdated"); } else { - DownloadUtil.downloadIfChanged(new URL(assetIndex.url), assetsInfo, project.getLogger()); - } - } - - Gson gson = new Gson(); - Map checksumInfos = new ConcurrentHashMap<>(); - - if (checksumInfo.exists()) { - try (FileReader reader = new FileReader(checksumInfo)) { - checksumInfos.putAll(gson.fromJson(reader, new TypeToken>() { - }.getType())); + //We don't know what assets we need, just that we don't have any + throw new GradleException("Asset index not found at " + assetsInfo.getAbsolutePath()); } + } else { + HashedDownloadUtil.downloadIfInvalid(new URL(assetIndex.getUrl()), assetsInfo, assetIndex.getSha1(), project.getLogger(), false); } Deque loggers = new ConcurrentLinkedDeque<>(); ExecutorService executor = Executors.newFixedThreadPool(Math.min(10, Math.max(Runtime.getRuntime().availableProcessors() / 2, 1))); - int toDownload = 0; AssetIndex index; try (FileReader fileReader = new FileReader(assetsInfo)) { - index = gson.fromJson(fileReader, AssetIndex.class); + index = LoomGradlePlugin.GSON.fromJson(fileReader, AssetIndex.class); } Stopwatch stopwatch = Stopwatch.createStarted(); @@ -118,75 +97,49 @@ public class MinecraftAssetsProvider { String filename = "objects" + File.separator + sha1.substring(0, 2) + File.separator + sha1; File file = new File(assets, filename); - String localFileChecksum = !file.exists() ? null : checksumInfos.computeIfAbsent(entry.getKey(), path -> { - try { - return Files.asByteSource(file).hash(Hashing.sha1()).toString(); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - }); - - if (LoomGradlePlugin.refreshDeps || localFileChecksum == null || !localFileChecksum.equals(sha1)) { - if (offline) { - if (file.exists()) { - project.getLogger().warn("Outdated asset " + entry.getKey()); - } else { - throw new GradleException("Asset " + entry.getKey() + " not found at " + file.getAbsolutePath()); - } + if (offline) { + if (file.exists()) { + project.getLogger().warn("Outdated asset " + entry.getKey()); } else { - toDownload++; - executor.execute(() -> { - ProgressLogger progressLogger; - - if (loggers.isEmpty()) { - //Create a new logger if we need one - progressLogger = ProgressLogger.getProgressFactory(project, MinecraftAssetsProvider.class.getName()); - progressLogger.start("Downloading assets...", "assets"); - } else { - // use a free logger if we can - progressLogger = loggers.pop(); - } - - String assetName = entry.getKey(); - int end = assetName.lastIndexOf("/") + 1; - - if (end > 0) { - assetName = assetName.substring(end); - } - - project.getLogger().debug(":downloading asset " + assetName); - progressLogger.progress(String.format("%-30.30s", assetName) + " - " + sha1); - - try { - DownloadUtil.downloadIfChanged(new URL(Constants.RESOURCES_BASE + sha1.substring(0, 2) + "/" + sha1), file, project.getLogger(), true); - } catch (IOException e) { - throw new RuntimeException("Failed to download: " + assetName, e); - } - - if (localFileChecksum == null) { - checksumInfos.put(entry.getKey(), sha1); - } - - //Give this logger back - loggers.add(progressLogger); - }); + throw new GradleException("Asset " + entry.getKey() + " not found at " + file.getAbsolutePath()); } + } else { + executor.execute(() -> { + ProgressLogger progressLogger; + + if (loggers.isEmpty()) { + //Create a new logger if we need one + progressLogger = ProgressLogger.getProgressFactory(project, MinecraftAssetsProvider.class.getName()); + progressLogger.start("Downloading assets...", "assets"); + } else { + // use a free logger if we can + progressLogger = loggers.pop(); + } + + String assetName = entry.getKey(); + int end = assetName.lastIndexOf("/") + 1; + + if (end > 0) { + assetName = assetName.substring(end); + } + + project.getLogger().debug(":downloading asset " + assetName); + progressLogger.progress(String.format("%-30.30s", assetName) + " - " + sha1); + + try { + HashedDownloadUtil.downloadIfInvalid(new URL(Constants.RESOURCES_BASE + sha1.substring(0, 2) + "/" + sha1), file, sha1, project.getLogger(), true); + } catch (IOException e) { + throw new RuntimeException("Failed to download: " + assetName, e); + } + + //Give this logger back + loggers.add(progressLogger); + }); } } project.getLogger().info("Took " + stopwatch.stop() + " to iterate " + parent.size() + " asset index."); - if (toDownload > 0) { - project.getLogger().lifecycle(":downloading " + toDownload + " asset" + (toDownload == 1 ? "" : "s") + "..."); - } - - checksumInfo.getParentFile().mkdirs(); - - try (FileWriter writer = new FileWriter(checksumInfo)) { - gson.toJson(checksumInfos, writer); - } - //Wait for the assets to all download executor.shutdown(); diff --git a/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java b/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java index 8607dbeb..3a5dba87 100644 --- a/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java +++ b/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java @@ -40,6 +40,6 @@ public class DownloadAssetsTask extends AbstractLoomTask { LoomGradleExtension extension = getExtension(); MinecraftAssetsProvider.provide(extension.getMinecraftProvider(), project); - MinecraftNativesProvider.provide(extension.getMinecraftProvider(), project); + MinecraftNativesProvider.provide(project); } } From da6a50d55859958d7f8a7fb99ad7642f726e7a75 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Fri, 12 Feb 2021 18:18:42 +0000 Subject: [PATCH 6/9] asm 9.1 --- build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index fa624a48..beb597d9 100644 --- a/build.gradle +++ b/build.gradle @@ -40,11 +40,11 @@ dependencies { implementation ('org.zeroturnaround:zt-zip:1.14') implementation ('com.google.code.gson:gson:2.8.6') implementation ('com.google.guava:guava:30.1-jre') - implementation ('org.ow2.asm:asm:9.0') - implementation ('org.ow2.asm:asm-analysis:9.0') - implementation ('org.ow2.asm:asm-commons:9.0') - implementation ('org.ow2.asm:asm-tree:9.0') - implementation ('org.ow2.asm:asm-util:9.0') + implementation ('org.ow2.asm:asm:9.1') + implementation ('org.ow2.asm:asm-analysis:9.1') + implementation ('org.ow2.asm:asm-commons:9.1') + implementation ('org.ow2.asm:asm-tree:9.1') + implementation ('org.ow2.asm:asm-util:9.1') // game handling utils implementation ('net.fabricmc:stitch:0.5.1+build.77') { From 737c6cbd4fccde3878dba05cfd26e5a0811caa5c Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Fri, 12 Feb 2021 20:43:05 +0200 Subject: [PATCH 7/9] RunConfigSettings.generateIDEConfig -> ideConfigGenerated + normal getter/setter (#349) --- .../configuration/ide/RunConfigSettings.java | 16 ++++++++++------ .../ide/SetupIntelijRunConfigs.java | 2 +- .../fabricmc/loom/task/GenEclipseRunsTask.java | 2 +- .../fabricmc/loom/task/GenIdeaProjectTask.java | 2 +- .../fabricmc/loom/task/GenVsCodeProjectTask.java | 2 +- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java index 97c4c3e6..60a81fd6 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java @@ -97,7 +97,7 @@ public final class RunConfigSettings implements Named { * *

By default only run configs on the root project will be generated. */ - private boolean generateIDEConfig; + private boolean ideConfigGenerated; private final Project project; private final LoomGradleExtension extension; @@ -106,7 +106,7 @@ public final class RunConfigSettings implements Named { this.baseName = baseName; this.project = project; this.extension = project.getExtensions().getByType(LoomGradleExtension.class); - this.generateIDEConfig = extension.isRootProject(); + this.ideConfigGenerated = extension.isRootProject(); source("main"); runDir("run"); @@ -240,8 +240,8 @@ public final class RunConfigSettings implements Named { }); } - public void generateIDEConfig(boolean generateIDEConfig) { - this.generateIDEConfig = generateIDEConfig; + public void ideConfigGenerated(boolean ideConfigGenerated) { + this.ideConfigGenerated = ideConfigGenerated; } /** @@ -300,7 +300,11 @@ public final class RunConfigSettings implements Named { } } - public boolean shouldGenerateIDEConfig() { - return generateIDEConfig; + public boolean isIdeConfigGenerated() { + return ideConfigGenerated; + } + + public void setIdeConfigGenerated(boolean ideConfigGenerated) { + this.ideConfigGenerated = ideConfigGenerated; } } diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java index 14576ec3..d3911d18 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/SetupIntelijRunConfigs.java @@ -72,7 +72,7 @@ public class SetupIntelijRunConfigs { } for (RunConfigSettings settings : extension.getRunConfigs()) { - if (!settings.shouldGenerateIDEConfig()) { + if (!settings.isIdeConfigGenerated()) { continue; } diff --git a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java index 61d98ee1..c935f68a 100644 --- a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java @@ -43,7 +43,7 @@ public class GenEclipseRunsTask extends AbstractLoomTask { LoomGradleExtension extension = getExtension(); for (RunConfigSettings settings : extension.getRunConfigs()) { - if (!settings.shouldGenerateIDEConfig()) { + if (!settings.isIdeConfigGenerated()) { continue; } diff --git a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java index cc9ce76e..dbf19a65 100644 --- a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java @@ -84,7 +84,7 @@ public class GenIdeaProjectTask extends AbstractLoomTask { } for (RunConfigSettings settings : getExtension().getRunConfigs()) { - if (!settings.shouldGenerateIDEConfig()) { + if (!settings.isIdeConfigGenerated()) { continue; } diff --git a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java index 927159ec..2b7e4139 100644 --- a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java @@ -64,7 +64,7 @@ public class GenVsCodeProjectTask extends AbstractLoomTask { VsCodeLaunch launch = new VsCodeLaunch(); for (RunConfigSettings settings : getExtension().getRunConfigs()) { - if (!settings.shouldGenerateIDEConfig()) { + if (!settings.isIdeConfigGenerated()) { continue; } From dd440acb8e9895d0376911ff958e94970dda8dbb Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Sat, 13 Feb 2021 18:53:44 +0200 Subject: [PATCH 8/9] Add dev runtime dependencies to runtimeClasspath instead of runtimeOnly (#350) This stops them from incorrectly showing up in Gradle module metadata when a software component is used. --- .../loom/configuration/providers/LaunchProvider.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java index c809e7a6..7c3a894b 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java @@ -41,6 +41,7 @@ import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.gradle.api.Project; import org.gradle.api.artifacts.Dependency; +import org.gradle.api.plugins.JavaPlugin; import net.fabricmc.loom.configuration.DependencyProvider; import net.fabricmc.loom.configuration.RemappedConfigurationEntry; @@ -78,8 +79,8 @@ public class LaunchProvider extends DependencyProvider { writeLog4jConfig(); FileUtils.writeStringToFile(getExtension().getDevLauncherConfig(), launchConfig.asString(), StandardCharsets.UTF_8); - addDependency(Constants.Dependencies.DEV_LAUNCH_INJECTOR + Constants.Dependencies.Versions.DEV_LAUNCH_INJECTOR, "runtimeOnly"); - addDependency(Constants.Dependencies.TERMINAL_CONSOLE_APPENDER + Constants.Dependencies.Versions.TERMINAL_CONSOLE_APPENDER, "runtimeOnly"); + addDependency(Constants.Dependencies.DEV_LAUNCH_INJECTOR + Constants.Dependencies.Versions.DEV_LAUNCH_INJECTOR, JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + addDependency(Constants.Dependencies.TERMINAL_CONSOLE_APPENDER + Constants.Dependencies.Versions.TERMINAL_CONSOLE_APPENDER, JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); annotationDependency = addDependency(Constants.Dependencies.JETBRAINS_ANNOTATIONS + Constants.Dependencies.Versions.JETBRAINS_ANNOTATIONS, "compileOnly"); postPopulationScheduler.accept(this::writeRemapClassPath); From 2070aeb94aec2823e0941b71c9019424494cf792 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sat, 13 Feb 2021 18:04:16 +0000 Subject: [PATCH 9/9] Disable log4j jansi support when compiling, removes a warning about it. --- .../net/fabricmc/loom/configuration/CompileConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index 8402ce36..972144ce 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -262,6 +262,7 @@ public final class CompileConfiguration { // Disable some things used by log4j via the mixin AP that prevent it from being garbage collected System.setProperty("log4j2.disable.jmx", "true"); System.setProperty("log4j.shutdownHookEnabled", "false"); + System.setProperty("log4j.skipJansi", "true"); project.getLogger().info("Configuring compiler arguments for Java"); new JavaApInvoker(project).configureMixin();