From 12dcd4808de024c11a1d30104d82b704a3110ac5 Mon Sep 17 00:00:00 2001 From: quat1024 Date: Mon, 1 Jan 2024 21:53:07 -0500 Subject: [PATCH] Clean MiniInventoryButton API --- .../screen/widgets/MiniInventoryButton.java | 45 ++++++++++--------- .../module/EasyTransferingModule.java | 8 +++- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/violetmoon/quark/content/management/client/screen/widgets/MiniInventoryButton.java b/src/main/java/org/violetmoon/quark/content/management/client/screen/widgets/MiniInventoryButton.java index 8f073fb804..51888e3602 100644 --- a/src/main/java/org/violetmoon/quark/content/management/client/screen/widgets/MiniInventoryButton.java +++ b/src/main/java/org/violetmoon/quark/content/management/client/screen/widgets/MiniInventoryButton.java @@ -9,7 +9,6 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.recipebook.RecipeUpdateListener; import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -18,22 +17,32 @@ import org.violetmoon.quark.base.handler.MiscUtil; import org.violetmoon.zeta.util.BooleanSuppliers; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -import java.util.stream.Collectors; +import java.util.function.Supplier; public class MiniInventoryButton extends Button { - private final Consumer> tooltip; + private final Supplier> tooltip; + private final int type; private final AbstractContainerScreen parent; private final int startX; private BooleanSupplier shiftTexture = BooleanSuppliers.FALSE; - public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, int y, Consumer> tooltip, OnPress onPress) { + @Deprecated(forRemoval = true) //just bincompat for the Consumer-style API instead of the Supplier, in case anyones adding chest buttons (??) + public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, int y, Consumer> legacyTooltip, OnPress onPress) { + this(parent, type, x, y, () -> { + List toConsume = new ArrayList<>(); + legacyTooltip.accept(toConsume); + return toConsume.stream().map(z -> (Component) Component.translatable(z)).toList(); + }, onPress); + } + + public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, int y, Supplier> tooltip, OnPress onPress) { super(new Button.Builder(Component.literal(""), onPress).size(10, 10).pos(parent.getGuiLeft() + x, parent.getGuiTop() + y)); this.parent = parent; this.type = type; @@ -41,8 +50,12 @@ public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, i this.startX = x; } - public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, int y, String tooltip, OnPress onPress) { - this(parent, type, x, y, (t) -> t.add(I18n.get(tooltip)), onPress); + public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, int y, Component tooltip, OnPress onPress) { + this(parent, type, x, y, () -> List.of(tooltip), onPress); + } + + public MiniInventoryButton(AbstractContainerScreen parent, int type, int x, int y, String tooltipKey, OnPress onPress) { + this(parent, type, x, y, Component.translatable(tooltipKey), onPress); } public MiniInventoryButton setTextureShift(BooleanSupplier func) { @@ -74,26 +87,16 @@ public void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouse guiGraphics.blit(MiscUtil.GENERAL_ICONS, getX(), getY(), u, v, width, height); - //TODO: change API to take Components so this awkward stream/map dance isn't needed - //Even better TODO: change API to use vanilla setTooltip + //we could use vanilla setTooltip, except the tooltip can change (hence the supplier) if(isHovered) - guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, local$getToolTip().stream().map(Component::literal).collect(Collectors.toList()), mouseX, mouseY); + guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, tooltip.get(), mouseX, mouseY); } @NotNull @Override protected MutableComponent createNarrationMessage() { - List tooltip = local$getToolTip(); - return tooltip.isEmpty() ? Component.literal("") : Component.translatable("gui.narrate.button", local$getToolTip().get(0)); - } - - /* - * Prefixed with local$ to prevent clashing - */ - public List local$getToolTip() { - List list = new LinkedList<>(); - tooltip.accept(list); - return list; + List resolvedTooltip = this.tooltip.get(); + return resolvedTooltip.isEmpty() ? Component.literal("") : Component.translatable("gui.narrate.button", resolvedTooltip.get(0)); } } diff --git a/src/main/java/org/violetmoon/quark/content/management/module/EasyTransferingModule.java b/src/main/java/org/violetmoon/quark/content/management/module/EasyTransferingModule.java index 3cd7d892b1..a6dfc4fa23 100644 --- a/src/main/java/org/violetmoon/quark/content/management/module/EasyTransferingModule.java +++ b/src/main/java/org/violetmoon/quark/content/management/module/EasyTransferingModule.java @@ -1,8 +1,11 @@ package org.violetmoon.quark.content.management.module; +import java.util.List; + import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.language.I18n; +import net.minecraft.network.chat.Component; import org.violetmoon.quark.base.QuarkClient; import org.violetmoon.quark.base.client.handler.InventoryButtonHandler; import org.violetmoon.quark.base.client.handler.InventoryButtonHandler.ButtonTargetType; @@ -39,11 +42,14 @@ public void registerKeybinds(ZKeyMapping event) { } private void addButton(ZKeyMapping event, int priority, String name, boolean restock) { + List shiftedTooltip = List.of(Component.translatable("quark.gui.button." + name + "_filtered")); + List regularTooltip = List.of(Component.translatable("quark.gui.button." + name)); + InventoryButtonHandler.addButtonProvider(event, this, ButtonTargetType.CONTAINER_PLAYER_INVENTORY, priority, "quark.keybind.transfer_" + name, (screen) -> QuarkClient.ZETA_CLIENT.sendToServer(new InventoryTransferMessage(Screen.hasShiftDown(), restock)), (parent, x, y) -> new MiniInventoryButton(parent, priority, x, y, - (t) -> t.add(I18n.get("quark.gui.button." + name + (Screen.hasShiftDown() ? "_filtered" : ""))), + () -> Screen.hasShiftDown() ? shiftedTooltip : regularTooltip, (b) -> QuarkClient.ZETA_CLIENT.sendToServer(new InventoryTransferMessage(Screen.hasShiftDown(), restock))) .setTextureShift(Screen::hasShiftDown), null);