From 8f40c6cb4770e32cf86efceb1668b7cab8b4ad14 Mon Sep 17 00:00:00 2001 From: modmuss Date: Wed, 5 Nov 2025 13:01:52 +0000 Subject: [PATCH] Create fabric-loom-no-remap plugin (#1417) * Create fabric-loom-no-remap plugin * Better * Don't need the property * Rename --- build.gradle | 4 ++ .../loom/LoomNoRemapGradlePlugin.java | 44 +++++++++++++++++++ .../extension/LoomGradleExtensionImpl.java | 10 ++++- .../test/integration/NotObfuscatedTest.groovy | 3 +- .../projects/minimalBaseNoRemap/build.gradle | 13 ++++++ 5 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 src/main/java/net/fabricmc/loom/LoomNoRemapGradlePlugin.java create mode 100644 src/test/resources/projects/minimalBaseNoRemap/build.gradle diff --git a/build.gradle b/build.gradle index 9059724a..d1053002 100644 --- a/build.gradle +++ b/build.gradle @@ -242,6 +242,10 @@ gradlePlugin { id = 'net.fabricmc.fabric-loom-companion' implementationClass = 'net.fabricmc.loom.LoomCompanionGradlePlugin' } + fabricLoomNoRemap { + id = 'net.fabricmc.fabric-loom-no-remap-experimental' + implementationClass = 'net.fabricmc.loom.LoomNoRemapGradlePlugin' + } } } diff --git a/src/main/java/net/fabricmc/loom/LoomNoRemapGradlePlugin.java b/src/main/java/net/fabricmc/loom/LoomNoRemapGradlePlugin.java new file mode 100644 index 00000000..b394083f --- /dev/null +++ b/src/main/java/net/fabricmc/loom/LoomNoRemapGradlePlugin.java @@ -0,0 +1,44 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2025 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; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; + +/** + * A marker plugin to indicate to the main loom plugin not to setup for remapping. + */ +public class LoomNoRemapGradlePlugin implements Plugin { + public static final String NAME = "net.fabricmc.fabric-loom-no-remap-experimental"; + + @Override + public void apply(Project target) { + if (target.getPluginManager().hasPlugin(LoomGradlePlugin.NAME)) { + throw new IllegalStateException(NAME + " must be applied before " + LoomGradlePlugin.NAME); + } + + target.getPlugins().apply(LoomGradlePlugin.NAME); + } +} diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java index 951f738a..4c332e44 100644 --- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java @@ -42,6 +42,7 @@ import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.LoomNoRemapGradlePlugin; import net.fabricmc.loom.api.mappings.intermediate.IntermediateMappingsProvider; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.configuration.InstallerData; @@ -116,8 +117,13 @@ public abstract class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl disableObfuscation = project.getObjects().property(Boolean.class); dontRemap = project.getObjects().property(Boolean.class); - disableObfuscation.set(project.provider(() -> GradleUtils.getBooleanProperty(getProject(), Constants.Properties.DISABLE_OBFUSCATION))); - disableObfuscation.finalizeValueOnRead(); + if (project.getPluginManager().hasPlugin(LoomNoRemapGradlePlugin.NAME)) { + disableObfuscation.set(true); + disableObfuscation.finalizeValue(); + } else { + disableObfuscation.set(project.provider(() -> GradleUtils.getBooleanProperty(getProject(), Constants.Properties.DISABLE_OBFUSCATION))); + disableObfuscation.finalizeValueOnRead(); + } dontRemap.set(disableObfuscation.map(notObfuscated -> notObfuscated || GradleUtils.getBooleanProperty(getProject(), Constants.Properties.DONT_REMAP))); dontRemap.finalizeValueOnRead(); diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/NotObfuscatedTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/NotObfuscatedTest.groovy index 51b2df48..d28ddc1e 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/NotObfuscatedTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/NotObfuscatedTest.groovy @@ -36,14 +36,13 @@ class NotObfuscatedTest extends Specification implements GradleProjectTestTrait @Unroll def "Not Obfuscated"() { setup: - def gradle = gradleProject(project: "minimalBase", version: PRE_RELEASE_GRADLE) + def gradle = gradleProject(project: "minimalBaseNoRemap", version: PRE_RELEASE_GRADLE) gradle.buildGradle << ''' dependencies { minecraft 'com.mojang:minecraft:1.21.10' api "net.fabricmc.fabric-api:fabric-api:0.134.1+1.21.10" } ''' - gradle.getGradleProperties() << "fabric.loom.disableObfuscation=true" when: def result = gradle.run(task: "build") diff --git a/src/test/resources/projects/minimalBaseNoRemap/build.gradle b/src/test/resources/projects/minimalBaseNoRemap/build.gradle new file mode 100644 index 00000000..925489b9 --- /dev/null +++ b/src/test/resources/projects/minimalBaseNoRemap/build.gradle @@ -0,0 +1,13 @@ +// This is used by a range of tests that append to this file before running the gradle tasks. +// Can be used for tests that require minimal custom setup +plugins { + id 'net.fabricmc.fabric-loom-no-remap-experimental' + id 'maven-publish' +} + +version = "1.0.0" +group = "com.example" + +base { + archivesName = "fabric-example-mod" +} \ No newline at end of file