diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 0a21c707..3fb9ee97 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -54,9 +54,12 @@ import net.fabricmc.loom.providers.MinecraftMappedProvider; import net.fabricmc.loom.providers.MinecraftProvider; import net.fabricmc.loom.providers.PatchProvider; import net.fabricmc.loom.providers.McpConfigProvider; +import net.fabricmc.loom.util.LazyBool; import net.fabricmc.loom.util.LoomDependencyManager; public class LoomGradleExtension { + private static final String FORGE_PROPERTY = "loom.forge"; + public String runDir = "run"; public String refmapName; public String loaderLaunchMethod; @@ -78,6 +81,7 @@ public class LoomGradleExtension { private JsonObject installerJson; private MappingSet[] srcMappingCache = new MappingSet[2]; private Mercury[] srcMercuryCache = new Mercury[2]; + private final LazyBool forge; /** * Loom will generate a new genSources task (with a new name, based off of {@link LoomDecompiler#name()}) @@ -99,6 +103,7 @@ public class LoomGradleExtension { this.project = project; this.autoGenIDERuns = AbstractPlugin.isRootProject(project); this.unmappedMods = project.files(); + this.forge = new LazyBool(() -> Boolean.parseBoolean(Objects.toString(project.getProperties().get(FORGE_PROPERTY)))); } /** @@ -394,6 +399,6 @@ public class LoomGradleExtension { } public boolean isForge() { - return true; // TODO + return forge.getAsBoolean(); } } diff --git a/src/main/java/net/fabricmc/loom/util/LazyBool.java b/src/main/java/net/fabricmc/loom/util/LazyBool.java new file mode 100644 index 00000000..e76622f7 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/util/LazyBool.java @@ -0,0 +1,26 @@ +package net.fabricmc.loom.util; + +import java.util.Objects; +import java.util.function.BooleanSupplier; + +/** + * A lazily computed boolean value. + */ +public final class LazyBool implements BooleanSupplier { + private BooleanSupplier supplier; + private Boolean value; + + public LazyBool(BooleanSupplier supplier) { + this.supplier = Objects.requireNonNull(supplier, "supplier"); + } + + @Override + public boolean getAsBoolean() { + if (value == null) { + value = supplier.getAsBoolean(); + supplier = null; // Release the supplier + } + + return value; + } +}