From 3c8e04c651f90f6f325908b56ff9ee8b6811da08 Mon Sep 17 00:00:00 2001
From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com>
Date: Wed, 19 Mar 2025 22:31:10 -0700
Subject: [PATCH 1/4] fix TextureBinder causing a client class to load
serverside
---
.../com/cleanroommc/groovyscript/mapper/TextureBinder.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/main/java/com/cleanroommc/groovyscript/mapper/TextureBinder.java b/src/main/java/com/cleanroommc/groovyscript/mapper/TextureBinder.java
index 9fa4ad5f1..07a7467cf 100644
--- a/src/main/java/com/cleanroommc/groovyscript/mapper/TextureBinder.java
+++ b/src/main/java/com/cleanroommc/groovyscript/mapper/TextureBinder.java
@@ -10,6 +10,9 @@
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fml.common.FMLCommonHandler;
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
import org.jetbrains.annotations.ApiStatus;
import java.util.List;
@@ -46,6 +49,7 @@ static TextureBinder ofArray(Function mapper, TextureBinder
}
static TextureBinder ofItem() {
+ if (FMLCommonHandler.instance().getSide().isServer()) return x -> {};
return item -> {
GlStateManager.enableDepth();
RenderHelper.enableGUIStandardItemLighting();
@@ -63,6 +67,7 @@ static TextureBinder ofItem() {
}
static TextureBinder ofFluid() {
+ if (FMLCommonHandler.instance().getSide().isServer()) return x -> {};
return fluid -> {
GlStateManager.enableBlend();
GlStateManager.enableAlpha();
@@ -79,6 +84,7 @@ static TextureBinder ofFluid() {
};
}
+ @SideOnly(Side.CLIENT)
static void drawSprite(TextureAtlasSprite textureSprite) {
double uMin = textureSprite.getMinU();
double uMax = textureSprite.getMaxU();
From 802b1a397de2264ae72a2de6bf067e01aba9d766 Mon Sep 17 00:00:00 2001
From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com>
Date: Wed, 19 Mar 2025 22:58:47 -0700
Subject: [PATCH 2/4] mark IncompatibleJavaException as client
---
.../cleanroommc/groovyscript/IncompatibleJavaException.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/main/java/com/cleanroommc/groovyscript/IncompatibleJavaException.java b/src/main/java/com/cleanroommc/groovyscript/IncompatibleJavaException.java
index be9022ad0..115c30837 100644
--- a/src/main/java/com/cleanroommc/groovyscript/IncompatibleJavaException.java
+++ b/src/main/java/com/cleanroommc/groovyscript/IncompatibleJavaException.java
@@ -3,9 +3,12 @@
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiErrorScreen;
import net.minecraftforge.fml.client.CustomModLoadingErrorDisplayException;
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List;
+@SideOnly(Side.CLIENT)
public class IncompatibleJavaException extends CustomModLoadingErrorDisplayException {
private final String msg;
From 589a2ddf17763cd905d9918bd21db743ec98cc69 Mon Sep 17 00:00:00 2001
From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com>
Date: Wed, 19 Mar 2025 22:59:22 -0700
Subject: [PATCH 3/4] extract java version code to own class
---
.../groovyscript/GroovyScript.java | 27 +--------
.../groovyscript/JavaVersionCheck.java | 59 +++++++++++++++++++
2 files changed, 60 insertions(+), 26 deletions(-)
create mode 100644 src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java
diff --git a/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java b/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java
index 4e888f7e8..b83f9dda0 100644
--- a/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java
+++ b/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java
@@ -55,7 +55,6 @@
import net.minecraftforge.fml.common.gameevent.InputEvent;
import net.minecraftforge.fml.relauncher.FMLInjectionData;
import net.minecraftforge.fml.relauncher.FMLLaunchHandler;
-import net.minecraftforge.fml.relauncher.Side;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.ApiStatus;
@@ -102,8 +101,7 @@ public class GroovyScript {
@Mod.EventHandler
public void onConstruction(FMLConstructionEvent event) {
- int jv = getJavaVersion();
- if (jv > 21) handleJavaVersionException(jv, event.getSide());
+ JavaVersionCheck.validateJavaVersion(event.getSide());
if (!SandboxData.isInitialised()) {
LOGGER.throwing(new IllegalStateException("Sandbox data should have been initialised by now, but isn't! Trying to initialize again."));
SandboxData.initialize((File) FMLInjectionData.data()[6], LOGGER);
@@ -130,17 +128,6 @@ public void onConstruction(FMLConstructionEvent event) {
getRunConfig().initPackmode();
}
- private static void handleJavaVersionException(int version, Side side) {
- String msg1 = "Groovy does not work with Java versions greater than 21 currently.";
- String msg2 = "Please downgrade to Java 21 or lower. Your current Java version is " + version + ".";
- if (side.isClient()) {
- // the super class of this exception is client only (since the screen only works on client)
- throw new IncompatibleJavaException(msg1 + "\n" + msg2);
- } else {
- throw new IllegalStateException(msg1 + " " + msg2);
- }
- }
-
@Mod.EventHandler
public void onInit(FMLInitializationEvent event) {
if (ModSupport.TINKERS_CONSTRUCT.isLoaded()) TinkersConstruct.init();
@@ -325,16 +312,4 @@ public static void doForGroovyScript(Runnable runnable) {
runnable.run();
Loader.instance().setActiveModContainer(current);
}
-
- public static int getJavaVersion() {
- // from stack overflow
- String version = System.getProperty("java.version");
- if (version.startsWith("1.")) {
- version = version.substring(2, 3);
- } else {
- int dot = version.indexOf(".");
- if (dot != -1) version = version.substring(0, dot);
- }
- return Integer.parseInt(version);
- }
}
diff --git a/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java b/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java
new file mode 100644
index 000000000..ea4b74fb5
--- /dev/null
+++ b/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java
@@ -0,0 +1,59 @@
+package com.cleanroommc.groovyscript;
+
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
+
+/**
+ * Checks that the Java version being used can be used by the Groovy that GroovyScript uses.
+ * Our version of Groovy is currently not compatible with java versions above 21.
+ */
+public class JavaVersionCheck {
+
+ private static final int MAXIMUM_VERSION = 21;
+
+ /**
+ * Checks that the Java version being used can run GroovyScript scripts.
+ */
+ public static void validateJavaVersion(Side side) {
+ int version = getJavaVersion();
+ if (version > MAXIMUM_VERSION) handleJavaVersionException(version, side);
+ }
+
+ private static void handleJavaVersionException(int version, Side side) {
+ String msg1 = "GroovyScript's version of Groovy does not work with Java versions greater than " + MAXIMUM_VERSION + " currently.";
+ String msg2 = "Please downgrade to Java " + MAXIMUM_VERSION + " or lower. Your current Java version is " + version + ".";
+ if (side.isClient()) {
+ throw new IncompatibleJavaException(msg1 + "\n" + msg2);
+ } else {
+ throw new IllegalStateException(msg1 + " " + msg2);
+ }
+ }
+
+ /**
+ * Gets the major version of Java currently running.
+ *
+ *
+ * | 1.8.0_51 |
+ * = |
+ * 8 |
+ *
+ *
+ * | 21.0.6 |
+ * = |
+ * 21 |
+ *
+ *
+ * Code comes from
+ * Stack Overflow.
+ */
+ private static int getJavaVersion() {
+ String version = System.getProperty("java.version");
+ if (version.startsWith("1.")) {
+ version = version.substring(2, 3);
+ } else {
+ int dot = version.indexOf(".");
+ if (dot != -1) version = version.substring(0, dot);
+ }
+ return Integer.parseInt(version);
+ }
+}
From 376bbbc921d472792ee069f0ef5b447700a4d949 Mon Sep 17 00:00:00 2001
From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com>
Date: Wed, 19 Mar 2025 22:59:53 -0700
Subject: [PATCH 4/4] extract client-only exception to separate method
---
.../cleanroommc/groovyscript/JavaVersionCheck.java | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java b/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java
index ea4b74fb5..e078c2ef4 100644
--- a/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java
+++ b/src/main/java/com/cleanroommc/groovyscript/JavaVersionCheck.java
@@ -23,12 +23,21 @@ private static void handleJavaVersionException(int version, Side side) {
String msg1 = "GroovyScript's version of Groovy does not work with Java versions greater than " + MAXIMUM_VERSION + " currently.";
String msg2 = "Please downgrade to Java " + MAXIMUM_VERSION + " or lower. Your current Java version is " + version + ".";
if (side.isClient()) {
- throw new IncompatibleJavaException(msg1 + "\n" + msg2);
+ throwIncompatibleJavaException(msg1 + "\n" + msg2);
} else {
throw new IllegalStateException(msg1 + " " + msg2);
}
}
+ /**
+ * Because the super class of this exception is client only (since the screen only works on client)
+ * this has to be in a separate method.
+ */
+ @SideOnly(Side.CLIENT)
+ private static void throwIncompatibleJavaException(String msg) {
+ throw new IncompatibleJavaException(msg);
+ }
+
/**
* Gets the major version of Java currently running.
*