Refactor LoomGradleExtension (#431)
* First pass at refactoring the extension * Fix inital issues. * Combine some interfaces * Checkstyle * Fix years * Add isShareCaches to apidev/0.11
parent
2259a4efc8
commit
e439a1b354
|
@ -25,368 +25,86 @@
|
|||
package net.fabricmc.loom;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.cadixdev.lorenz.MappingSet;
|
||||
import org.cadixdev.mercury.Mercury;
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
import org.gradle.api.NamedDomainObjectProvider;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Dependency;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.gradle.api.file.ConfigurableFileCollection;
|
||||
import org.gradle.api.plugins.BasePluginConvention;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||
import net.fabricmc.loom.configuration.InstallerData;
|
||||
import net.fabricmc.loom.configuration.LoomDependencyManager;
|
||||
import net.fabricmc.loom.configuration.LoomProjectData;
|
||||
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
||||
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
||||
import net.fabricmc.loom.configuration.processors.JarProcessorManager;
|
||||
import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl;
|
||||
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.GradleMappingContext;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpec;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuilder;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsDependency;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
|
||||
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
|
||||
import net.fabricmc.loom.extension.LoomFiles;
|
||||
import net.fabricmc.loom.extension.LoomGradleExtensionImpl;
|
||||
|
||||
public class LoomGradleExtension {
|
||||
public String refmapName;
|
||||
public String loaderLaunchMethod;
|
||||
public boolean remapMod = true;
|
||||
public String customManifest = null;
|
||||
public File accessWidener = null;
|
||||
public Function<String, Object> intermediaryUrl = mcVer -> "https://maven.fabricmc.net/net/fabricmc/intermediary/" + mcVer + "/intermediary-" + mcVer + "-v2.jar";
|
||||
public boolean shareCaches = false;
|
||||
|
||||
private final ConfigurableFileCollection unmappedMods;
|
||||
private final ConfigurableFileCollection log4jConfigs;
|
||||
|
||||
final List<LoomDecompiler> decompilers = new ArrayList<>();
|
||||
private final List<JarProcessor> jarProcessors = new ArrayList<>();
|
||||
|
||||
// Not to be set in the build.gradle
|
||||
private final Project project;
|
||||
private LoomDependencyManager dependencyManager;
|
||||
private JarProcessorManager jarProcessorManager;
|
||||
private InstallerData installerData;
|
||||
private MappingSet[] srcMappingCache = new MappingSet[2];
|
||||
private Mercury[] srcMercuryCache = new Mercury[2];
|
||||
private Set<File> mixinMappings = Collections.synchronizedSet(new HashSet<>());
|
||||
|
||||
@ApiStatus.Internal
|
||||
private final LoomProjectData projectData;
|
||||
|
||||
private NamedDomainObjectContainer<RunConfigSettings> runConfigs;
|
||||
|
||||
/**
|
||||
* Loom will generate a new genSources task (with a new name, based off of {@link LoomDecompiler#name()})
|
||||
* that uses the specified decompiler instead.
|
||||
*/
|
||||
public void addDecompiler(LoomDecompiler decompiler) {
|
||||
decompilers.add(decompiler);
|
||||
public interface LoomGradleExtension extends LoomGradleExtensionAPI {
|
||||
static LoomGradleExtension get(Project project) {
|
||||
return project.getExtensions().getByType(LoomGradleExtensionImpl.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a transformation over the mapped mc jar.
|
||||
* Adding any jar processor will cause mapped mc jars to be stored per-project so that
|
||||
* different transformation can be applied in different projects.
|
||||
* This means remapping will need to be done individually per-project, which is slower when developing
|
||||
* more than one project using the same minecraft version.
|
||||
*/
|
||||
public void addJarProcessor(JarProcessor processor) {
|
||||
jarProcessors.add(processor);
|
||||
}
|
||||
LoomFiles getFiles();
|
||||
|
||||
public MappingSet getOrCreateSrcMappingCache(int id, Supplier<MappingSet> factory) {
|
||||
return srcMappingCache[id] != null ? srcMappingCache[id] : (srcMappingCache[id] = factory.get());
|
||||
}
|
||||
NamedDomainObjectProvider<Configuration> createLazyConfiguration(String name);
|
||||
|
||||
public Mercury getOrCreateSrcMercuryCache(int id, Supplier<Mercury> factory) {
|
||||
return srcMercuryCache[id] != null ? srcMercuryCache[id] : (srcMercuryCache[id] = factory.get());
|
||||
}
|
||||
NamedDomainObjectProvider<Configuration> getLazyConfigurationProvider(String name);
|
||||
|
||||
public Dependency officialMojangMappings() {
|
||||
return layered(LayeredMappingSpecBuilder::officialMojangMappings);
|
||||
}
|
||||
MappingSet getOrCreateSrcMappingCache(int id, Supplier<MappingSet> factory);
|
||||
|
||||
public Dependency layered(Action<LayeredMappingSpecBuilder> action) {
|
||||
LayeredMappingSpecBuilder builder = new LayeredMappingSpecBuilder();
|
||||
action.execute(builder);
|
||||
LayeredMappingSpec builtSpec = builder.build();
|
||||
return new LayeredMappingsDependency(new GradleMappingContext(project, "layers_" + builtSpec.getVersion().replace("+", "_").replace(".", "_")), builtSpec, builtSpec.getVersion());
|
||||
}
|
||||
Mercury getOrCreateSrcMercuryCache(int id, Supplier<Mercury> factory);
|
||||
|
||||
public LoomGradleExtension(Project project) {
|
||||
this.project = project;
|
||||
this.unmappedMods = project.files();
|
||||
this.runConfigs = project.container(RunConfigSettings.class,
|
||||
baseName -> new RunConfigSettings(project, baseName));
|
||||
this.log4jConfigs = project.files(getDefaultLog4jConfigFile());
|
||||
projectData = new LoomProjectData(project);
|
||||
}
|
||||
ConfigurableFileCollection getUnmappedModCollection();
|
||||
|
||||
/**
|
||||
* @see ConfigurableFileCollection#from(Object...)
|
||||
* @deprecated use {@link #getUnmappedModCollection()}{@code .from()} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public void addUnmappedMod(Path file) {
|
||||
getUnmappedModCollection().from(file);
|
||||
}
|
||||
void setInstallerData(InstallerData data);
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getUnmappedModCollection()} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public List<Path> getUnmappedMods() {
|
||||
return unmappedMods.getFiles().stream()
|
||||
.map(File::toPath)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
InstallerData getInstallerData();
|
||||
|
||||
public ConfigurableFileCollection getUnmappedModCollection() {
|
||||
return unmappedMods;
|
||||
}
|
||||
void setDependencyManager(LoomDependencyManager dependencyManager);
|
||||
|
||||
public void setInstallerData(InstallerData data) {
|
||||
this.installerData = data;
|
||||
}
|
||||
LoomDependencyManager getDependencyManager();
|
||||
|
||||
public InstallerData getInstallerData() {
|
||||
return installerData;
|
||||
}
|
||||
void setJarProcessorManager(JarProcessorManager jarProcessorManager);
|
||||
|
||||
public void accessWidener(Object file) {
|
||||
this.accessWidener = project.file(file);
|
||||
}
|
||||
JarProcessorManager getJarProcessorManager();
|
||||
|
||||
public File getUserCache() {
|
||||
File userCache = new File(project.getGradle().getGradleUserHomeDir(), "caches" + File.separator + "fabric-loom");
|
||||
|
||||
if (!userCache.exists()) {
|
||||
userCache.mkdirs();
|
||||
}
|
||||
|
||||
return userCache;
|
||||
}
|
||||
|
||||
public File getRootProjectPersistentCache() {
|
||||
File projectCache = new File(project.getRootProject().file(".gradle"), "loom-cache");
|
||||
|
||||
if (!projectCache.exists()) {
|
||||
projectCache.mkdirs();
|
||||
}
|
||||
|
||||
return projectCache;
|
||||
}
|
||||
|
||||
public File getProjectPersistentCache() {
|
||||
File projectCache = new File(project.file(".gradle"), "loom-cache");
|
||||
|
||||
if (!projectCache.exists()) {
|
||||
projectCache.mkdirs();
|
||||
}
|
||||
|
||||
return projectCache;
|
||||
}
|
||||
|
||||
public File getRootProjectBuildCache() {
|
||||
File projectCache = new File(project.getRootProject().getBuildDir(), "loom-cache");
|
||||
|
||||
if (!projectCache.exists()) {
|
||||
projectCache.mkdirs();
|
||||
}
|
||||
|
||||
return projectCache;
|
||||
}
|
||||
|
||||
public File getProjectBuildCache() {
|
||||
File projectCache = new File(project.getBuildDir(), "loom-cache");
|
||||
|
||||
if (!projectCache.exists()) {
|
||||
projectCache.mkdirs();
|
||||
}
|
||||
|
||||
return projectCache;
|
||||
}
|
||||
|
||||
public File getRemappedModCache() {
|
||||
File remappedModCache = new File(getRootProjectPersistentCache(), "remapped_mods");
|
||||
|
||||
if (!remappedModCache.exists()) {
|
||||
remappedModCache.mkdir();
|
||||
}
|
||||
|
||||
return remappedModCache;
|
||||
}
|
||||
|
||||
public File getNestedModCache() {
|
||||
File nestedModCache = new File(getRootProjectPersistentCache(), "nested_mods");
|
||||
|
||||
if (!nestedModCache.exists()) {
|
||||
nestedModCache.mkdir();
|
||||
}
|
||||
|
||||
return nestedModCache;
|
||||
}
|
||||
|
||||
public File getNativesJarStore() {
|
||||
File natives = new File(getUserCache(), "natives/jars");
|
||||
|
||||
if (!natives.exists()) {
|
||||
natives.mkdirs();
|
||||
}
|
||||
|
||||
return natives;
|
||||
}
|
||||
|
||||
public File getNativesDirectory() {
|
||||
if (project.hasProperty("fabric.loom.natives.dir")) {
|
||||
return new File((String) project.property("fabric.loom.natives.dir"));
|
||||
}
|
||||
|
||||
File natives = new File(getUserCache(), "natives/" + getMinecraftProvider().minecraftVersion());
|
||||
|
||||
if (!natives.exists()) {
|
||||
natives.mkdirs();
|
||||
}
|
||||
|
||||
return natives;
|
||||
}
|
||||
|
||||
public boolean hasCustomNatives() {
|
||||
return project.getProperties().get("fabric.loom.natives.dir") != null;
|
||||
}
|
||||
|
||||
public File getDevLauncherConfig() {
|
||||
return new File(getProjectPersistentCache(), "launch.cfg");
|
||||
}
|
||||
|
||||
public String getLoaderLaunchMethod() {
|
||||
return loaderLaunchMethod != null ? loaderLaunchMethod : "";
|
||||
}
|
||||
|
||||
public LoomDependencyManager getDependencyManager() {
|
||||
return dependencyManager;
|
||||
}
|
||||
|
||||
public MinecraftProviderImpl getMinecraftProvider() {
|
||||
default MinecraftProviderImpl getMinecraftProvider() {
|
||||
return getDependencyManager().getProvider(MinecraftProviderImpl.class);
|
||||
}
|
||||
|
||||
public MinecraftMappedProvider getMinecraftMappedProvider() {
|
||||
return getMappingsProvider().mappedProvider;
|
||||
}
|
||||
|
||||
public MappingsProviderImpl getMappingsProvider() {
|
||||
default MappingsProviderImpl getMappingsProvider() {
|
||||
return getDependencyManager().getProvider(MappingsProviderImpl.class);
|
||||
}
|
||||
|
||||
public void setDependencyManager(LoomDependencyManager dependencyManager) {
|
||||
this.dependencyManager = dependencyManager;
|
||||
default MinecraftMappedProvider getMinecraftMappedProvider() {
|
||||
return getMappingsProvider().mappedProvider;
|
||||
}
|
||||
|
||||
public JarProcessorManager getJarProcessorManager() {
|
||||
return jarProcessorManager;
|
||||
}
|
||||
File getNextMixinMappings();
|
||||
|
||||
public void setJarProcessorManager(JarProcessorManager jarProcessorManager) {
|
||||
this.jarProcessorManager = jarProcessorManager;
|
||||
}
|
||||
Set<File> getAllMixinMappings();
|
||||
|
||||
public List<JarProcessor> getJarProcessors() {
|
||||
return jarProcessors;
|
||||
}
|
||||
boolean isRootProject();
|
||||
|
||||
public String getRefmapName() {
|
||||
if (refmapName == null || refmapName.isEmpty()) {
|
||||
String defaultRefmapName = project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
|
||||
project.getLogger().info("Could not find refmap definition, will be using default name: " + defaultRefmapName);
|
||||
refmapName = defaultRefmapName;
|
||||
}
|
||||
boolean isShareCaches();
|
||||
|
||||
return refmapName;
|
||||
}
|
||||
|
||||
public boolean ideSync() {
|
||||
default boolean ideSync() {
|
||||
return Boolean.parseBoolean(System.getProperty("idea.sync.active", "false"));
|
||||
}
|
||||
|
||||
// Ideally this should use maven, but this is a lot easier
|
||||
public Function<String, String> getIntermediaryUrl() {
|
||||
// Done like this to work around this possibly not being a java string...
|
||||
return s -> intermediaryUrl.apply(s).toString();
|
||||
default String getCustomManifest() {
|
||||
// TODO reimplement
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isRootProject() {
|
||||
return project.getRootProject() == project;
|
||||
}
|
||||
|
||||
public LoomGradleExtension getRootGradleExtension() {
|
||||
if (isRootProject()) {
|
||||
return this;
|
||||
}
|
||||
|
||||
return project.getRootProject().getExtensions().getByType(LoomGradleExtension.class);
|
||||
}
|
||||
|
||||
public LoomGradleExtension getSharedGradleExtension() {
|
||||
return isShareCaches() ? getRootGradleExtension() : this;
|
||||
}
|
||||
|
||||
public boolean isShareCaches() {
|
||||
return shareCaches;
|
||||
}
|
||||
|
||||
// Creates a new file each time its called, this is then held onto later when remapping the output jar
|
||||
// Required as now when using parallel builds the old single file could be written by another sourceset compile task
|
||||
public synchronized File getNextMixinMappings() {
|
||||
File mixinMapping = new File(getProjectBuildCache(), "mixin-map-" + getMinecraftProvider().minecraftVersion() + "-" + getMappingsProvider().mappingsVersion + "." + mixinMappings.size() + ".tiny");
|
||||
mixinMappings.add(mixinMapping);
|
||||
return mixinMapping;
|
||||
}
|
||||
|
||||
public Set<File> getAllMixinMappings() {
|
||||
return Collections.unmodifiableSet(mixinMappings);
|
||||
}
|
||||
|
||||
public List<LoomDecompiler> getDecompilers() {
|
||||
return decompilers;
|
||||
}
|
||||
|
||||
public File getDefaultLog4jConfigFile() {
|
||||
return new File(getProjectPersistentCache(), "log4j.xml");
|
||||
}
|
||||
|
||||
public File getUnpickLoggingConfigFile() {
|
||||
return new File(getProjectPersistentCache(), "unpick-logging.properties");
|
||||
}
|
||||
|
||||
public ConfigurableFileCollection getLog4jConfigs() {
|
||||
return log4jConfigs;
|
||||
}
|
||||
|
||||
public void runs(Action<NamedDomainObjectContainer<RunConfigSettings>> action) {
|
||||
action.execute(runConfigs);
|
||||
}
|
||||
|
||||
public NamedDomainObjectContainer<RunConfigSettings> getRunConfigs() {
|
||||
return runConfigs;
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public LoomProjectData getProjectData() {
|
||||
return projectData;
|
||||
default String getIntermediaryUrl(String minecraftVersion) {
|
||||
// TODO reimplement a way to change this, was never really supported api anyway
|
||||
return String.format("https://maven.fabricmc.net/net/fabricmc/intermediary/%1$s/intermediary-%1$s-v2.jar", minecraftVersion);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,6 +41,8 @@ import net.fabricmc.loom.configuration.MavenPublication;
|
|||
import net.fabricmc.loom.configuration.ide.IdeConfiguration;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.MappingsCache;
|
||||
import net.fabricmc.loom.decompilers.DecompilerConfiguration;
|
||||
import net.fabricmc.loom.extension.LoomGradleExtensionImpl;
|
||||
import net.fabricmc.loom.extension.LoomFilesImpl;
|
||||
import net.fabricmc.loom.task.LoomTasks;
|
||||
|
||||
public class LoomGradlePlugin implements BootstrappedPlugin {
|
||||
|
@ -74,7 +76,7 @@ public class LoomGradlePlugin implements BootstrappedPlugin {
|
|||
project.apply(ImmutableMap.of("plugin", "idea"));
|
||||
|
||||
// Setup extensions, loom shadows minecraft
|
||||
project.getExtensions().create("minecraft", LoomGradleExtension.class, project);
|
||||
project.getExtensions().create(LoomGradleExtension.class, "minecraft", LoomGradleExtensionImpl.class, project, new LoomFilesImpl(project));
|
||||
project.getExtensions().add("loom", project.getExtensions().getByName("minecraft"));
|
||||
project.getExtensions().create("fabricApi", FabricApiExtension.class, project);
|
||||
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 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.api;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
import org.gradle.api.artifacts.Dependency;
|
||||
import org.gradle.api.file.ConfigurableFileCollection;
|
||||
|
||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
||||
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuilder;
|
||||
|
||||
/**
|
||||
* This is the public api available exposed to build scripts.
|
||||
*/
|
||||
public interface LoomGradleExtensionAPI {
|
||||
File getAccessWidener();
|
||||
|
||||
void setAccessWidener(Object file);
|
||||
|
||||
void setShareCaches(boolean shareCaches);
|
||||
|
||||
boolean isShareCaches();
|
||||
|
||||
default void shareCaches() {
|
||||
setShareCaches(true);
|
||||
}
|
||||
|
||||
List<LoomDecompiler> getDecompilers();
|
||||
|
||||
void addDecompiler(LoomDecompiler decompiler);
|
||||
|
||||
List<JarProcessor> getJarProcessors();
|
||||
|
||||
void addJarProcessor(JarProcessor processor);
|
||||
|
||||
ConfigurableFileCollection getLog4jConfigs();
|
||||
|
||||
default Dependency officialMojangMappings() {
|
||||
return layered(LayeredMappingSpecBuilder::officialMojangMappings);
|
||||
}
|
||||
|
||||
Dependency layered(Action<LayeredMappingSpecBuilder> action);
|
||||
|
||||
String getRefmapName();
|
||||
|
||||
void setRefmapName(String refmapName);
|
||||
|
||||
boolean isRemapMod();
|
||||
|
||||
void setRemapMod(boolean remapMod);
|
||||
|
||||
void runs(Action<NamedDomainObjectContainer<RunConfigSettings>> action);
|
||||
|
||||
NamedDomainObjectContainer<RunConfigSettings> getRunConfigs();
|
||||
}
|
|
@ -51,7 +51,6 @@ import org.jetbrains.annotations.Nullable;
|
|||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
import net.fabricmc.loom.configuration.LoomProjectData;
|
||||
import net.fabricmc.loom.configuration.RemappedConfigurationEntry;
|
||||
import net.fabricmc.loom.configuration.mods.ModProcessor;
|
||||
import net.fabricmc.loom.configuration.processors.dependency.ModDependencyInfo;
|
||||
|
@ -76,13 +75,11 @@ public class ModCompileRemapper {
|
|||
DependencyHandler dependencies = project.getDependencies();
|
||||
boolean refreshDeps = LoomGradlePlugin.refreshDeps;
|
||||
|
||||
final File modStore = extension.getRemappedModCache();
|
||||
final File modStore = extension.getFiles().getRemappedModCache();
|
||||
final RemapData remapData = new RemapData(mappingsSuffix, modStore);
|
||||
|
||||
final LoomProjectData data = extension.getProjectData();
|
||||
|
||||
for (RemappedConfigurationEntry entry : Constants.MOD_COMPILE_ENTRIES) {
|
||||
data.getLazyConfigurationProvider(entry.getRemappedConfiguration()).configure(remappedConfig -> {
|
||||
extension.getLazyConfigurationProvider(entry.getRemappedConfiguration()).configure(remappedConfig -> {
|
||||
Configuration sourceConfig = project.getConfigurations().getByName(entry.sourceConfiguration());
|
||||
Configuration regularConfig = project.getConfigurations().getByName(entry.getTargetConfiguration(project.getConfigurations()));
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ public abstract class AnnotationProcessorInvoker<T extends Task> {
|
|||
|
||||
private void passMixinArguments(T task) {
|
||||
try {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
Map<String, String> args = new HashMap<>() {{
|
||||
put(Constants.MixinArguments.IN_MAP_FILE_NAMED_INTERMEDIARY, extension.getMappingsProvider().tinyMappings.getCanonicalPath());
|
||||
put(Constants.MixinArguments.OUT_MAP_FILE_NAMED_INTERMEDIARY, extension.getNextMixinMappings().getCanonicalPath());
|
||||
|
@ -87,7 +87,7 @@ public abstract class AnnotationProcessorInvoker<T extends Task> {
|
|||
|
||||
public void configureMixin() {
|
||||
ConfigurationContainer configs = project.getConfigurations();
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
if (!extension.ideSync()) {
|
||||
for (Configuration processorConfig : annotationProcessorConfigurations) {
|
||||
|
|
|
@ -71,7 +71,7 @@ public class KaptApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
|||
// target location for the refmap and then move it to the correct place for each sourceset
|
||||
task.doLast(t -> {
|
||||
try {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
Path src = Paths.get(getRefmapDestination(task, extension));
|
||||
Path dest = Paths.get(task.getDestinationDir().toString(), extension.getRefmapName());
|
||||
|
||||
|
|
|
@ -157,8 +157,8 @@ public final class NestedDependencyProvider implements NestedJarProvider {
|
|||
|
||||
//A lib that doesnt have a mod.json, we turn it into a fake mod
|
||||
if (!ZipUtil.containsEntry(file, "fabric.mod.json")) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
File tempDir = new File(extension.getUserCache(), "temp/modprocessing");
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
File tempDir = new File(extension.getFiles().getUserCache(), "temp/modprocessing");
|
||||
|
||||
if (!tempDir.exists()) {
|
||||
tempDir.mkdirs();
|
||||
|
|
|
@ -49,30 +49,31 @@ public final class CompileConfiguration {
|
|||
|
||||
public static void setupConfigurations(Project project) {
|
||||
final ConfigurationContainer configurations = project.getConfigurations();
|
||||
LoomProjectData data = project.getExtensions().getByType(LoomGradleExtension.class).getProjectData();
|
||||
|
||||
data.createLazyConfiguration(Constants.Configurations.MOD_COMPILE_CLASSPATH).configure(configuration -> configuration.setTransitive(true));
|
||||
data.createLazyConfiguration(Constants.Configurations.MOD_COMPILE_CLASSPATH_MAPPED).configure(configuration -> configuration.setTransitive(false));
|
||||
data.createLazyConfiguration(Constants.Configurations.MINECRAFT_NAMED).configure(configuration -> configuration.setTransitive(false)); // The launchers do not recurse dependencies
|
||||
data.createLazyConfiguration(Constants.Configurations.MINECRAFT_DEPENDENCIES).configure(configuration -> configuration.setTransitive(false));
|
||||
data.createLazyConfiguration(Constants.Configurations.LOADER_DEPENDENCIES).configure(configuration -> configuration.setTransitive(false));
|
||||
data.createLazyConfiguration(Constants.Configurations.MINECRAFT).configure(configuration -> configuration.setTransitive(false));
|
||||
data.createLazyConfiguration(Constants.Configurations.INCLUDE).configure(configuration -> configuration.setTransitive(false)); // Dont get transitive deps
|
||||
data.createLazyConfiguration(Constants.Configurations.MAPPING_CONSTANTS);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
extension.createLazyConfiguration(Constants.Configurations.MOD_COMPILE_CLASSPATH).configure(configuration -> configuration.setTransitive(true));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MOD_COMPILE_CLASSPATH_MAPPED).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_NAMED).configure(configuration -> configuration.setTransitive(false)); // The launchers do not recurse dependencies
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_DEPENDENCIES).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.LOADER_DEPENDENCIES).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.INCLUDE).configure(configuration -> configuration.setTransitive(false)); // Dont get transitive deps
|
||||
extension.createLazyConfiguration(Constants.Configurations.MAPPING_CONSTANTS);
|
||||
|
||||
extendsFrom(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Configurations.MAPPING_CONSTANTS, project);
|
||||
|
||||
data.createLazyConfiguration(Constants.Configurations.MAPPINGS);
|
||||
data.createLazyConfiguration(Constants.Configurations.MAPPINGS_FINAL);
|
||||
data.createLazyConfiguration(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES);
|
||||
data.createLazyConfiguration(Constants.Configurations.UNPICK_CLASSPATH);
|
||||
extension.createLazyConfiguration(Constants.Configurations.MAPPINGS);
|
||||
extension.createLazyConfiguration(Constants.Configurations.MAPPINGS_FINAL);
|
||||
extension.createLazyConfiguration(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES);
|
||||
extension.createLazyConfiguration(Constants.Configurations.UNPICK_CLASSPATH);
|
||||
|
||||
for (RemappedConfigurationEntry entry : Constants.MOD_COMPILE_ENTRIES) {
|
||||
data.createLazyConfiguration(entry.sourceConfiguration())
|
||||
extension.createLazyConfiguration(entry.sourceConfiguration())
|
||||
.configure(configuration -> configuration.setTransitive(true));
|
||||
|
||||
// Don't get transitive deps of already remapped mods
|
||||
data.createLazyConfiguration(entry.getRemappedConfiguration())
|
||||
extension.createLazyConfiguration(entry.getRemappedConfiguration())
|
||||
.configure(configuration -> configuration.setTransitive(false));
|
||||
|
||||
extendsFrom(entry.getTargetConfiguration(configurations), entry.getRemappedConfiguration(), project);
|
||||
|
@ -111,7 +112,7 @@ public final class CompileConfiguration {
|
|||
});
|
||||
|
||||
p.afterEvaluate(project -> {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
LoomDependencyManager dependencyManager = new LoomDependencyManager();
|
||||
extension.setDependencyManager(dependencyManager);
|
||||
|
@ -129,7 +130,7 @@ public final class CompileConfiguration {
|
|||
SetupIntelijRunConfigs.setup(project);
|
||||
|
||||
// Enables the default mod remapper
|
||||
if (extension.remapMod) {
|
||||
if (extension.isRemapMod()) {
|
||||
RemapConfiguration.setupDefaultRemap(project);
|
||||
} else {
|
||||
Jar jarTask = (Jar) project.getTasks().getByName("jar");
|
||||
|
|
|
@ -49,6 +49,7 @@ import org.zeroturnaround.zip.ZipUtil;
|
|||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
import net.fabricmc.loom.extension.LoomFiles;
|
||||
|
||||
public abstract class DependencyProvider {
|
||||
private LoomDependencyManager dependencyManager;
|
||||
|
@ -57,7 +58,7 @@ public abstract class DependencyProvider {
|
|||
|
||||
public DependencyProvider(Project project) {
|
||||
this.project = project;
|
||||
this.extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
this.extension = LoomGradleExtension.get(project);
|
||||
}
|
||||
|
||||
public abstract void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception;
|
||||
|
@ -88,6 +89,10 @@ public abstract class DependencyProvider {
|
|||
return extension;
|
||||
}
|
||||
|
||||
public LoomFiles getDirectories() {
|
||||
return getExtension().getFiles();
|
||||
}
|
||||
|
||||
public boolean isRefreshDeps() {
|
||||
return LoomGradlePlugin.refreshDeps;
|
||||
}
|
||||
|
|
|
@ -103,9 +103,9 @@ public class FabricApiExtension {
|
|||
}
|
||||
|
||||
private File getApiMavenPom(String fabricApiVersion) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
File mavenPom = new File(extension.getUserCache(), "fabric-api/" + fabricApiVersion + ".pom");
|
||||
File mavenPom = new File(extension.getFiles().getUserCache(), "fabric-api/" + fabricApiVersion + ".pom");
|
||||
|
||||
try {
|
||||
URL url = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api/%1$s/fabric-api-%1$s.pom", fabricApiVersion));
|
||||
|
|
|
@ -43,7 +43,7 @@ public final record JarManifestConfiguration(Project project) {
|
|||
return;
|
||||
}
|
||||
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
Attributes attributes = manifest.getMainAttributes();
|
||||
var tinyRemapperVersion = Optional.ofNullable(TinyRemapper.class.getPackage().getImplementationVersion());
|
||||
|
@ -79,7 +79,7 @@ public final record JarManifestConfiguration(Project project) {
|
|||
}
|
||||
|
||||
private Optional<String> getLoaderVersion() {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
if (extension.getInstallerData() == null) {
|
||||
project.getLogger().warn("Could not determine fabric loader version for jar manifest");
|
||||
|
|
|
@ -89,7 +89,7 @@ public class LoomDependencyManager {
|
|||
MappingsProviderImpl mappingsProvider = null;
|
||||
|
||||
project.getLogger().info(":setting up loom dependencies");
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
Map<String, ProviderList> providerListMap = new HashMap<>();
|
||||
List<ProviderList> targetProviders = new ArrayList<>();
|
||||
|
||||
|
@ -177,7 +177,7 @@ public class LoomDependencyManager {
|
|||
}
|
||||
|
||||
private static void handleInstallerJson(JsonObject jsonObject, Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
JsonObject libraries = jsonObject.get("libraries").getAsJsonObject();
|
||||
Configuration loaderDepsConfig = project.getConfigurations().getByName(Constants.Configurations.LOADER_DEPENDENCIES);
|
||||
|
|
|
@ -1,70 +0,0 @@
|
|||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2016-2021 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;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.gradle.api.NamedDomainObjectProvider;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
@ApiStatus.Internal
|
||||
/**
|
||||
* This class is stored in the gradle extension, and should not be used outside of loom.
|
||||
* It contains data/info related to the current project
|
||||
*/
|
||||
public final class LoomProjectData {
|
||||
private final Project project;
|
||||
private final Map<String, NamedDomainObjectProvider<Configuration>> lazyConfigurations = new HashMap<>();
|
||||
|
||||
public LoomProjectData(Project project) {
|
||||
this.project = Objects.requireNonNull(project);
|
||||
}
|
||||
|
||||
public NamedDomainObjectProvider<Configuration> createLazyConfiguration(String name) {
|
||||
NamedDomainObjectProvider<Configuration> provider = project.getConfigurations().register(name);
|
||||
|
||||
if (lazyConfigurations.containsKey(name)) {
|
||||
throw new IllegalStateException("Duplicate configuration name" + name);
|
||||
}
|
||||
|
||||
lazyConfigurations.put(name, provider);
|
||||
|
||||
return provider;
|
||||
}
|
||||
|
||||
public NamedDomainObjectProvider<Configuration> getLazyConfigurationProvider(String name) {
|
||||
NamedDomainObjectProvider<Configuration> provider = lazyConfigurations.get(name);
|
||||
|
||||
if (provider == null) {
|
||||
throw new NullPointerException("Could not find provider with name: " + name);
|
||||
}
|
||||
|
||||
return provider;
|
||||
}
|
||||
}
|
|
@ -63,7 +63,7 @@ public class RemapConfiguration {
|
|||
|
||||
// isDefaultRemap is set to true for the standard remap task, some defaults are left out when this is false.
|
||||
private static void setupRemap(Project project, boolean isDefaultRemap, String jarTaskName, String sourcesJarTaskName, String remapJarTaskName, String remapSourcesJarTaskName, String remapAllJarsTaskName, String remapAllSourcesTaskName) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
AbstractArchiveTask jarTask = (AbstractArchiveTask) project.getTasks().getByName(jarTaskName);
|
||||
RemapJarTask remapJarTask = (RemapJarTask) project.getTasks().findByName(remapJarTaskName);
|
||||
|
||||
|
|
|
@ -71,15 +71,15 @@ public class AccessWidenerJarProcessor implements JarProcessor {
|
|||
|
||||
@Override
|
||||
public void setup() {
|
||||
LoomGradleExtension loomGradleExtension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension loomGradleExtension = LoomGradleExtension.get(project);
|
||||
|
||||
if (!loomGradleExtension.accessWidener.exists()) {
|
||||
throw new RuntimeException("Could not find access widener file @ " + loomGradleExtension.accessWidener.getAbsolutePath());
|
||||
if (!loomGradleExtension.getAccessWidener().exists()) {
|
||||
throw new RuntimeException("Could not find access widener file @ " + loomGradleExtension.getAccessWidener().getAbsolutePath());
|
||||
}
|
||||
|
||||
inputHash = Checksum.sha256(loomGradleExtension.accessWidener);
|
||||
inputHash = Checksum.sha256(loomGradleExtension.getAccessWidener());
|
||||
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(loomGradleExtension.accessWidener))) {
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(loomGradleExtension.getAccessWidener()))) {
|
||||
accessWidenerReader.read(reader);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to read project access widener file");
|
||||
|
|
|
@ -27,12 +27,10 @@ package net.fabricmc.loom.configuration.ide;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
|
@ -44,7 +42,6 @@ import org.w3c.dom.Element;
|
|||
import org.w3c.dom.Node;
|
||||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.OperatingSystem;
|
||||
|
||||
public class RunConfig {
|
||||
|
@ -110,42 +107,8 @@ public class RunConfig {
|
|||
runConfig.vmArgs = "";
|
||||
runConfig.programArgs = "";
|
||||
|
||||
if ("launchwrapper".equals(extension.getLoaderLaunchMethod())) {
|
||||
runConfig.mainClass = "net.minecraft.launchwrapper.Launch"; // TODO What about custom tweakers for run configs?
|
||||
runConfig.programArgs += "--tweakClass " + ("client".equals(environment) ? Constants.LaunchWrapper.DEFAULT_FABRIC_CLIENT_TWEAKER : Constants.LaunchWrapper.DEFAULT_FABRIC_SERVER_TWEAKER);
|
||||
} else {
|
||||
runConfig.mainClass = "net.fabricmc.devlaunchinjector.Main";
|
||||
runConfig.vmArgs = "-XX:+ShowCodeDetailsInExceptionMessages -Dfabric.dli.config=" + encodeEscaped(extension.getDevLauncherConfig().getAbsolutePath()) + " -Dfabric.dli.env=" + environment.toLowerCase();
|
||||
}
|
||||
|
||||
if (extension.getLoaderLaunchMethod().equals("launchwrapper")) {
|
||||
// if installer.json found...
|
||||
JsonObject installerJson = extension.getInstallerData().installerJson();
|
||||
|
||||
if (installerJson != null) {
|
||||
List<String> sideKeys = ImmutableList.of(environment, "common");
|
||||
|
||||
// copy launchwrapper tweakers
|
||||
if (installerJson.has("launchwrapper")) {
|
||||
JsonObject launchwrapperJson = installerJson.getAsJsonObject("launchwrapper");
|
||||
|
||||
if (launchwrapperJson.has("tweakers")) {
|
||||
JsonObject tweakersJson = launchwrapperJson.getAsJsonObject("tweakers");
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
for (String s : sideKeys) {
|
||||
if (tweakersJson.has(s)) {
|
||||
for (JsonElement element : tweakersJson.getAsJsonArray(s)) {
|
||||
builder.append(" --tweakClass ").append(element.getAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
runConfig.programArgs += builder.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
runConfig.vmArgs = "-XX:+ShowCodeDetailsInExceptionMessages -Dfabric.dli.config=" + encodeEscaped(extension.getFiles().getDevLauncherConfig().getAbsolutePath()) + " -Dfabric.dli.env=" + environment.toLowerCase();
|
||||
}
|
||||
|
||||
// Turns camelCase/PascalCase into Capital Case
|
||||
|
@ -159,7 +122,7 @@ public class RunConfig {
|
|||
}
|
||||
|
||||
public static RunConfig runConfig(Project project, RunConfigSettings settings) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
String name = settings.getName();
|
||||
|
||||
String configName = settings.getConfigName();
|
||||
|
@ -264,11 +227,6 @@ public class RunConfig {
|
|||
return mainClassName;
|
||||
}
|
||||
|
||||
// Fallback to default class names, happens when in a loader dev env
|
||||
if ("launchwrapper".equals(extension.getLoaderLaunchMethod())) {
|
||||
return "net.minecraft.launchwrapper.Launch";
|
||||
}
|
||||
|
||||
return defaultMainClass;
|
||||
}
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ public final class RunConfigSettings implements Named {
|
|||
public RunConfigSettings(Project project, String baseName) {
|
||||
this.baseName = baseName;
|
||||
this.project = project;
|
||||
this.extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
this.extension = LoomGradleExtension.get(project);
|
||||
this.ideConfigGenerated = extension.isRootProject();
|
||||
|
||||
source("main");
|
||||
|
|
|
@ -37,7 +37,7 @@ import net.fabricmc.loom.configuration.providers.minecraft.assets.MinecraftAsset
|
|||
|
||||
public class SetupIntelijRunConfigs {
|
||||
public static void setup(Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
File projectDir = project.getRootProject().file(".idea");
|
||||
|
||||
|
@ -54,7 +54,7 @@ public class SetupIntelijRunConfigs {
|
|||
|
||||
private static void generate(Project project) throws IOException {
|
||||
Project rootProject = project.getRootProject();
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
if (extension.ideSync()) {
|
||||
//Ensures the assets are downloaded when idea is syncing a project
|
||||
|
|
|
@ -127,7 +127,7 @@ public class ModProcessor {
|
|||
}
|
||||
|
||||
private static void remapJars(Project project, List<ModDependencyInfo> processList) throws IOException {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
String fromM = "intermediary";
|
||||
String toM = "named";
|
||||
|
||||
|
@ -210,29 +210,16 @@ public class ModProcessor {
|
|||
|
||||
public static JsonObject readInstallerJson(File file, Project project) {
|
||||
try {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
String launchMethod = extension.getLoaderLaunchMethod();
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
String jsonStr;
|
||||
|
||||
try (JarFile jarFile = new JarFile(file)) {
|
||||
ZipEntry entry = null;
|
||||
|
||||
if (!launchMethod.isEmpty()) {
|
||||
entry = jarFile.getEntry("fabric-installer." + launchMethod + ".json");
|
||||
|
||||
if (entry == null) {
|
||||
project.getLogger().warn("Could not find loader launch method '" + launchMethod + "', falling back");
|
||||
}
|
||||
}
|
||||
|
||||
if (entry == null) {
|
||||
entry = jarFile.getEntry("fabric-installer.json");
|
||||
ZipEntry entry = jarFile.getEntry("fabric-installer.json");
|
||||
|
||||
if (entry == null) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
try (InputStream inputstream = jarFile.getInputStream(entry)) {
|
||||
jsonStr = new String(inputstream.readAllBytes(), StandardCharsets.UTF_8);
|
||||
|
|
|
@ -70,7 +70,7 @@ public class MinecraftProcessedProvider extends MinecraftMappedProvider {
|
|||
}
|
||||
|
||||
private void invalidateJars() {
|
||||
File dir = getJarDirectory(getExtension().getUserCache(), projectMappedClassifier);
|
||||
File dir = getJarDirectory(getExtension().getFiles().getUserCache(), projectMappedClassifier);
|
||||
|
||||
if (dir.exists()) {
|
||||
getProject().getLogger().warn("Invalidating project jars");
|
||||
|
@ -87,7 +87,7 @@ public class MinecraftProcessedProvider extends MinecraftMappedProvider {
|
|||
public void initFiles(MinecraftProviderImpl minecraftProvider, MappingsProviderImpl mappingsProvider) {
|
||||
super.initFiles(minecraftProvider, mappingsProvider);
|
||||
|
||||
projectMappedJar = new File(getJarDirectory(getExtension().getRootProjectPersistentCache(), projectMappedClassifier), "minecraft-" + getJarVersionString(projectMappedClassifier) + ".jar");
|
||||
projectMappedJar = new File(getJarDirectory(getExtension().getFiles().getRootProjectPersistentCache(), projectMappedClassifier), "minecraft-" + getJarVersionString(projectMappedClassifier) + ".jar");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -58,13 +58,13 @@ public class LaunchProvider extends DependencyProvider {
|
|||
.property("fabric.remapClasspathFile", getRemapClasspathFile().getAbsolutePath())
|
||||
.property("log4j.configurationFile", getAllLog4JConfigFiles())
|
||||
|
||||
.property("client", "java.library.path", getExtension().getNativesDirectory().getAbsolutePath())
|
||||
.property("client", "org.lwjgl.librarypath", getExtension().getNativesDirectory().getAbsolutePath())
|
||||
.property("client", "java.library.path", getDirectories().getNativesDirectory(getExtension().getMinecraftProvider()).getAbsolutePath())
|
||||
.property("client", "org.lwjgl.librarypath", getDirectories().getNativesDirectory(getExtension().getMinecraftProvider()).getAbsolutePath())
|
||||
|
||||
.argument("client", "--assetIndex")
|
||||
.argument("client", getExtension().getMinecraftProvider().getVersionInfo().assetIndex().fabricId(getExtension().getMinecraftProvider().minecraftVersion()))
|
||||
.argument("client", "--assetsDir")
|
||||
.argument("client", new File(getExtension().getUserCache(), "assets").getAbsolutePath());
|
||||
.argument("client", new File(getDirectories().getUserCache(), "assets").getAbsolutePath());
|
||||
|
||||
//Enable ansi by default for idea and vscode
|
||||
if (new File(getProject().getRootDir(), ".vscode").exists()
|
||||
|
@ -74,7 +74,7 @@ public class LaunchProvider extends DependencyProvider {
|
|||
}
|
||||
|
||||
writeLog4jConfig();
|
||||
FileUtils.writeStringToFile(getExtension().getDevLauncherConfig(), launchConfig.asString(), StandardCharsets.UTF_8);
|
||||
FileUtils.writeStringToFile(getDirectories().getDevLauncherConfig(), launchConfig.asString(), StandardCharsets.UTF_8);
|
||||
|
||||
addDependency(Constants.Dependencies.DEV_LAUNCH_INJECTOR + Constants.Dependencies.Versions.DEV_LAUNCH_INJECTOR, Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES);
|
||||
addDependency(Constants.Dependencies.TERMINAL_CONSOLE_APPENDER + Constants.Dependencies.Versions.TERMINAL_CONSOLE_APPENDER, Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES);
|
||||
|
@ -84,7 +84,7 @@ public class LaunchProvider extends DependencyProvider {
|
|||
}
|
||||
|
||||
private File getLog4jConfigFile() {
|
||||
return getExtension().getDefaultLog4jConfigFile();
|
||||
return getDirectories().getDefaultLog4jConfigFile();
|
||||
}
|
||||
|
||||
private String getAllLog4JConfigFiles() {
|
||||
|
@ -94,7 +94,7 @@ public class LaunchProvider extends DependencyProvider {
|
|||
}
|
||||
|
||||
private File getRemapClasspathFile() {
|
||||
return new File(getExtension().getDevLauncherConfig().getParentFile(), "remapClasspath.txt");
|
||||
return new File(getDirectories().getDevLauncherConfig().getParentFile(), "remapClasspath.txt");
|
||||
}
|
||||
|
||||
private void writeLog4jConfig() {
|
||||
|
|
|
@ -111,11 +111,11 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra
|
|||
}
|
||||
|
||||
private void initFiles() {
|
||||
minecraftJson = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-info.json");
|
||||
minecraftClientJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-client.jar");
|
||||
minecraftServerJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-server.jar");
|
||||
minecraftMergedJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-merged.jar");
|
||||
versionManifestJson = new File(getExtension().getUserCache(), "version_manifest.json");
|
||||
minecraftJson = new File(getDirectories().getUserCache(), "minecraft-" + minecraftVersion + "-info.json");
|
||||
minecraftClientJar = new File(getDirectories().getUserCache(), "minecraft-" + minecraftVersion + "-client.jar");
|
||||
minecraftServerJar = new File(getDirectories().getUserCache(), "minecraft-" + minecraftVersion + "-server.jar");
|
||||
minecraftMergedJar = new File(getDirectories().getUserCache(), "minecraft-" + minecraftVersion + "-merged.jar");
|
||||
versionManifestJson = new File(getDirectories().getUserCache(), "version_manifest.json");
|
||||
}
|
||||
|
||||
private void downloadMcJson(boolean offline) throws IOException {
|
||||
|
@ -143,10 +143,10 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra
|
|||
|
||||
Optional<ManifestVersion.Versions> optionalVersion = Optional.empty();
|
||||
|
||||
if (getExtension().customManifest != null) {
|
||||
if (getExtension().getCustomManifest() != null) {
|
||||
ManifestVersion.Versions customVersion = new ManifestVersion.Versions();
|
||||
customVersion.id = minecraftVersion;
|
||||
customVersion.url = getExtension().customManifest;
|
||||
customVersion.url = getExtension().getCustomManifest();
|
||||
optionalVersion = Optional.of(customVersion);
|
||||
getProject().getLogger().lifecycle("Using custom minecraft manifest");
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra
|
|||
}
|
||||
|
||||
private boolean hasRecentValidManifest() throws IOException {
|
||||
if (getExtension().customManifest != null) {
|
||||
if (getExtension().getCustomManifest() != null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ public class GradleMappingContext implements MappingContext {
|
|||
|
||||
public GradleMappingContext(Project project, String workingDirName) {
|
||||
this.project = project;
|
||||
this.extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
this.extension = LoomGradleExtension.get(project);
|
||||
this.workingDirName = workingDirName;
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
|
|||
|
||||
public MappingsProviderImpl(Project project) {
|
||||
super(project);
|
||||
mappingsDir = getExtension().getUserCache().toPath().resolve("mappings");
|
||||
mappingsDir = getDirectories().getUserCache().toPath().resolve("mappings");
|
||||
mappingsStepsDir = mappingsDir.resolve("steps");
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,7 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
|
|||
|
||||
tinyMappings = mappingsDir.resolve(StringUtils.removeSuffix(mappingsJar.getName(), ".jar") + ".tiny").toFile();
|
||||
unpickDefinitionsFile = mappingsDir.resolve(StringUtils.removeSuffix(mappingsJar.getName(), ".jar") + ".unpick").toFile();
|
||||
tinyMappingsJar = new File(getExtension().getUserCache(), mappingsJar.getName().replace(".jar", "-" + jarClassifier + ".jar"));
|
||||
tinyMappingsJar = new File(getDirectories().getUserCache(), mappingsJar.getName().replace(".jar", "-" + jarClassifier + ".jar"));
|
||||
|
||||
if (!tinyMappings.exists() || isRefreshDeps()) {
|
||||
storeMappings(getProject(), minecraftProvider, mappingsJar.toPath());
|
||||
|
@ -177,7 +177,7 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
|
|||
|
||||
LoomGradleExtension extension = getExtension();
|
||||
|
||||
if (extension.accessWidener != null) {
|
||||
if (extension.getAccessWidener() != null) {
|
||||
extension.addJarProcessor(new AccessWidenerJarProcessor(getProject()));
|
||||
}
|
||||
|
||||
|
@ -386,7 +386,7 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
|
|||
|
||||
// Download and extract intermediary
|
||||
String encodedMinecraftVersion = UrlEscapers.urlFragmentEscaper().escape(minecraftVersion);
|
||||
String intermediaryArtifactUrl = getExtension().getIntermediaryUrl().apply(encodedMinecraftVersion);
|
||||
String intermediaryArtifactUrl = getExtension().getIntermediaryUrl(encodedMinecraftVersion);
|
||||
Path intermediaryJar = mappingsDir.resolve("v2-intermediary-" + minecraftVersion + ".jar");
|
||||
DownloadUtil.downloadIfChanged(new URL(intermediaryArtifactUrl), intermediaryJar.toFile(), getProject().getLogger());
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public class MinecraftLibraryProvider {
|
|||
}
|
||||
|
||||
private void initFiles(Project project, MinecraftProviderImpl minecraftProvider) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
MINECRAFT_LIBS = new File(extension.getUserCache(), "libraries");
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
MINECRAFT_LIBS = new File(extension.getFiles().getUserCache(), "libraries");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -150,8 +150,8 @@ public class MinecraftMappedProvider extends DependencyProvider {
|
|||
|
||||
public void initFiles(MinecraftProviderImpl minecraftProvider, MappingsProviderImpl mappingsProvider) {
|
||||
this.minecraftProvider = minecraftProvider;
|
||||
minecraftIntermediaryJar = new File(getExtension().getUserCache(), "minecraft-" + getJarVersionString("intermediary") + ".jar");
|
||||
minecraftMappedJar = new File(getJarDirectory(getExtension().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("mapped") + ".jar");
|
||||
minecraftIntermediaryJar = new File(getDirectories().getUserCache(), "minecraft-" + getJarVersionString("intermediary") + ".jar");
|
||||
minecraftMappedJar = new File(getJarDirectory(getDirectories().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("mapped") + ".jar");
|
||||
}
|
||||
|
||||
protected File getJarDirectory(File parentDirectory, String type) {
|
||||
|
@ -171,7 +171,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
|
|||
}
|
||||
|
||||
public File getUnpickedJar() {
|
||||
return new File(getJarDirectory(getExtension().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("unpicked") + ".jar");
|
||||
return new File(getJarDirectory(getDirectories().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("unpicked") + ".jar");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -49,10 +49,10 @@ public class MinecraftNativesProvider {
|
|||
|
||||
public MinecraftNativesProvider(Project project) {
|
||||
this.project = project;
|
||||
extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
extension = LoomGradleExtension.get(project);
|
||||
|
||||
nativesDir = extension.getNativesDirectory();
|
||||
jarStore = extension.getNativesJarStore();
|
||||
nativesDir = extension.getFiles().getNativesDirectory(extension.getMinecraftProvider());
|
||||
jarStore = extension.getFiles().getNativesJarStore();
|
||||
}
|
||||
|
||||
public static void provide(Project project) throws IOException {
|
||||
|
@ -60,7 +60,7 @@ public class MinecraftNativesProvider {
|
|||
}
|
||||
|
||||
private void provide() throws IOException {
|
||||
if (extension.hasCustomNatives()) {
|
||||
if (extension.getFiles().hasCustomNatives()) {
|
||||
if (!nativesDir.exists()) {
|
||||
throw new RuntimeException("Could no find custom natives directory at " + nativesDir.getAbsolutePath());
|
||||
}
|
||||
|
|
|
@ -49,14 +49,14 @@ import net.fabricmc.loom.util.gradle.ProgressLogger;
|
|||
|
||||
public class MinecraftAssetsProvider {
|
||||
public static void provide(MinecraftProviderImpl minecraftProvider, Project project) throws IOException {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
boolean offline = project.getGradle().getStartParameter().isOffline();
|
||||
|
||||
MinecraftVersionMeta versionInfo = minecraftProvider.getVersionInfo();
|
||||
MinecraftVersionMeta.AssetIndex assetIndex = versionInfo.assetIndex();
|
||||
|
||||
// get existing cache files
|
||||
File assets = new File(extension.getUserCache(), "assets");
|
||||
File assets = new File(extension.getFiles().getUserCache(), "assets");
|
||||
|
||||
if (!assets.exists()) {
|
||||
assets.mkdirs();
|
||||
|
|
|
@ -35,7 +35,7 @@ public final class DecompilerConfiguration {
|
|||
}
|
||||
|
||||
public static void setup(Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
extension.addDecompiler(new FabricFernFlowerDecompiler(project));
|
||||
extension.addDecompiler(new FabricCFRDecompiler(project));
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 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.extension;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import net.fabricmc.loom.configuration.providers.MinecraftProvider;
|
||||
|
||||
public interface LoomFiles {
|
||||
File getUserCache();
|
||||
File getRootProjectPersistentCache();
|
||||
File getProjectPersistentCache();
|
||||
File getProjectBuildCache();
|
||||
File getRemappedModCache();
|
||||
File getNativesJarStore();
|
||||
boolean hasCustomNatives();
|
||||
File getNativesDirectory(MinecraftProvider minecraftProvider);
|
||||
File getDefaultLog4jConfigFile();
|
||||
File getDevLauncherConfig();
|
||||
File getUnpickLoggingConfigFile();
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 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.extension;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.gradle.api.Project;
|
||||
|
||||
import net.fabricmc.loom.configuration.providers.MinecraftProvider;
|
||||
|
||||
public final class LoomFilesImpl implements LoomFiles {
|
||||
private final Project project;
|
||||
|
||||
private final File userCache;
|
||||
private final File rootProjectPersistentCache;
|
||||
private final File projectPersistentCache;
|
||||
private final File projectBuildCache;
|
||||
private final File remappedModCache;
|
||||
private final File nativesJarStore;
|
||||
|
||||
public LoomFilesImpl(Project project) {
|
||||
this.project = project;
|
||||
|
||||
this.userCache = createFile(project.getGradle().getGradleUserHomeDir(), "caches" + File.separator + "fabric-loom");
|
||||
this.rootProjectPersistentCache = createFile(project.getRootProject().file(".gradle"), "loom-cache");
|
||||
this.projectPersistentCache = createFile(project.file(".gradle"), "loom-cache");
|
||||
this.projectBuildCache = createFile(project.getBuildDir(), "loom-cache");
|
||||
this.remappedModCache = createFile(getRootProjectPersistentCache(), "remapped_mods");
|
||||
this.nativesJarStore = createFile(getUserCache(), "natives/jars");
|
||||
}
|
||||
|
||||
private File createFile(File parent, String child) {
|
||||
File file = new File(parent, child);
|
||||
|
||||
if (!file.exists()) {
|
||||
file.mkdirs();
|
||||
}
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getUserCache() {
|
||||
return userCache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getRootProjectPersistentCache() {
|
||||
return rootProjectPersistentCache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getProjectPersistentCache() {
|
||||
return projectPersistentCache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getProjectBuildCache() {
|
||||
return projectBuildCache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getRemappedModCache() {
|
||||
return remappedModCache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getNativesJarStore() {
|
||||
return nativesJarStore;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomNatives() {
|
||||
return project.getProperties().get("fabric.loom.natives.dir") != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getNativesDirectory(MinecraftProvider minecraftProvider) {
|
||||
if (hasCustomNatives()) {
|
||||
return new File((String) project.property("fabric.loom.natives.dir"));
|
||||
}
|
||||
|
||||
File natives = new File(getUserCache(), "natives/" + minecraftProvider.minecraftVersion());
|
||||
|
||||
if (!natives.exists()) {
|
||||
natives.mkdirs();
|
||||
}
|
||||
|
||||
return natives;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getDefaultLog4jConfigFile() {
|
||||
return new File(getProjectPersistentCache(), "log4j.xml");
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getDevLauncherConfig() {
|
||||
return new File(getProjectPersistentCache(), "launch.cfg");
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getUnpickLoggingConfigFile() {
|
||||
return new File(getProjectPersistentCache(), "unpick-logging.properties");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,182 @@
|
|||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 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.extension;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Dependency;
|
||||
import org.gradle.api.file.ConfigurableFileCollection;
|
||||
import org.gradle.api.plugins.BasePluginConvention;
|
||||
|
||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
||||
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.GradleMappingContext;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpec;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuilder;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsDependency;
|
||||
|
||||
/**
|
||||
* This class implements the public extension api.
|
||||
*/
|
||||
public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionAPI {
|
||||
protected final List<LoomDecompiler> decompilers = new ArrayList<>();
|
||||
protected final List<JarProcessor> jarProcessors = new ArrayList<>();
|
||||
protected final ConfigurableFileCollection log4jConfigs;
|
||||
|
||||
protected File accessWidener = null;
|
||||
protected boolean shareCaches = false;
|
||||
protected String refmapName = null;
|
||||
protected boolean remapMod = true;
|
||||
|
||||
private NamedDomainObjectContainer<RunConfigSettings> runConfigs;
|
||||
|
||||
protected LoomGradleExtensionApiImpl(Project project, LoomFiles directories) {
|
||||
this.runConfigs = project.container(RunConfigSettings.class,
|
||||
baseName -> new RunConfigSettings(project, baseName));
|
||||
this.log4jConfigs = project.files(directories.getDefaultLog4jConfigFile());
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getAccessWidener() {
|
||||
return accessWidener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccessWidener(Object file) {
|
||||
Objects.requireNonNull(file, "Access widener file cannot be null");
|
||||
this.accessWidener = getProject().file(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShareCaches(boolean shareCaches) {
|
||||
this.shareCaches = shareCaches;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isShareCaches() {
|
||||
return shareCaches;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LoomDecompiler> getDecompilers() {
|
||||
return decompilers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDecompiler(LoomDecompiler decompiler) {
|
||||
Objects.requireNonNull(decompiler, "Decompiler cannot be null");
|
||||
decompilers.add(decompiler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JarProcessor> getJarProcessors() {
|
||||
return jarProcessors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addJarProcessor(JarProcessor processor) {
|
||||
Objects.requireNonNull(processor, "Jar processor cannot be null");
|
||||
jarProcessors.add(processor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dependency layered(Action<LayeredMappingSpecBuilder> action) {
|
||||
LayeredMappingSpecBuilder builder = new LayeredMappingSpecBuilder();
|
||||
action.execute(builder);
|
||||
LayeredMappingSpec builtSpec = builder.build();
|
||||
return new LayeredMappingsDependency(new GradleMappingContext(getProject(), "layers_" + builtSpec.getVersion().replace("+", "_").replace(".", "_")), builtSpec, builtSpec.getVersion());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRefmapName() {
|
||||
if (refmapName == null || refmapName.isEmpty()) {
|
||||
String defaultRefmapName = getProject().getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
|
||||
getProject().getLogger().info("Could not find refmap definition, will be using default name: " + defaultRefmapName);
|
||||
refmapName = defaultRefmapName;
|
||||
}
|
||||
|
||||
return refmapName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRefmapName(String refmapName) {
|
||||
this.refmapName = refmapName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRemapMod(boolean remapMod) {
|
||||
this.remapMod = remapMod;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runs(Action<NamedDomainObjectContainer<RunConfigSettings>> action) {
|
||||
action.execute(runConfigs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamedDomainObjectContainer<RunConfigSettings> getRunConfigs() {
|
||||
return runConfigs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigurableFileCollection getLog4jConfigs() {
|
||||
return log4jConfigs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRemapMod() {
|
||||
return remapMod;
|
||||
}
|
||||
|
||||
protected abstract Project getProject();
|
||||
|
||||
protected abstract LoomFiles getFiles();
|
||||
|
||||
// This is here to ensure that LoomGradleExtensionApiImpl compiles without any unimplemented methods
|
||||
private final class EnsureCompile extends LoomGradleExtensionApiImpl {
|
||||
private EnsureCompile() {
|
||||
super(null, null);
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Project getProject() {
|
||||
throw new RuntimeException("Yeah... something is really wrong");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LoomFiles getFiles() {
|
||||
throw new RuntimeException("Yeah... something is really wrong");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 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.extension;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.cadixdev.lorenz.MappingSet;
|
||||
import org.cadixdev.mercury.Mercury;
|
||||
import org.gradle.api.NamedDomainObjectProvider;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.gradle.api.file.ConfigurableFileCollection;
|
||||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.InstallerData;
|
||||
import net.fabricmc.loom.configuration.LoomDependencyManager;
|
||||
import net.fabricmc.loom.configuration.processors.JarProcessorManager;
|
||||
|
||||
public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implements LoomGradleExtension {
|
||||
private final Project project;
|
||||
private final LoomFiles loomFiles;
|
||||
private final ConfigurableFileCollection unmappedMods;
|
||||
|
||||
private final Set<File> mixinMappings = Collections.synchronizedSet(new HashSet<>());
|
||||
private final MappingSet[] srcMappingCache = new MappingSet[2];
|
||||
private final Mercury[] srcMercuryCache = new Mercury[2];
|
||||
private final Map<String, NamedDomainObjectProvider<Configuration>> lazyConfigurations = new HashMap<>();
|
||||
|
||||
private LoomDependencyManager dependencyManager;
|
||||
private JarProcessorManager jarProcessorManager;
|
||||
private InstallerData installerData;
|
||||
|
||||
public LoomGradleExtensionImpl(Project project, LoomFiles files) {
|
||||
super(project, files);
|
||||
this.project = project;
|
||||
this.loomFiles = files;
|
||||
this.unmappedMods = project.files();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Project getProject() {
|
||||
return project;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoomFiles getFiles() {
|
||||
return loomFiles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized File getNextMixinMappings() {
|
||||
File mixinMapping = new File(getFiles().getProjectBuildCache(), "mixin-map-" + getMinecraftProvider().minecraftVersion() + "-" + getMappingsProvider().mappingsVersion + "." + mixinMappings.size() + ".tiny");
|
||||
mixinMappings.add(mixinMapping);
|
||||
return mixinMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<File> getAllMixinMappings() {
|
||||
return mixinMappings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDependencyManager(LoomDependencyManager dependencyManager) {
|
||||
this.dependencyManager = dependencyManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoomDependencyManager getDependencyManager() {
|
||||
return Objects.requireNonNull(dependencyManager, "Cannot get LoomDependencyManager before it has been setup");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setJarProcessorManager(JarProcessorManager jarProcessorManager) {
|
||||
this.jarProcessorManager = jarProcessorManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JarProcessorManager getJarProcessorManager() {
|
||||
return Objects.requireNonNull(jarProcessorManager, "Cannot get JarProcessorManager before it has been setup");
|
||||
}
|
||||
|
||||
@Override
|
||||
public MappingSet getOrCreateSrcMappingCache(int id, Supplier<MappingSet> factory) {
|
||||
return srcMappingCache[id] != null ? srcMappingCache[id] : (srcMappingCache[id] = factory.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mercury getOrCreateSrcMercuryCache(int id, Supplier<Mercury> factory) {
|
||||
return srcMercuryCache[id] != null ? srcMercuryCache[id] : (srcMercuryCache[id] = factory.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigurableFileCollection getUnmappedModCollection() {
|
||||
return unmappedMods;
|
||||
}
|
||||
|
||||
public void setInstallerData(InstallerData object) {
|
||||
this.installerData = object;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InstallerData getInstallerData() {
|
||||
return installerData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRootProject() {
|
||||
return project.getRootProject() == project;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamedDomainObjectProvider<Configuration> createLazyConfiguration(String name) {
|
||||
NamedDomainObjectProvider<Configuration> provider = project.getConfigurations().register(name);
|
||||
|
||||
if (lazyConfigurations.containsKey(name)) {
|
||||
throw new IllegalStateException("Duplicate configuration name" + name);
|
||||
}
|
||||
|
||||
lazyConfigurations.put(name, provider);
|
||||
|
||||
return provider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamedDomainObjectProvider<Configuration> getLazyConfigurationProvider(String name) {
|
||||
NamedDomainObjectProvider<Configuration> provider = lazyConfigurations.get(name);
|
||||
|
||||
if (provider == null) {
|
||||
throw new NullPointerException("Could not find provider with name: " + name);
|
||||
}
|
||||
|
||||
return provider;
|
||||
}
|
||||
}
|
|
@ -36,6 +36,6 @@ public abstract class AbstractLoomTask extends DefaultTask {
|
|||
|
||||
@Internal
|
||||
protected LoomGradleExtension getExtension() {
|
||||
return getProject().getExtensions().getByType(LoomGradleExtension.class);
|
||||
return LoomGradleExtension.get(getProject());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -101,7 +101,7 @@ public class GenerateSourcesTask extends AbstractLoomTask {
|
|||
}
|
||||
|
||||
private File getMappedJarFileWithSuffix(String suffix) {
|
||||
LoomGradleExtension extension = getProject().getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(getProject());
|
||||
MappingsProviderImpl mappingsProvider = extension.getMappingsProvider();
|
||||
File mappedJar = mappingsProvider.mappedProvider.getMappedJar();
|
||||
String path = mappedJar.getAbsolutePath();
|
||||
|
|
|
@ -87,7 +87,7 @@ public final class LoomTasks {
|
|||
}
|
||||
|
||||
private static void registerRunTasks(TaskContainer tasks, Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
Preconditions.checkArgument(extension.getRunConfigs().size() == 0, "Run configurations must not be registered before loom");
|
||||
|
||||
|
@ -110,7 +110,7 @@ public final class LoomTasks {
|
|||
}
|
||||
|
||||
private static void registerDecompileTasks(TaskContainer tasks, Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
project.afterEvaluate(p -> {
|
||||
MappingsProviderImpl mappingsProvider = extension.getMappingsProvider();
|
||||
|
|
|
@ -120,7 +120,7 @@ public class MigrateMappingsTask extends AbstractLoomTask {
|
|||
|
||||
try {
|
||||
if (mappings.startsWith("net.minecraft:mappings:") || mappings.startsWith("net.mojang.minecraft:mappings:")) {
|
||||
if (!mappings.endsWith(":" + project.getExtensions().getByType(LoomGradleExtension.class).getMinecraftProvider().minecraftVersion())) {
|
||||
if (!mappings.endsWith(":" + LoomGradleExtension.get(project).getMinecraftProvider().minecraftVersion())) {
|
||||
throw new UnsupportedOperationException("Migrating Mojang mappings is currently only supported for the specified minecraft version");
|
||||
}
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ public class RemapJarTask extends Jar {
|
|||
jarRemapper = new JarRemapper();
|
||||
}
|
||||
|
||||
scheduleRemap(singleRemap || getProject().getExtensions().getByType(LoomGradleExtension.class).isRootProject());
|
||||
scheduleRemap(singleRemap || LoomGradleExtension.get(getProject()).isRootProject());
|
||||
|
||||
if (singleRemap) {
|
||||
jarRemapper.remap();
|
||||
|
@ -114,7 +114,7 @@ public class RemapJarTask extends Jar {
|
|||
|
||||
public void scheduleRemap(boolean isMainRemapTask) throws Throwable {
|
||||
Project project = getProject();
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(getProject());
|
||||
Path input = this.getInput().getAsFile().get().toPath();
|
||||
Path output = this.getArchivePath().toPath();
|
||||
|
||||
|
@ -147,7 +147,7 @@ public class RemapJarTask extends Jar {
|
|||
|
||||
jarRemapper.scheduleRemap(input, output)
|
||||
.supplyAccessWidener((remapData, remapper) -> {
|
||||
if (getRemapAccessWidener().getOrElse(false) && extension.accessWidener != null) {
|
||||
if (getRemapAccessWidener().getOrElse(false) && extension.getAccessWidener() != null) {
|
||||
AccessWidenerJarProcessor accessWidenerJarProcessor = extension.getJarProcessorManager().getByType(AccessWidenerJarProcessor.class);
|
||||
byte[] data;
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ import net.fabricmc.loom.configuration.ide.RunConfig;
|
|||
public class RunClientTask extends AbstractRunTask {
|
||||
public RunClientTask() {
|
||||
super(project -> {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
return RunConfig.runConfig(project, extension.getRunConfigs().getByName("client"));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ import net.fabricmc.loom.configuration.ide.RunConfig;
|
|||
public class RunServerTask extends AbstractRunTask {
|
||||
public RunServerTask() {
|
||||
super(project -> {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
return RunConfig.runConfig(project, extension.getRunConfigs().getByName("client"));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.gradle.api.tasks.OutputFile;
|
|||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.providers.LaunchProvider;
|
||||
import net.fabricmc.loom.extension.LoomFiles;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
|
||||
public class UnpickJarTask extends JavaExec {
|
||||
|
@ -60,15 +61,15 @@ public class UnpickJarTask extends JavaExec {
|
|||
fileArg(getMinecraftDependencies());
|
||||
|
||||
writeUnpickLogConfig();
|
||||
systemProperty("java.util.logging.config.file", getExtension().getUnpickLoggingConfigFile().getAbsolutePath());
|
||||
systemProperty("java.util.logging.config.file", getDirectories().getUnpickLoggingConfigFile().getAbsolutePath());
|
||||
|
||||
super.exec();
|
||||
}
|
||||
|
||||
private void writeUnpickLogConfig() {
|
||||
try (InputStream is = LaunchProvider.class.getClassLoader().getResourceAsStream("unpick-logging.properties")) {
|
||||
Files.deleteIfExists(getExtension().getUnpickLoggingConfigFile().toPath());
|
||||
Files.copy(is, getExtension().getUnpickLoggingConfigFile().toPath());
|
||||
Files.deleteIfExists(getDirectories().getUnpickLoggingConfigFile().toPath());
|
||||
Files.copy(is, getDirectories().getUnpickLoggingConfigFile().toPath());
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to copy unpick logging config", e);
|
||||
}
|
||||
|
@ -121,6 +122,10 @@ public class UnpickJarTask extends JavaExec {
|
|||
|
||||
@Internal
|
||||
protected LoomGradleExtension getExtension() {
|
||||
return getProject().getExtensions().getByType(LoomGradleExtension.class);
|
||||
return LoomGradleExtension.get(getProject());
|
||||
}
|
||||
|
||||
private LoomFiles getDirectories() {
|
||||
return getExtension().getFiles();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,14 +109,6 @@ public class Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static final class LaunchWrapper {
|
||||
public static final String DEFAULT_FABRIC_CLIENT_TWEAKER = "net.fabricmc.loader.launch.FabricClientTweaker";
|
||||
public static final String DEFAULT_FABRIC_SERVER_TWEAKER = "net.fabricmc.loader.launch.FabricServerTweaker";
|
||||
|
||||
private LaunchWrapper() {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class Knot {
|
||||
public static final String KNOT_CLIENT = "net.fabricmc.loader.launch.knot.KnotClient";
|
||||
public static final String KNOT_SERVER = "net.fabricmc.loader.launch.knot.KnotServer";
|
||||
|
|
|
@ -159,7 +159,7 @@ public class SourceRemapper {
|
|||
return this.mercury;
|
||||
}
|
||||
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
MappingsProviderImpl mappingsProvider = extension.getMappingsProvider();
|
||||
|
||||
MappingSet mappings = extension.getOrCreateSrcMappingCache(toNamed ? 1 : 0, () -> {
|
||||
|
|
Loading…
Reference in New Issue