From bda6a119108d238e3c7d85e82f37f5d6da3b9b5e Mon Sep 17 00:00:00 2001
From: Wyvest <45589059+Wyvest@users.noreply.github.com>
Date: Sun, 19 Jun 2022 21:03:59 +0700
Subject: use ITweakers properly move hooks out of transformers
---
.../plugin/hooks/Lwjgl2FunctionProvider.java | 39 ++++++++++++++++++++++
.../internal/plugin/hooks/OptifineConfigHook.java | 23 +++++++++++++
.../internal/plugin/hooks/VigilantHook.java | 27 +++++++++++++++
3 files changed, 89 insertions(+)
create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/Lwjgl2FunctionProvider.java
create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/OptifineConfigHook.java
create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/VigilantHook.java
(limited to 'src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks')
diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/Lwjgl2FunctionProvider.java b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/Lwjgl2FunctionProvider.java
new file mode 100644
index 0000000..cf395ed
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/Lwjgl2FunctionProvider.java
@@ -0,0 +1,39 @@
+package cc.polyfrost.oneconfig.internal.plugin.hooks;
+
+import org.lwjgl.opengl.GLContext;
+import org.lwjgl.system.FunctionProvider;
+
+import java.lang.reflect.Method;
+import java.nio.ByteBuffer;
+
+/**
+ * Taken from LWJGLTwoPointFive under The Unlicense
+ * https://github.com/DJtheRedstoner/LWJGLTwoPointFive/blob/master/LICENSE/
+ */
+public class Lwjgl2FunctionProvider implements FunctionProvider {
+
+ private final Method m_getFunctionAddress;
+
+ public Lwjgl2FunctionProvider() {
+ try {
+ m_getFunctionAddress = GLContext.class.getDeclaredMethod("getFunctionAddress", String.class);
+ m_getFunctionAddress.setAccessible(true);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public long getFunctionAddress(CharSequence functionName) {
+ try {
+ return (long) m_getFunctionAddress.invoke(null, functionName.toString());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public long getFunctionAddress(ByteBuffer byteBuffer) {
+ throw new UnsupportedOperationException();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/OptifineConfigHook.java b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/OptifineConfigHook.java
new file mode 100644
index 0000000..bf8d675
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/OptifineConfigHook.java
@@ -0,0 +1,23 @@
+package cc.polyfrost.oneconfig.internal.plugin.hooks;
+
+import cc.polyfrost.oneconfig.gui.OneConfigGui;
+import cc.polyfrost.oneconfig.libs.universal.UScreen;
+import cc.polyfrost.oneconfig.utils.gui.GuiUtils;
+import net.minecraft.client.gui.GuiScreen;
+
+import java.util.Optional;
+
+public class OptifineConfigHook {
+
+ public static boolean shouldNotApplyFastRender() {
+ if (UScreen.getCurrentScreen() instanceof OneConfigGui) {
+ return true;
+ }
+ for (Optional screen : GuiUtils.getScreenQueue()) {
+ if (screen.isPresent() && screen.get() instanceof OneConfigGui) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/VigilantHook.java b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/VigilantHook.java
new file mode 100644
index 0000000..59aebca
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/VigilantHook.java
@@ -0,0 +1,27 @@
+package cc.polyfrost.oneconfig.internal.plugin.hooks;
+
+import cc.polyfrost.oneconfig.config.compatibility.vigilance.VigilanceConfig;
+import cc.polyfrost.oneconfig.config.data.Mod;
+import cc.polyfrost.oneconfig.config.data.ModType;
+import cc.polyfrost.oneconfig.internal.config.core.ConfigCore;
+import gg.essential.vigilance.Vigilant;
+import net.minecraft.client.Minecraft;
+import net.minecraftforge.fml.common.Loader;
+
+import java.io.File;
+
+@SuppressWarnings("unused")
+public class VigilantHook {
+ public static VigilanceConfig returnNewConfig(Vigilant vigilant, File file) {
+ if (vigilant != null && Minecraft.getMinecraft().isCallingFromMinecraftThread()) {
+ String name = !vigilant.getGuiTitle().equals("Settings") ? vigilant.getGuiTitle() : Loader.instance().activeModContainer() == null ? "Unknown" : Loader.instance().activeModContainer().getName();
+ if (name.equals("OneConfig")) name = "Essential";
+ String finalName = name;
+ // duplicate fix
+ if (ConfigCore.oneConfigMods.stream().anyMatch(mod -> mod.name.equals(finalName))) return null;
+ return new VigilanceConfig(new Mod(name, ModType.THIRD_PARTY), file.getAbsolutePath(), vigilant);
+ } else {
+ return null;
+ }
+ }
+}
--
cgit