mirror of
https://github.com/FalsePattern/FalsePatternLib.git
synced 2026-11-15 18:24:45 +00:00
Added fix for In-Game Mod Options
This commit is contained in:
1 parent
1fe9c5f43c
commit
d794c24d2e
6 files changed
+117
-3
No files matched your search
@@ -27,6 +27,7 @@ import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.Mod;
|
||||
import cpw.mods.fml.common.SidedProxy;
|
||||
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
@@ -65,6 +66,11 @@ public class FalsePatternLib {
|
||||
proxy.preInit(e);
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void init(FMLInitializationEvent e) {
|
||||
proxy.init(e);
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void postInit(FMLPostInitializationEvent e) {
|
||||
if (Loader.isModLoaded("gasstation")) {
|
||||
@@ -72,5 +78,4 @@ public class FalsePatternLib {
|
||||
}
|
||||
proxy.postInit(e);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.falsepattern.lib.internal.config;
|
||||
|
||||
import com.falsepattern.lib.internal.Share;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.val;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import cpw.mods.fml.client.FMLClientHandler;
|
||||
import cpw.mods.fml.client.GuiIngameModOptions;
|
||||
import cpw.mods.fml.client.GuiModList;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static lombok.AccessLevel.PRIVATE;
|
||||
|
||||
@NoArgsConstructor(access = PRIVATE)
|
||||
public final class InGameModOptionsFix {
|
||||
private static boolean isInitialized = false;
|
||||
|
||||
private static Field MODS_FIELD;
|
||||
|
||||
public static void init() {
|
||||
if (isInitialized)
|
||||
return;
|
||||
|
||||
try {
|
||||
MODS_FIELD = GuiModList.class.getDeclaredField("mods");
|
||||
MODS_FIELD.setAccessible(true);
|
||||
} catch (NoSuchFieldException e) {
|
||||
MODS_FIELD = null;
|
||||
Share.LOG.error("Failed to get field: cpw.mods.fml.client.GuiModList.mods,"
|
||||
+ " In-Game Mod Options Fix will not work", e);
|
||||
return;
|
||||
}
|
||||
MinecraftForge.EVENT_BUS.register(new InGameModOptionsFix());
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onGuiOpen(final GuiOpenEvent event) {
|
||||
if (!isInitialized)
|
||||
return;
|
||||
if (!LibraryConfig.IN_GAME_MOD_OPTIONS_FIX)
|
||||
return;
|
||||
|
||||
if (event.gui instanceof GuiIngameModOptions)
|
||||
event.gui = new GuiModConfigList(Minecraft.getMinecraft().currentScreen);
|
||||
}
|
||||
|
||||
private static class GuiModConfigList extends GuiModList {
|
||||
private GuiModConfigList(GuiScreen screen) {
|
||||
super(screen);
|
||||
val mods = new ArrayList<ModContainer>();
|
||||
for (val mod : getModsFromPrivateField()) {
|
||||
val guiFactory = FMLClientHandler.instance().getGuiFactoryFor(mod);
|
||||
if (guiFactory == null)
|
||||
continue;
|
||||
if (guiFactory.mainConfigGuiClass() != null)
|
||||
mods.add(mod);
|
||||
}
|
||||
setModsToPrivateField(mods);
|
||||
}
|
||||
|
||||
private List<ModContainer> getModsFromPrivateField() {
|
||||
try {
|
||||
return (List<ModContainer>) MODS_FIELD.get(this);
|
||||
} catch (Exception e) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
private void setModsToPrivateField(List<ModContainer> mods) {
|
||||
try {
|
||||
MODS_FIELD.set(this, mods);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,13 @@ public class LibraryConfig {
|
||||
@Config.DefaultBoolean(true)
|
||||
public static boolean ENABLE_LIBRARY_DOWNLOADS;
|
||||
|
||||
@Config.Comment({"Fixes the mod options menu in-game.",
|
||||
"By default, the mod options when in already in a game will show \"Test1, Test2, DISABLED\" in bright red.",
|
||||
"This replaces that interface with the one from the main menu."})
|
||||
@Config.LangKey("config.falsepatternlib.ingamemodoptionsfix")
|
||||
@Config.DefaultBoolean(true)
|
||||
public static boolean IN_GAME_MOD_OPTIONS_FIX;
|
||||
|
||||
@Config.Comment("How \"loud\" the config error logging should be.")
|
||||
@Config.LangKey("config.falsepatternlib.configlogging")
|
||||
@Config.DefaultEnum("Log")
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
*/
|
||||
package com.falsepattern.lib.internal.proxy;
|
||||
|
||||
import com.falsepattern.lib.internal.config.InGameModOptionsFix;
|
||||
import com.falsepattern.lib.internal.impl.config.event.ClientEventHandlerPost;
|
||||
import com.falsepattern.lib.internal.impl.config.event.ClientEventHandlerPre;
|
||||
import com.falsepattern.lib.internal.impl.toast.GuiToastImpl;
|
||||
@@ -27,6 +28,7 @@ import com.falsepattern.lib.internal.impl.toast.GuiToastImpl;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -47,6 +49,12 @@ public class ClientProxy extends CommonProxy {
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(FMLInitializationEvent e) {
|
||||
super.init(e);
|
||||
InGameModOptionsFix.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit(FMLPostInitializationEvent e) {
|
||||
super.postInit(e);
|
||||
|
||||
@@ -34,7 +34,9 @@ import com.falsepattern.lib.internal.impl.config.net.SyncRequestHandler;
|
||||
import com.falsepattern.lib.updates.UpdateChecker;
|
||||
import lombok.val;
|
||||
|
||||
import cpw.mods.fml.common.Mod;
|
||||
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -72,9 +74,11 @@ public class CommonProxy {
|
||||
}
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void init(FMLInitializationEvent e) {
|
||||
}
|
||||
|
||||
public void postInit(FMLPostInitializationEvent e) {
|
||||
CommonEventHandlerPost.registerBus();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user