diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-06-09 16:45:30 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-05-29 20:54:09 +0800 |
| commit | ab3c19e02c5a2636ba7aba7ada84958d89eb168a (patch) | |
| tree | 4a734e98239d643ea8cf2a724c197070b94e34fc /runtime/src/main/java | |
| parent | 57d7ccd27ec59e68876ff111311d8b06a89e2947 (diff) | |
| download | RoughlyEnoughItems-ab3c19e02c5a2636ba7aba7ada84958d89eb168a.tar.gz RoughlyEnoughItems-ab3c19e02c5a2636ba7aba7ada84958d89eb168a.tar.bz2 RoughlyEnoughItems-ab3c19e02c5a2636ba7aba7ada84958d89eb168a.zip | |
Add accepted stacks to the tooltip
Diffstat (limited to 'runtime/src/main/java')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java | 23 | ||||
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java | 46 |
2 files changed, 55 insertions, 14 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java index 5412a8a8e..8d994e664 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java @@ -28,6 +28,7 @@ import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.gui.widgets.Slot; +import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; @@ -43,10 +44,12 @@ import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.impl.client.ClientHelperImpl; import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; import me.shedaniel.rei.impl.display.DisplaySpec; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.chat.NarratorChatListener; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.tags.TagCollection; @@ -55,6 +58,7 @@ import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.function.UnaryOperator; public abstract class AbstractDisplayViewingScreen extends Screen implements DisplayScreen { protected final Map<DisplayCategory<?>, List<DisplaySpec>> categoryMap; @@ -185,6 +189,8 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis TagContainer tags = Minecraft.getInstance().getConnection().getTags(); outer: for (EntryWidget widget : Widgets.<EntryWidget>walk(widgets, EntryWidget.class::isInstance)) { + if (widget.getNoticeMark() != EntryWidget.INPUT) continue; + addCyclingTooltip(widget); widget.removeTagMatch = false; if (widget.getEntries().size() <= 1) continue; EntryType<?> type = null; @@ -211,4 +217,21 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis } } } + + private static final int MAX_WIDTH = 200; + + private void addCyclingTooltip(EntryWidget widget) { + class TooltipProcessor implements UnaryOperator<Tooltip> { + @Override + public Tooltip apply(Tooltip tooltip) { + if (widget.getEntries().size() > 1) { + tooltip.add(new TranslatableComponent("text.rei.tag_accept", widget.tagMatch.toString()) + .withStyle(ChatFormatting.GRAY)); + } + return tooltip; + } + } + + widget.tooltipProcessor(new TooltipProcessor()); + } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index 91aecaa12..e902711c8 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java @@ -31,8 +31,6 @@ import me.shedaniel.clothconfig2.api.animator.NumberAnimator; import me.shedaniel.clothconfig2.api.animator.ValueAnimator; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.math.impl.PointHelper; -import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; @@ -74,6 +72,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -93,6 +92,8 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { protected boolean wasClicked = false; private Rectangle bounds; private List<EntryStack<?>> entryStacks; + @Nullable + private Set<UnaryOperator<Tooltip>> tooltipProcessors; public ResourceLocation tagMatch; public boolean removeTagMatch = true; @@ -395,18 +396,6 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { protected void queueTooltip(PoseStack matrices, int mouseX, int mouseY, float delta) { Tooltip tooltip = getCurrentTooltip(new Point(mouseX, mouseY)); if (tooltip != null) { - if (interactableFavorites && ConfigObject.getInstance().doDisplayFavoritesTooltip() && !ConfigObject.getInstance().getFavoriteKeyCode().isUnknown()) { - String name = ConfigObject.getInstance().getFavoriteKeyCode().getLocalizedName().getString(); - if (reverseFavoritesAction()) - tooltip.addAllTexts(Stream.of(I18n.get("text.rei.remove_favorites_tooltip", name).split("\n")) - .map(TextComponent::new).collect(Collectors.toList())); - else - tooltip.addAllTexts(Stream.of(I18n.get("text.rei.favorites_tooltip", name).split("\n")) - .map(TextComponent::new).collect(Collectors.toList())); - } - if (tagMatch != null) { - tooltip.add(new TranslatableComponent("text.rei.tag_match", tagMatch.toString()).withStyle(ChatFormatting.GRAY)); - } tooltip.queue(); } } @@ -423,6 +412,24 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { tooltip.add(new TranslatableComponent("text.auto_craft.move_items.tooltip").withStyle(ChatFormatting.YELLOW)); } + if (tooltip != null) { + if (interactableFavorites && ConfigObject.getInstance().doDisplayFavoritesTooltip() && !ConfigObject.getInstance().getFavoriteKeyCode().isUnknown()) { + String name = ConfigObject.getInstance().getFavoriteKeyCode().getLocalizedName().getString(); + if (reverseFavoritesAction()) + tooltip.addAllTexts(Stream.of(I18n.get("text.rei.remove_favorites_tooltip", name).split("\n")) + .map(TextComponent::new).collect(Collectors.toList())); + else + tooltip.addAllTexts(Stream.of(I18n.get("text.rei.favorites_tooltip", name).split("\n")) + .map(TextComponent::new).collect(Collectors.toList())); + } + + if (tooltipProcessors != null) { + for (UnaryOperator<Tooltip> processor : tooltipProcessors) { + tooltip = processor.apply(tooltip); + } + } + } + return tooltip; } @@ -455,6 +462,17 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { return b; } + public void tooltipProcessor(UnaryOperator<Tooltip> operator) { + if (tooltipProcessors == null) { + tooltipProcessors = Collections.singleton(operator); + } else { + if (!(tooltipProcessors instanceof LinkedHashSet)) { + tooltipProcessors = new LinkedHashSet<>(tooltipProcessors); + } + tooltipProcessors.add(operator); + } + } + @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (containsMouse(mouseX, mouseY)) |
