From 94e674658fa03fe0a89752be447bab3ad19f8efa Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Tue, 20 Oct 2020 12:26:56 -0400 Subject: [PATCH] 1.0.5 --- CHANGELOG.md | 3 ++ README.md | 9 +++++ gradle.properties | 2 +- .../freshcoffee/FreshCoffee.java | 3 +- .../freshcoffee/config/HardcodedConfig.java | 1 + .../freshcoffee/util/PreviewUtil.java | 34 +++++++++++++++++++ .../freshcoffee/util/ReLaunchUtil.java | 8 +++-- 7 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/thebrokenrail/freshcoffee/util/PreviewUtil.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f36b38..31925f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +**1.0.5** +* Allow Forcing Preview Features With ``freshcoffee:preview_features_required`` + **1.0.4** * Replace Reflection With New Fabric Loader API * Enable Java Preview Features diff --git a/README.md b/README.md index 8af0f0d..a46c4b5 100644 --- a/README.md +++ b/README.md @@ -35,4 +35,13 @@ You can set a maximum version of Java by adding this to ``fabric.mod.json``: "freshcoffee:maximum_java_version": 14 } } +``` + +You can also force Java preview features: +```json +{ + "custom": { + "freshcoffee:preview_features_required": true + } +} ``` \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 423bf33..ad34e07 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ org.gradle.jvmargs = -Xmx1G fabric_loader_version = 0.10.3+build.211 # Mod Properties - mod_version = 1.0.4 + mod_version = 1.0.5 maven_group = com.thebrokenrail # Dependencies diff --git a/src/main/java/com/thebrokenrail/freshcoffee/FreshCoffee.java b/src/main/java/com/thebrokenrail/freshcoffee/FreshCoffee.java index c87188e..d2a8367 100644 --- a/src/main/java/com/thebrokenrail/freshcoffee/FreshCoffee.java +++ b/src/main/java/com/thebrokenrail/freshcoffee/FreshCoffee.java @@ -4,6 +4,7 @@ import com.thebrokenrail.freshcoffee.config.HardcodedConfig; import com.thebrokenrail.freshcoffee.dialog.Dialog; import com.thebrokenrail.freshcoffee.download.AdoptOpenJDK; import com.thebrokenrail.freshcoffee.util.PlatformUtil; +import com.thebrokenrail.freshcoffee.util.PreviewUtil; import com.thebrokenrail.freshcoffee.util.ReLaunchUtil; import com.thebrokenrail.freshcoffee.util.Util; import com.thebrokenrail.freshcoffee.util.ExtractUtil; @@ -17,7 +18,7 @@ import java.net.URL; public class FreshCoffee implements PreLaunchEntrypoint { @Override public void onPreLaunch() { - if (Util.JAVA_VERSION < LimitUtil.getMinimumJavaVersion().getValue() || Util.JAVA_VERSION > LimitUtil.getMaximumJavaVersion().getValue()) { + if (Util.JAVA_VERSION < LimitUtil.getMinimumJavaVersion().getValue() || Util.JAVA_VERSION > LimitUtil.getMaximumJavaVersion().getValue() || (PreviewUtil.arePreviewFeaturesRequired() && !PreviewUtil.arePreviewFeaturesEnabled())) { if (LimitUtil.getMinimumJavaVersion().getValue() > LimitUtil.getMaximumJavaVersion().getValue()) { Dialog.getInstance().showErrorDialog(String.format(HardcodedConfig.MINIMUM_HIGHER_THAN_MAXIMUM_MESSAGE, LimitUtil.getMinimumJavaVersion().toString(), LimitUtil.getMaximumJavaVersion().toString())); System.exit(1); diff --git a/src/main/java/com/thebrokenrail/freshcoffee/config/HardcodedConfig.java b/src/main/java/com/thebrokenrail/freshcoffee/config/HardcodedConfig.java index 9e7bfe8..29f6f18 100644 --- a/src/main/java/com/thebrokenrail/freshcoffee/config/HardcodedConfig.java +++ b/src/main/java/com/thebrokenrail/freshcoffee/config/HardcodedConfig.java @@ -5,6 +5,7 @@ import java.io.File; public final class HardcodedConfig { public static final String MINIMUM_JSON_KEY = "freshcoffee:minimum_java_version"; public static final String MAXIMUM_JSON_KEY = "freshcoffee:maximum_java_version"; + public static final String PREVIEW_JSON_KEY = "freshcoffee:preview_features_required"; public static final String TITLE = "FreshCoffee"; diff --git a/src/main/java/com/thebrokenrail/freshcoffee/util/PreviewUtil.java b/src/main/java/com/thebrokenrail/freshcoffee/util/PreviewUtil.java new file mode 100644 index 0000000..c469a12 --- /dev/null +++ b/src/main/java/com/thebrokenrail/freshcoffee/util/PreviewUtil.java @@ -0,0 +1,34 @@ +package com.thebrokenrail.freshcoffee.util; + +import com.thebrokenrail.freshcoffee.config.HardcodedConfig; +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.fabricmc.loader.api.metadata.ModMetadata; + +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import java.util.List; + +public final class PreviewUtil { + public static boolean arePreviewFeaturesRequired() { + for (ModContainer mod : FabricLoader.getInstance().getAllMods()) { + ModMetadata metadata = mod.getMetadata(); + if (metadata.containsCustomValue(HardcodedConfig.PREVIEW_JSON_KEY)) { + try { + boolean newValue = metadata.getCustomValue(HardcodedConfig.PREVIEW_JSON_KEY).getAsBoolean(); + if (newValue) { + return true; + } + } catch (ClassCastException e) { + Util.getLogger().error("Invalid Value For Preview Features: " + metadata.getId()); + } + } + } + return false; + } + + public static boolean arePreviewFeaturesEnabled() { + List vmArgs = new ArrayList<>(ManagementFactory.getRuntimeMXBean().getInputArguments()); + return vmArgs.contains("--enable-preview"); + } +} diff --git a/src/main/java/com/thebrokenrail/freshcoffee/util/ReLaunchUtil.java b/src/main/java/com/thebrokenrail/freshcoffee/util/ReLaunchUtil.java index 243cb86..57fdec8 100644 --- a/src/main/java/com/thebrokenrail/freshcoffee/util/ReLaunchUtil.java +++ b/src/main/java/com/thebrokenrail/freshcoffee/util/ReLaunchUtil.java @@ -58,8 +58,12 @@ public final class ReLaunchUtil { // Remove Debugger vmArgs.removeIf(arg -> arg.startsWith("-agentlib") || arg.startsWith("-javaagent")); // Enable Java Preview Features - if (!vmArgs.contains("--enable-preview")) { - vmArgs.add("--enable-preview"); + if (PreviewUtil.arePreviewFeaturesRequired()) { + if (!vmArgs.contains("--enable-preview")) { + vmArgs.add("--enable-preview"); + } + } else { + vmArgs.remove("--enable-preview"); } List mainArgs = getMainArgs();