From 20a0d31befa8120688b77faf189748ca4c0b9e07 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 7 Mar 2019 23:13:49 +0800 Subject: option to disable recipe book --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 2 -- .../java/me/shedaniel/rei/client/ConfigObject.java | 3 +++ .../java/me/shedaniel/rei/client/GuiHelper.java | 17 ++++++++++++----- .../me/shedaniel/rei/gui/config/ConfigScreen.java | 19 +++++++++++++++++++ .../rei/listeners/ContainerScreenHooks.java | 11 +++++------ .../shedaniel/rei/mixin/MixinContainerScreen.java | 3 ++- .../java/me/shedaniel/rei/mixin/MixinScreen.java | 22 ++++++++++++++++++++++ 7 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 src/main/java/me/shedaniel/rei/mixin/MixinScreen.java (limited to 'src/main/java') diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index dddb955e0..2cac1d50e 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -81,8 +81,6 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali RoughlyEnoughItemsCore.LOGGER.warn("REI: Plugin Loader is not loaded! Please consider installing https://minecraft.curseforge.com/projects/pluginloader for REI plugin compatibility!"); registerPlugin(new Identifier("roughlyenoughitems", "default_plugin"), new DefaultPlugin()); } - - ClientTickCallback.EVENT.register(GuiHelper::onTick); } @Override diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java index ba697d99a..447fb8658 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java @@ -43,6 +43,9 @@ public class ConfigObject { @Comment("Toggle utils buttons") public boolean showUtilsButtons = false; + @Comment("Disable Recipe Book") + public boolean disableRecipeBook = false; + @Comment("The location of choose page dialog") public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5); diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java index 9c41a5abf..329753add 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java @@ -1,11 +1,14 @@ package me.shedaniel.rei.client; import com.google.common.collect.Lists; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.widget.TextFieldWidget; import me.shedaniel.rei.listeners.ContainerScreenHooks; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerScreen; +import net.minecraft.client.gui.InputListener; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.RecipeBookButtonWidget; import net.minecraft.item.ItemStack; import java.util.List; @@ -38,10 +41,14 @@ public class GuiHelper { return getLastOverlay(false); } - public static void onTick(MinecraftClient client) { - if (client.currentScreen instanceof ContainerScreen && lastContainerScreen != client.currentScreen) { - GuiHelper.lastContainerScreen = (ContainerScreen) client.currentScreen; - } + public static void disableRecipeBook(ContainerScreen lastContainerScreen, List listeners, List buttonWidgets) { + RoughlyEnoughItemsCore.LOGGER.info("%d %d", listeners.size(), buttonWidgets.size()); + for(InputListener listener : listeners) + if (listener instanceof RecipeBookButtonWidget) + listeners.remove(listener); + for(ButtonWidget buttonWidget : buttonWidgets) + if (buttonWidget instanceof RecipeBookButtonWidget) + buttonWidgets.remove(buttonWidget); } public static ContainerScreen getLastContainerScreen() { diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java index 4af12577b..01f40f9aa 100644 --- a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java @@ -207,6 +207,25 @@ public class ConfigScreen extends Screen { return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons); } })); + entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.disable_recipe_book"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() { + @Override + public boolean onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook; + try { + RoughlyEnoughItemsCore.getConfigManager().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public String getText() { + return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook); + } + })); entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.advanced"))); entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.give_command"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { @Override diff --git a/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java b/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java index 33ed1aceb..caae64adc 100644 --- a/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java +++ b/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java @@ -1,18 +1,17 @@ package me.shedaniel.rei.listeners; import net.minecraft.container.Slot; -import net.minecraft.item.ItemStack; public interface ContainerScreenHooks { - public int rei_getContainerLeft(); + int rei_getContainerLeft(); - public int rei_getContainerTop(); + int rei_getContainerTop(); - public int rei_getContainerWidth(); + int rei_getContainerWidth(); - public int rei_getContainerHeight(); + int rei_getContainerHeight(); - public Slot rei_getHoveredSlot(); + Slot rei_getHoveredSlot(); } diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java b/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java index 0ba58ae8a..b0fed91c7 100644 --- a/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java +++ b/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java @@ -1,5 +1,6 @@ package me.shedaniel.rei.mixin; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.TabGetter; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.GuiHelper; @@ -9,9 +10,9 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerScreen; import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen; +import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.container.Slot; import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinScreen.java b/src/main/java/me/shedaniel/rei/mixin/MixinScreen.java new file mode 100644 index 000000000..df034a967 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/mixin/MixinScreen.java @@ -0,0 +1,22 @@ +package me.shedaniel.rei.mixin; + +import me.shedaniel.rei.RoughlyEnoughItemsCore; +import net.minecraft.client.gui.ContainerScreen; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.RecipeBookButtonWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Screen.class) +public class MixinScreen { + + @Inject(method = "addButton", at = @At("HEAD"), cancellable = true) + protected void addButton(ButtonWidget buttonWidget, CallbackInfoReturnable info) { + if (RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook && ((Screen) (Object) this) instanceof ContainerScreen && buttonWidget instanceof RecipeBookButtonWidget) + info.cancel(); + } + +} -- cgit