aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/envcheck/EnvironmentScan.java85
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/envcheck/FabricEntrypoint.java26
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/envcheck/NEUMixinConfigPlugin.java46
3 files changed, 157 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/envcheck/EnvironmentScan.java b/src/main/java/io/github/moulberry/notenoughupdates/envcheck/EnvironmentScan.java
new file mode 100644
index 00000000..8e0f24b9
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/envcheck/EnvironmentScan.java
@@ -0,0 +1,85 @@
+package io.github.moulberry.notenoughupdates.envcheck;
+
+import javax.swing.*;
+import java.lang.reflect.Field;
+import java.util.Objects;
+
+public class EnvironmentScan {
+
+ static Class<?> tryGetClass(String name) {
+ try {
+ return Class.forName(name);
+ } catch (ClassNotFoundException e) {
+ return null;
+ }
+ }
+
+ static Object tryGetField(Class<?> clazz, Object inst, String name) {
+ if (clazz == null) return null;
+ try {
+ Field declaredField = clazz.getDeclaredField(name);
+ return declaredField.get(inst);
+ } catch (NoSuchFieldException | IllegalAccessException ignored) {
+ }
+ return null;
+ }
+
+
+ static boolean isAtLeast(Object left, int right) {
+ if (left instanceof Integer) {
+ return (Integer) left >= right;
+ }
+ return false;
+ }
+
+ static boolean shouldCheckOnce = true;
+
+ static void checkEnvironmentOnce() {
+ if (shouldCheckOnce) checkEnvironment();
+ }
+
+
+ static void checkEnvironment() {
+ shouldCheckOnce = false;
+ checkForgeEnvironment();
+ }
+
+ static void checkForgeEnvironment() {
+ Class<?> forgeVersion = tryGetClass("net.minecraftforge.common.ForgeVersion");
+ if (forgeVersion == null
+ || !Objects.equals(tryGetField(forgeVersion, null, "majorVersion"), 11)
+ || !Objects.equals(tryGetField(forgeVersion, null, "minorVersion"), 15)
+ || !isAtLeast(tryGetField(forgeVersion, null, "revisionVersion"), 1)
+ || !Objects.equals(tryGetField(forgeVersion, null, "mcVersion"), "1.8.9")
+ ) {
+
+ System.out.printf("Forge Version : %s%nMajor : %s%nMinor : %s%nRevision : %s%nMinecraft : %s%n",
+ forgeVersion,
+ tryGetField(forgeVersion, null, "majorVersion"),
+ tryGetField(forgeVersion, null, "minorVersion"),
+ tryGetField(forgeVersion, null, "revisionVersion"),
+ tryGetField(forgeVersion, null, "mcVersion")
+ );
+ missingOrOutdatedForgeError();
+ }
+ }
+
+ static void missingOrOutdatedForgeError() {
+ showErrorMessage(
+ "You just launched NotEnoughUpdates with the wrong (or no) modloader installed.",
+ "",
+ "NotEnoughUpdates only works in Minecraft 1.8.9, with Forge 11.15.1+",
+ "Please relaunch NotEnoughUpdates in the correct environment.",
+ "If you are using Minecraft 1.8.9 with Forge 11.15.1+ installed, please contact support.",
+ "Click OK to launch anyways."
+ );
+ }
+
+
+ public static void showErrorMessage(String... messages) {
+ String message = String.join("\n", messages);
+ JOptionPane.showMessageDialog(
+ null, message, "NotEnoughUpdates - Problematic System Configuration", JOptionPane.ERROR_MESSAGE
+ );
+ }
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/envcheck/FabricEntrypoint.java b/src/main/java/io/github/moulberry/notenoughupdates/envcheck/FabricEntrypoint.java
new file mode 100644
index 00000000..4a70fca3
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/envcheck/FabricEntrypoint.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2022 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package io.github.moulberry.notenoughupdates.envcheck;
+
+public class FabricEntrypoint {
+ static {
+ EnvironmentScan.checkForgeEnvironment();
+ }
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/envcheck/NEUMixinConfigPlugin.java b/src/main/java/io/github/moulberry/notenoughupdates/envcheck/NEUMixinConfigPlugin.java
new file mode 100644
index 00000000..44e24ff4
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/envcheck/NEUMixinConfigPlugin.java
@@ -0,0 +1,46 @@
+package io.github.moulberry.notenoughupdates.envcheck;
+
+import org.spongepowered.asm.lib.tree.ClassNode;
+import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
+import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
+
+import java.util.List;
+import java.util.Set;
+
+public class NEUMixinConfigPlugin implements IMixinConfigPlugin {
+
+ static {
+ EnvironmentScan.checkEnvironmentOnce();
+ }
+
+ @Override
+ public void onLoad(String mixinPackage) {
+ }
+
+ @Override
+ public String getRefMapperConfig() {
+ return null;
+ }
+
+ @Override
+ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
+ return true;
+ }
+
+ @Override
+ public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
+ }
+
+ @Override
+ public List<String> getMixins() {
+ return null;
+ }
+
+ @Override
+ public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
+ }
+
+ @Override
+ public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
+ }
+}