From f5e2d9347dfb40075b7e245822c2d822d1451134 Mon Sep 17 00:00:00 2001 From: mezz Date: Sat, 5 Nov 2016 22:25:14 -0700 Subject: [PATCH] Fix #582 Item List Visibility Toggle requries opening a new gui --- src/main/java/mezz/jei/GuiEventHandler.java | 19 +++++++++++++++---- src/main/java/mezz/jei/config/Config.java | 3 +++ .../mezz/jei/config/OverlayToggleEvent.java | 15 +++++++++++++++ .../java/mezz/jei/gui/ItemListOverlay.java | 6 ++---- 4 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 src/main/java/mezz/jei/config/OverlayToggleEvent.java diff --git a/src/main/java/mezz/jei/GuiEventHandler.java b/src/main/java/mezz/jei/GuiEventHandler.java index 16e195901..6c8d516f3 100644 --- a/src/main/java/mezz/jei/GuiEventHandler.java +++ b/src/main/java/mezz/jei/GuiEventHandler.java @@ -3,12 +3,14 @@ import javax.annotation.Nullable; import mezz.jei.config.Config; +import mezz.jei.config.OverlayToggleEvent; import mezz.jei.gui.ItemListOverlay; import mezz.jei.gui.ItemListOverlayInternal; import mezz.jei.gui.TooltipRenderer; import mezz.jei.gui.recipes.RecipesGui; import mezz.jei.input.InputHandler; import mezz.jei.util.Translator; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraftforge.client.event.GuiOpenEvent; @@ -30,12 +32,21 @@ public GuiEventHandler(JeiRuntime runtime) { } @SubscribeEvent - public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { - ItemListOverlay itemListOverlay = runtime.getItemListOverlay(); + public void onOverlayToggle(OverlayToggleEvent event) { + GuiScreen currentScreen = Minecraft.getMinecraft().currentScreen; + onNewScreen(currentScreen); + } + @SubscribeEvent + public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { GuiScreen gui = event.getGui(); - if (gui instanceof GuiContainer || gui instanceof RecipesGui) { - ItemListOverlayInternal itemListOverlayInternal = itemListOverlay.create(gui); + onNewScreen(gui); + } + + private void onNewScreen(@Nullable GuiScreen screen) { + if (screen instanceof GuiContainer || screen instanceof RecipesGui) { + ItemListOverlay itemListOverlay = runtime.getItemListOverlay(); + ItemListOverlayInternal itemListOverlayInternal = itemListOverlay.create(screen); inputHandler = new InputHandler(runtime, itemListOverlayInternal); } else { inputHandler = null; diff --git a/src/main/java/mezz/jei/config/Config.java b/src/main/java/mezz/jei/config/Config.java index 2d8014e76..6634b9bbf 100644 --- a/src/main/java/mezz/jei/config/Config.java +++ b/src/main/java/mezz/jei/config/Config.java @@ -14,6 +14,7 @@ import mezz.jei.util.Translator; import mezz.jei.util.color.ColorGetter; import mezz.jei.util.color.ColorNamer; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.ConfigCategory; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; @@ -82,6 +83,8 @@ public static void toggleOverlayEnabled() { worldConfig.save(); } } + + MinecraftForge.EVENT_BUS.post(new OverlayToggleEvent(overlayEnabled)); } public static boolean isCheatItemsEnabled() { diff --git a/src/main/java/mezz/jei/config/OverlayToggleEvent.java b/src/main/java/mezz/jei/config/OverlayToggleEvent.java new file mode 100644 index 000000000..74fcee6cf --- /dev/null +++ b/src/main/java/mezz/jei/config/OverlayToggleEvent.java @@ -0,0 +1,15 @@ +package mezz.jei.config; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class OverlayToggleEvent extends Event { + private final boolean overlayEnabled; + + public OverlayToggleEvent(boolean overlayEnabled) { + this.overlayEnabled = overlayEnabled; + } + + public boolean isOverlayEnabled() { + return overlayEnabled; + } +} diff --git a/src/main/java/mezz/jei/gui/ItemListOverlay.java b/src/main/java/mezz/jei/gui/ItemListOverlay.java index 17678afc3..91656706d 100644 --- a/src/main/java/mezz/jei/gui/ItemListOverlay.java +++ b/src/main/java/mezz/jei/gui/ItemListOverlay.java @@ -33,21 +33,19 @@ public ItemListOverlay(ItemFilter itemFilter, List> advan @Nullable public ItemListOverlayInternal create(GuiScreen guiScreen) { + close(); + if (Config.isOverlayEnabled()) { GuiProperties guiProperties = GuiProperties.create(guiScreen); if (guiProperties != null) { final int columns = ItemListOverlayInternal.getColumns(guiProperties); if (columns >= 4) { - if (internal != null) { - close(); - } internal = new ItemListOverlayInternal(this, ingredientRegistry, guiScreen, guiProperties); return internal; } } } - close(); return null; }