diff options
3 files changed, 35 insertions, 4 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java index 342df8719..24296cfaa 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java @@ -32,10 +32,13 @@ import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.REIRuntime; +import me.shedaniel.rei.api.client.gui.AbstractRenderer; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.widgets.*; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; +import me.shedaniel.rei.api.client.util.ClientEntryStacks; import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.plugin.common.BuiltinPlugin; @@ -43,15 +46,19 @@ import me.shedaniel.rei.plugin.common.displays.tag.DefaultTagDisplay; import me.shedaniel.rei.plugin.common.displays.tag.TagNode; import me.shedaniel.rei.plugin.common.displays.tag.TagNodes; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Function; public class DefaultTagCategory implements DisplayCategory<DefaultTagDisplay<?, ?>> { @Override @@ -127,7 +134,30 @@ public class DefaultTagCategory implements DisplayCategory<DefaultTagDisplay<?, } else { tagNode[0] = dataResult.result().get(); //noinspection rawtypes - delegate[0] = Widgets.overflowed(overflowBounds, Widgets.padded(16, new TagTreeWidget(tagNode[0], display.getMapper()))); + Function<? extends Holder<?>, ? extends EntryStack<?>> displayMapper = display.getMapper(); + Function<Holder<?>, EntryStack<?>> mapper = holder -> { + EntryStack<?> stack = ((Function<Holder<?>, EntryStack<?>>) displayMapper).apply(holder); + if (stack.isEmpty()) { + return ClientEntryStacks.of(new AbstractRenderer() { + @Override + public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) { + Minecraft instance = Minecraft.getInstance(); + Font font = instance.font; + String text = "?"; + int width = font.width(text); + font.draw(matrices, text, bounds.getCenterX() - width / 2f + 0.2f, bounds.getCenterY() - font.lineHeight / 2f + 1f, REIRuntime.getInstance().isDarkThemeEnabled() ? -4473925 : -12566464); + } + + @Override + @Nullable + public Tooltip getTooltip(TooltipContext context) { + return Tooltip.create(context.getPoint(), new TextComponent(holder.unwrapKey().map(key -> key.location().toString()).orElse("null"))); + } + }); + } + return stack; + }; + delegate[0] = Widgets.overflowed(overflowBounds, Widgets.padded(16, new TagTreeWidget(tagNode[0], mapper))); } }); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java index a5535f6f0..8936f4d61 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java @@ -87,7 +87,7 @@ public class RenderingEntryDefinition { @Override @Nullable public Tooltip getTooltip(EntryStack<Renderer> entry, TooltipContext context) { - return entry.getValue().getTooltip(context.getPoint()); + return entry.getValue().getTooltip(context); } } } 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 32a460842..a44eeef7c 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 @@ -43,6 +43,7 @@ import me.shedaniel.rei.api.client.gui.drag.DraggingContext; 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.TooltipContext; import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; import me.shedaniel.rei.api.client.registry.transfer.TransferHandler; @@ -405,7 +406,7 @@ 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)); + Tooltip tooltip = getCurrentTooltip(TooltipContext.ofMouse().getPoint()); if (tooltip != null) { tooltip.queue(); } @@ -416,7 +417,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { @Override @Nullable public Tooltip getCurrentTooltip(Point point) { - Tooltip tooltip = getCurrentEntry().getTooltip(point); + Tooltip tooltip = getCurrentEntry().getTooltip(TooltipContext.of(point)); if (tooltip != null && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { boolean exists = getTransferHandler(false) != null; |
