From c79dc3cf7b3750aa03fb33a07b4af044b37f9407 Mon Sep 17 00:00:00 2001 From: Wyvest <45589059+Wyvest@users.noreply.github.com> Date: Sat, 6 Aug 2022 19:56:02 +0900 Subject: new: add forge config button compat (#80) --- .../cc/polyfrost/oneconfig/internal/OneConfig.java | 66 +++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) (limited to 'versions/src/main') diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java index 7eb5ef9..398aceb 100644 --- a/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java +++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java @@ -1,10 +1,13 @@ package cc.polyfrost.oneconfig.internal; +import cc.polyfrost.oneconfig.config.data.Mod; +import cc.polyfrost.oneconfig.config.data.ModType; import cc.polyfrost.oneconfig.events.EventManager; import cc.polyfrost.oneconfig.events.event.ShutdownEvent; import cc.polyfrost.oneconfig.internal.command.OneConfigCommand; import cc.polyfrost.oneconfig.internal.config.OneConfigConfig; import cc.polyfrost.oneconfig.internal.config.Preferences; +import cc.polyfrost.oneconfig.internal.config.compatibility.forge.ForgeCompat; import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; import cc.polyfrost.oneconfig.internal.config.core.KeyBindHandler; import cc.polyfrost.oneconfig.internal.gui.BlurHandler; @@ -13,10 +16,21 @@ import cc.polyfrost.oneconfig.libs.eventbus.Subscribe; import cc.polyfrost.oneconfig.utils.commands.CommandManager; import cc.polyfrost.oneconfig.utils.gui.GuiUtils; import cc.polyfrost.oneconfig.utils.hypixel.HypixelUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +//#if FORGE==1 +import net.minecraftforge.fml.common.ModContainer; +//#endif + +//#if MC<=11202 +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.common.Loader; +//#endif -import java.io.File; +import java.util.Map; /** * The main class of OneConfig. @@ -50,6 +64,56 @@ public class OneConfig { if (Preferences.getInstance() == null) { Preferences.getInstance(); } + //#if FORGE==1 + //#if MC<=11202 + for (ModContainer mod : Loader.instance().getActiveModList()) { + + IModGuiFactory factory = FMLClientHandler.instance().getGuiFactoryFor(mod); + //#if MC<=10809 + if (factory == null || factory.mainConfigGuiClass() == null) continue; + //#else + //$$ if (factory == null || !factory.hasConfigGui()) continue; + //#endif + ForgeCompat.compatMods.put(new ForgeCompat.ForgeCompatMod(mod.getName(), ModType.THIRD_PARTY), () -> { + try { + GuiUtils.displayScreen( + //#if MC<=10809 + factory.mainConfigGuiClass().getConstructor(GuiScreen.class).newInstance(Minecraft.getMinecraft().currentScreen) + //#else + //$$ factory.createConfigGui(Minecraft.getMinecraft().currentScreen) + //#endif + ); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + //#else + //$$ try { + //$$ java.lang.reflect.Field mods = net.minecraftforge.fml.ModList.class.getDeclaredField("mods"); + //$$ mods.setAccessible(true); + //$$ for (ModContainer container : ((java.util.List) mods.get(net.minecraftforge.fml.ModList.get()))) { + //$$ try { + //$$ java.util.Optional> gui = container.getCustomExtension(net.minecraftforge.fml.ExtensionPoint.CONFIGGUIFACTORY); + //$$ gui.ifPresent(minecraftScreenScreenBiFunction -> ForgeCompat.compatMods.put(new ForgeCompat.ForgeCompatMod(container.getModId(), ModType.THIRD_PARTY), () -> { + //$$ net.minecraft.client.gui.screen.Screen screen = minecraftScreenScreenBiFunction.apply(Minecraft.getInstance(), Minecraft.getInstance().currentScreen); + //$$ if (screen != null) { + //$$ GuiUtils.displayScreen(screen); + //$$ } + //$$ })); + //$$ } catch (Exception e) { + //$$ e.printStackTrace(); + //$$ } + //$$ } + //$$ } catch (Exception e) { + //$$ e.printStackTrace(); + //$$ } + //#endif + + for (Map.Entry entry : ForgeCompat.compatMods.entrySet()) { + ConfigCore.mods.add(entry.getKey()); + } + //#endif GuiUtils.getDeltaTime(); // called to make sure static initializer is called try { EventManager.INSTANCE.register(BlurHandler.INSTANCE); -- cgit