From e5909b2fa40428d2a25a4f727a49a4f4fc47ad01 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 6 Mar 2019 20:25:01 +0800 Subject: Stuff's going on --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 4 +-- src/main/java/me/shedaniel/rei/api/TabGetter.java | 5 ++++ .../java/me/shedaniel/rei/client/ClientHelper.java | 11 +++---- .../java/me/shedaniel/rei/client/ConfigHelper.java | 1 - .../java/me/shedaniel/rei/client/GuiHelper.java | 6 ++-- .../shedaniel/rei/gui/ContainerScreenOverlay.java | 32 +++++++++----------- .../me/shedaniel/rei/gui/RecipeViewingScreen.java | 13 ++++++-- .../me/shedaniel/rei/gui/config/ConfigScreen.java | 18 ++++++++++- .../me/shedaniel/rei/gui/widget/QueuedTooltip.java | 35 +++++++++++++++++++--- .../rei/listeners/ContainerScreenHooks.java | 18 +++++++++++ .../rei/listeners/IMixinContainerScreen.java | 20 ------------- .../rei/listeners/IMixinRecipeBookGui.java | 9 ------ .../shedaniel/rei/listeners/IMixinTabGetter.java | 7 ----- .../me/shedaniel/rei/mixin/GhostSlotsHook.java | 14 +++++++++ .../shedaniel/rei/mixin/MixinContainerScreen.java | 21 +++++-------- .../mixin/MixinCreativePlayerInventoryScreen.java | 26 +++++++--------- .../me/shedaniel/rei/mixin/MixinRecipeBookGui.java | 22 -------------- .../me/shedaniel/rei/mixin/MixinTabGetter.java | 18 +++++++++++ .../me/shedaniel/rei/plugin/DefaultPlugin.java | 12 ++++---- 19 files changed, 160 insertions(+), 132 deletions(-) create mode 100644 src/main/java/me/shedaniel/rei/api/TabGetter.java create mode 100644 src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java delete mode 100644 src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java delete mode 100644 src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java delete mode 100644 src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java create mode 100644 src/main/java/me/shedaniel/rei/mixin/GhostSlotsHook.java delete mode 100644 src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java create mode 100644 src/main/java/me/shedaniel/rei/mixin/MixinTabGetter.java (limited to 'src/main/java/me/shedaniel') diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 8727e4e00..0dd3ed0d2 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -11,7 +11,7 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.client.ClientTickCallback; import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; -import net.fabricmc.loader.FabricLoader; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; @@ -77,7 +77,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali configHelper = new ConfigHelper(); // If pluginloader is not installed, base functionality should still remain - if (!FabricLoader.INSTANCE.getModContainers().stream().map(modContainer -> modContainer.getInfo().getId()).anyMatch(s -> s.equalsIgnoreCase("pluginloader"))) { + if (!FabricLoader.getInstance().isModLoaded("pluginloader")) { 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()); } diff --git a/src/main/java/me/shedaniel/rei/api/TabGetter.java b/src/main/java/me/shedaniel/rei/api/TabGetter.java new file mode 100644 index 000000000..8afe43f30 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/TabGetter.java @@ -0,0 +1,5 @@ +package me.shedaniel.rei.api; + +public interface TabGetter { + int rei_getSelectedTab(); +} diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index 277802679..b91d43f32 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -14,6 +14,8 @@ import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.fabricmc.loader.api.metadata.ModMetadata; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; import net.minecraft.client.gui.Screen; @@ -47,13 +49,8 @@ public class ClientHelper implements ClientModInitializer { String modid = location.getNamespace(); if (modid.equalsIgnoreCase("minecraft")) return "Minecraft"; - return ((net.fabricmc.loader.FabricLoader) FabricLoader.getInstance()).getModContainers().stream().map(modContainer -> { - return modContainer.getInfo(); - }).filter(modInfo -> modInfo.getId().equals(modid) || (modInfo.getName() != null && modInfo.getName().equals(modid))).findFirst().map(modInfo -> { - if (modInfo.getName() != null) - return modInfo.getName(); - return modid; - }).orElse(modid); + // return FabricLoader.getInstance().getAllMods().stream().map(ModContainer::getMetadata).filter(metadata -> metadata.getId().equals(modid)).findFirst().map(ModMetadata::getName).orElse(modid); + return FabricLoader.getInstance().getModContainer(modid).map(ModContainer::getMetadata).map(ModMetadata::getName).orElse(modid); } return ""; } diff --git a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java index 2e5f9b6ea..38f00a804 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java @@ -15,7 +15,6 @@ public class ConfigHelper { private REIConfig config; private boolean craftableOnly; - @SuppressWarnings("deprecated") public ConfigHelper() { this.configFile = new File(FabricLoader.getInstance().getConfigDirectory(), "rei.json"); this.craftableOnly = false; diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java index cf74fafbd..9c41a5abf 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java @@ -3,7 +3,7 @@ package me.shedaniel.rei.client; import com.google.common.collect.Lists; import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.widget.TextFieldWidget; -import me.shedaniel.rei.listeners.IMixinContainerScreen; +import me.shedaniel.rei.listeners.ContainerScreenHooks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerScreen; import net.minecraft.item.ItemStack; @@ -52,8 +52,8 @@ public class GuiHelper { GuiHelper.lastContainerScreen = lastContainerScreen; } - public static IMixinContainerScreen getLastMixinContainerScreen() { - return (IMixinContainerScreen) lastContainerScreen; + public static ContainerScreenHooks getLastContainerScreenHooks() { + return (ContainerScreenHooks) lastContainerScreen; } } diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 92e7e3135..3d8fcd654 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -99,7 +99,7 @@ public class ContainerScreenOverlay extends ScreenComponent { list.add("§c§m" + I18n.translate("text.rei.cheating")); else list.add("§a" + I18n.translate("text.rei.cheating")); - addTooltip(new QueuedTooltip(new Point(mouseX, mouseY), list)); + addTooltip(QueuedTooltip.create(list)); } } }); @@ -121,10 +121,8 @@ public class ContainerScreenOverlay extends ScreenComponent { public void draw(int mouseX, int mouseY, float partialTicks) { text = getGameModeShortText(getCurrentGameMode()); super.draw(mouseX, mouseY, partialTicks); - if (isHighlighted(mouseX, mouseY)) { - List list = Arrays.asList(I18n.translate("text.rei.gamemode_button.tooltip", getGameModeText(getNextGameMode())).split("\n")); - addTooltip(new QueuedTooltip(new Point(mouseX, mouseY), list)); - } + if (isHighlighted(mouseX, mouseY)) + addTooltip(QueuedTooltip.create(I18n.translate("text.rei.gamemode_button.tooltip", getGameModeText(getNextGameMode())).split("\n"))); } }); widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigHelper().getConfig().mirrorItemPanel ? window.getScaledWidth() - 80 : 60, 10, 20, 20, "") { @@ -140,10 +138,8 @@ public class ContainerScreenOverlay extends ScreenComponent { MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); drawTexturedRect(getBounds().x + 3, getBounds().y + 3, getCurrentWeather().getId() * 14, 14, 14, 14); - if (isHighlighted(mouseX, mouseY)) { - List list = Arrays.asList(I18n.translate("text.rei.weather_button.tooltip", getNextWeather().getName()).split("\n")); - addTooltip(new QueuedTooltip(new Point(mouseX, mouseY), list)); - } + if (isHighlighted(mouseX, mouseY)) + addTooltip(QueuedTooltip.create(I18n.translate("text.rei.weather_button.tooltip", getNextWeather().getName()).split("\n"))); } }); } @@ -154,7 +150,7 @@ public class ContainerScreenOverlay extends ScreenComponent { this.text = String.format("%s/%s", page + 1, getTotalPage() + 1); super.draw(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) - GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(new Point(mouseX, mouseY), Arrays.asList(I18n.translate("text.rei.go_back_first_page").split("\n")))); + addTooltip(QueuedTooltip.create(I18n.translate("text.rei.go_back_first_page").split("\n"))); } @Override @@ -260,14 +256,14 @@ public class ContainerScreenOverlay extends ScreenComponent { } private Rectangle getTextFieldArea() { - int widthRemoved = RoughlyEnoughItemsCore.getConfigHelper().getConfig().enableCraftableOnlyButton ? 22 : 0; + int widthRemoved = RoughlyEnoughItemsCore.getConfigHelper().getConfig().enableCraftableOnlyButton ? 22 : 2; if (RoughlyEnoughItemsCore.getConfigHelper().getConfig().sideSearchField) return new Rectangle(rectangle.x + 2, window.getScaledHeight() - 22, rectangle.width - 6 - widthRemoved, 18); if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18); } - return new Rectangle(GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerScreen().rei_getContainerWidth() - widthRemoved, 18); + return new Rectangle(GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastContainerScreenHooks().rei_getContainerWidth() - widthRemoved, 18); } private Rectangle getCraftableToggleArea() { @@ -303,7 +299,7 @@ public class ContainerScreenOverlay extends ScreenComponent { GuiLighting.disable(); Screen currentScreen = MinecraftClient.getInstance().currentScreen; if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated) - QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> MinecraftClient.getInstance().currentScreen.drawTooltip(queuedTooltip.text, queuedTooltip.mouse.x, queuedTooltip.mouse.y)); + QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> MinecraftClient.getInstance().currentScreen.drawTooltip(queuedTooltip.getText(), queuedTooltip.getLocation().x, queuedTooltip.getLocation().y)); QUEUED_TOOLTIPS.clear(); GuiLighting.disable(); } @@ -341,7 +337,7 @@ public class ContainerScreenOverlay extends ScreenComponent { private Rectangle calculateBoundary() { if (!RoughlyEnoughItemsCore.getConfigHelper().getConfig().mirrorItemPanel) { - int startX = GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft() + GuiHelper.getLastMixinContainerScreen().rei_getContainerWidth() + 10; + int startX = GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft() + GuiHelper.getLastContainerScreenHooks().rei_getContainerWidth() + 10; int width = window.getScaledWidth() - startX; if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; @@ -359,8 +355,8 @@ public class ContainerScreenOverlay extends ScreenComponent { return widget.getBounds().x; } if (MinecraftClient.getInstance().player.getRecipeBook().isGuiOpen()) - return GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft() - 147 - 30; - return GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft(); + return GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft() - 147 - 30; + return GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft(); } private int getTotalPage() { @@ -413,8 +409,8 @@ public class ContainerScreenOverlay extends ScreenComponent { } } if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof ContainerScreen) - if (GuiHelper.getLastMixinContainerScreen().rei_getHoveredSlot() != null) - itemStack = GuiHelper.getLastMixinContainerScreen().rei_getHoveredSlot().getStack(); + if (GuiHelper.getLastContainerScreenHooks().rei_getHoveredSlot() != null) + itemStack = GuiHelper.getLastContainerScreenHooks().rei_getHoveredSlot().getStack(); if (itemStack != null && !itemStack.isEmpty()) { if (ClientHelper.RECIPE.matchesKey(int_1, int_2)) return ClientHelper.executeRecipeKeyBind(this, itemStack); diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 6e78cbd4c..541940375 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -21,8 +21,10 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import java.awt.*; -import java.util.*; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; public class RecipeViewingScreen extends Screen { @@ -71,6 +73,11 @@ public class RecipeViewingScreen extends Screen { @Override public boolean keyPressed(int int_1, int int_2, int int_3) { + if (int_1 == 256 && choosePageActivated) { + choosePageActivated = false; + onInitialized(); + return true; + } if ((int_1 == 256 || this.client.options.keyInventory.matchesKey(int_1, int_2)) && this.doesEscapeKeyClose()) { MinecraftClient.getInstance().openScreen(GuiHelper.getLastContainerScreen()); GuiHelper.getLastOverlay().onInitialized(); @@ -158,7 +165,7 @@ public class RecipeViewingScreen extends Screen { this.text = selectedCategory.getCategoryName(); super.draw(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) - GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(new Point(mouseX, mouseY), Arrays.asList(I18n.translate("text.rei.view_all_categories").split("\n")))); + GuiHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n"))); } @Override @@ -173,7 +180,7 @@ public class RecipeViewingScreen extends Screen { this.text = String.format("%d/%d", page + 1, getTotalPages(selectedCategory)); super.draw(mouseX, mouseY, partialTicks); if (isHighlighted(mouseX, mouseY)) - GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(new Point(mouseX, mouseY), Arrays.asList(I18n.translate("text.rei.choose_page").split("\n")))); + GuiHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n"))); } @Override 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 ee84bbab8..d1383c377 100644 --- a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java @@ -238,7 +238,6 @@ public class ConfigScreen extends Screen { public void onInitWidget(TextFieldWidget widget) { widget.setMaxLength(99999); widget.setText(RoughlyEnoughItemsCore.getConfigHelper().getConfig().gamemodeCommand); - widget.setSuggestion(I18n.translate("text.rei.give_command.suggestion")); } @Override @@ -251,6 +250,23 @@ public class ConfigScreen extends Screen { } } })); + entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.weather_command"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { + @Override + public void onInitWidget(TextFieldWidget widget) { + widget.setMaxLength(99999); + widget.setText(RoughlyEnoughItemsCore.getConfigHelper().getConfig().weatherCommand); + } + + @Override + public void onUpdateText(TextFieldWidget button, String text) { + RoughlyEnoughItemsCore.getConfigHelper().getConfig().weatherCommand = text; + try { + RoughlyEnoughItemsCore.getConfigHelper().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + } + })); entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.config.max_recipes_per_page"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() { @Override public void onInitWidget(TextFieldWidget widget) { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java b/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java index 8d6d82796..5f7a689eb 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java @@ -1,18 +1,45 @@ package me.shedaniel.rei.gui.widget; +import com.google.common.collect.Lists; +import me.shedaniel.rei.client.ClientHelper; + import java.awt.*; import java.util.LinkedList; import java.util.List; public class QueuedTooltip { - public Point mouse; - public List text; + private Point location; + private List text; - public QueuedTooltip(Point mouse, List text) { - this.mouse = mouse; + protected QueuedTooltip(Point location, List text) { + this.location = location; this.text = new LinkedList<>(text); } + public static QueuedTooltip create(Point location, List text) { + return new QueuedTooltip(location, text); + } + + public static QueuedTooltip create(Point location, String... text) { + return QueuedTooltip.create(location, Lists.newArrayList(text)); + } + + public static QueuedTooltip create(List text) { + return QueuedTooltip.create(ClientHelper.getMouseLocation(), text); + } + + public static QueuedTooltip create(String... text) { + return QueuedTooltip.create(ClientHelper.getMouseLocation(), text); + } + + public Point getLocation() { + return location; + } + + public List getText() { + return text; + } + } diff --git a/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java b/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java new file mode 100644 index 000000000..33ed1aceb --- /dev/null +++ b/src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java @@ -0,0 +1,18 @@ +package me.shedaniel.rei.listeners; + +import net.minecraft.container.Slot; +import net.minecraft.item.ItemStack; + +public interface ContainerScreenHooks { + + public int rei_getContainerLeft(); + + public int rei_getContainerTop(); + + public int rei_getContainerWidth(); + + public int rei_getContainerHeight(); + + public Slot rei_getHoveredSlot(); + +} diff --git a/src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java b/src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java deleted file mode 100644 index dd14a96ba..000000000 --- a/src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.shedaniel.rei.listeners; - -import net.minecraft.container.Slot; -import net.minecraft.item.ItemStack; - -public interface IMixinContainerScreen { - - public int rei_getContainerLeft(); - - public int rei_getContainerTop(); - - public int rei_getContainerWidth(); - - public int rei_getContainerHeight(); - - public ItemStack rei_getDraggedStack(); - - public Slot rei_getHoveredSlot(); - -} diff --git a/src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java b/src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java deleted file mode 100644 index a26f2dbae..000000000 --- a/src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.shedaniel.rei.listeners; - -import net.minecraft.client.gui.widget.RecipeBookGhostSlots; - -public interface IMixinRecipeBookGui { - - public RecipeBookGhostSlots rei_getGhostSlots(); - -} diff --git a/src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java b/src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java deleted file mode 100644 index eeab65c18..000000000 --- a/src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.shedaniel.rei.listeners; - -public interface IMixinTabGetter { - - public int rei_getSelectedTab(); - -} diff --git a/src/main/java/me/shedaniel/rei/mixin/GhostSlotsHook.java b/src/main/java/me/shedaniel/rei/mixin/GhostSlotsHook.java new file mode 100644 index 000000000..4857c5c40 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/mixin/GhostSlotsHook.java @@ -0,0 +1,14 @@ +package me.shedaniel.rei.mixin; + +import net.minecraft.client.gui.recipebook.RecipeBookGui; +import net.minecraft.client.gui.widget.RecipeBookGhostSlots; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RecipeBookGui.class) +public interface GhostSlotsHook { + + @Accessor("ghostSlots") + RecipeBookGhostSlots rei_getGhostSlots(); + +} diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java b/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java index c2f2114ec..0ba58ae8a 100644 --- a/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java +++ b/src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java @@ -1,10 +1,10 @@ package me.shedaniel.rei.mixin; +import me.shedaniel.rei.api.TabGetter; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.GuiHelper; import me.shedaniel.rei.gui.ContainerScreenOverlay; -import me.shedaniel.rei.listeners.IMixinContainerScreen; -import me.shedaniel.rei.listeners.IMixinTabGetter; +import me.shedaniel.rei.listeners.ContainerScreenHooks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerScreen; import net.minecraft.client.gui.Screen; @@ -20,7 +20,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ContainerScreen.class) -public class MixinContainerScreen extends Screen implements IMixinContainerScreen { +public class MixinContainerScreen extends Screen implements ContainerScreenHooks { @Shadow protected int left; @@ -32,8 +32,6 @@ public class MixinContainerScreen extends Screen implements IMixinContainerScree protected int height; @Shadow protected Slot focusedSlot; - @Shadow - private ItemStack field_2782; @Override public int rei_getContainerLeft() { @@ -58,7 +56,7 @@ public class MixinContainerScreen extends Screen implements IMixinContainerScree @Inject(method = "onInitialized()V", at = @At("RETURN")) protected void onInitialized(CallbackInfo info) { if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) { - IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentScreen; + TabGetter tabGetter = (TabGetter) MinecraftClient.getInstance().currentScreen; if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex()) return; } @@ -69,18 +67,13 @@ public class MixinContainerScreen extends Screen implements IMixinContainerScree @Inject(method = "draw(IIF)V", at = @At("RETURN")) public void draw(int int_1, int int_2, float float_1, CallbackInfo info) { if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) { - IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentScreen; + TabGetter tabGetter = (TabGetter) MinecraftClient.getInstance().currentScreen; if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex()) return; } GuiHelper.getLastOverlay().drawOverlay(int_1, int_2, float_1); } - @Override - public ItemStack rei_getDraggedStack() { - return this.field_2782; - } - @Override public Slot rei_getHoveredSlot() { return focusedSlot; @@ -89,7 +82,7 @@ public class MixinContainerScreen extends Screen implements IMixinContainerScree @Override public boolean mouseScrolled(double double_1) { if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) { - IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentScreen; + TabGetter tabGetter = (TabGetter) MinecraftClient.getInstance().currentScreen; if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex()) return super.mouseScrolled(double_1); } @@ -103,7 +96,7 @@ public class MixinContainerScreen extends Screen implements IMixinContainerScree @Inject(method = "keyPressed(III)Z", at = @At("HEAD"), cancellable = true) public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable ci) { if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) { - IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentScreen; + TabGetter tabGetter = (TabGetter) MinecraftClient.getInstance().currentScreen; if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex()) return; } diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java b/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java index 1cf8b3398..94a6302a5 100644 --- a/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java +++ b/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java @@ -1,7 +1,7 @@ package me.shedaniel.rei.mixin; +import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.GuiHelper; -import me.shedaniel.rei.listeners.IMixinTabGetter; import net.minecraft.client.gui.ingame.AbstractPlayerInventoryScreen; import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen; import net.minecraft.entity.player.PlayerInventory; @@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(CreativePlayerInventoryScreen.class) -public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerInventoryScreen implements IMixinTabGetter { +public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerInventoryScreen { @Shadow private static int selectedTab; @@ -28,15 +28,10 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI @Shadow protected abstract boolean doRenderScrollBar(); - @Override - public int rei_getSelectedTab() { - return selectedTab; - } - @Inject(method = "mouseScrolled", at = @At("HEAD"), cancellable = true) public void mouseScrolled(double amount, CallbackInfoReturnable ci) { - if (!doRenderScrollBar()) - if (super.mouseScrolled(amount)) { + if (!doRenderScrollBar() && selectedTab == ItemGroup.INVENTORY.getIndex()) + if (GuiHelper.isOverlayVisible() && GuiHelper.getLastOverlay().getRectangle().contains(ClientHelper.getMouseLocation()) && GuiHelper.getLastOverlay().mouseScrolled(amount)) { ci.setReturnValue(true); ci.cancel(); } @@ -45,7 +40,7 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable ci) { if (selectedTab == ItemGroup.INVENTORY.getIndex()) - if (super.keyPressed(int_1, int_2, int_3)) { + if (GuiHelper.getLastOverlay().keyPressed(int_1, int_2, int_3)) { ci.setReturnValue(true); ci.cancel(); } @@ -54,7 +49,7 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI @Inject(method = "charTyped", at = @At("HEAD"), cancellable = true) public void charTyped(char char_1, int int_1, CallbackInfoReturnable ci) { if (!this.field_2888 && selectedTab == ItemGroup.INVENTORY.getIndex()) - if (super.charTyped(char_1, int_1)) { + if (GuiHelper.isOverlayVisible() && GuiHelper.getLastOverlay().charTyped(char_1, int_1)) { ci.setReturnValue(true); ci.cancel(); } @@ -62,10 +57,11 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) public void mouseClicked(double i, double j, int k, CallbackInfoReturnable ci) { - if (GuiHelper.getLastOverlay().mouseClicked(i, j, k)) { - ci.setReturnValue(true); - ci.cancel(); - } + if (selectedTab == ItemGroup.INVENTORY.getIndex()) + if (GuiHelper.isOverlayVisible() && GuiHelper.getLastOverlay().mouseClicked(i, j, k)) { + ci.setReturnValue(true); + ci.cancel(); + } } } diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java deleted file mode 100644 index a4a129c1a..000000000 --- a/src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.shedaniel.rei.mixin; - -import me.shedaniel.rei.listeners.IMixinRecipeBookGui; -import net.minecraft.client.gui.recipebook.RecipeBookGui; -import net.minecraft.client.gui.widget.RecipeBookGhostSlots; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(RecipeBookGui.class) -public class MixinRecipeBookGui implements IMixinRecipeBookGui { - - @Shadow - @Final - protected RecipeBookGhostSlots ghostSlots; - - @Override - public RecipeBookGhostSlots rei_getGhostSlots() { - return ghostSlots; - } - -} diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinTabGetter.java b/src/main/java/me/shedaniel/rei/mixin/MixinTabGetter.java new file mode 100644 index 000000000..e62496726 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/mixin/MixinTabGetter.java @@ -0,0 +1,18 @@ +package me.shedaniel.rei.mixin; + +import me.shedaniel.rei.api.TabGetter; +import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(CreativePlayerInventoryScreen.class) +public class MixinTabGetter implements TabGetter { + + @Shadow private static int selectedTab; + + @Override + public int rei_getSelectedTab() { + return selectedTab; + } + +} diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java index 0fd543ef9..c37150e59 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java @@ -3,7 +3,7 @@ package me.shedaniel.rei.plugin; import com.google.common.collect.Lists; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.*; -import me.shedaniel.rei.listeners.IMixinRecipeBookGui; +import me.shedaniel.rei.mixin.GhostSlotsHook; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.container.BlastFurnaceScreen; @@ -137,9 +137,9 @@ public class DefaultPlugin implements REIPlugin { if (!recipe.getRecipe().isPresent()) return false; if (screen.getClass().isAssignableFrom(CraftingTableScreen.class)) - ((IMixinRecipeBookGui) (((CraftingTableScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); + ((GhostSlotsHook) (((CraftingTableScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); else if (screen.getClass().isAssignableFrom(PlayerInventoryScreen.class)) - ((IMixinRecipeBookGui) (((PlayerInventoryScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); + ((GhostSlotsHook) (((PlayerInventoryScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); else return false; MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.isShiftPressed()); @@ -162,7 +162,7 @@ public class DefaultPlugin implements REIPlugin { if (!recipe.getRecipe().isPresent()) return false; if (screen instanceof FurnaceScreen) - ((IMixinRecipeBookGui) (((FurnaceScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); + ((GhostSlotsHook) (((FurnaceScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); else return false; MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.isShiftPressed()); @@ -185,7 +185,7 @@ public class DefaultPlugin implements REIPlugin { if (!recipe.getRecipe().isPresent()) return false; if (screen instanceof SmokerScreen) - ((IMixinRecipeBookGui) (((SmokerScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); + ((GhostSlotsHook) (((SmokerScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); else return false; MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.isShiftPressed()); @@ -213,7 +213,7 @@ public class DefaultPlugin implements REIPlugin { if (!recipe.getRecipe().isPresent()) return false; if (screen instanceof BlastFurnaceScreen) - ((IMixinRecipeBookGui) (((BlastFurnaceScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); + ((GhostSlotsHook) (((BlastFurnaceScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); else return false; MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.isShiftPressed()); -- cgit