Skip to content

Commit

Permalink
Clean MiniInventoryButton API
Browse files Browse the repository at this point in the history
  • Loading branch information
quat1024 committed Jan 2, 2024
1 parent 9784590 commit 12dcd48
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -18,31 +17,45 @@
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<List<String>> tooltip;
private final Supplier<List<Component>> 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<List<String>> 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<List<String>> legacyTooltip, OnPress onPress) {
this(parent, type, x, y, () -> {
List<String> 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<List<Component>> 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;
this.tooltip = tooltip;
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) {
Expand Down Expand Up @@ -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<String> 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<String> local$getToolTip() {
List<String> list = new LinkedList<>();
tooltip.accept(list);
return list;
List<Component> resolvedTooltip = this.tooltip.get();
return resolvedTooltip.isEmpty() ? Component.literal("") : Component.translatable("gui.narrate.button", resolvedTooltip.get(0));
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -39,11 +42,14 @@ public void registerKeybinds(ZKeyMapping event) {
}

private void addButton(ZKeyMapping event, int priority, String name, boolean restock) {
List<Component> shiftedTooltip = List.of(Component.translatable("quark.gui.button." + name + "_filtered"));
List<Component> 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);
Expand Down

0 comments on commit 12dcd48

Please sign in to comment.