diff options
Diffstat (limited to 'runtime/src/main/java/me')
7 files changed, 44 insertions, 6 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java index 7d60bc638..5d4203689 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java @@ -103,6 +103,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.crafting.Ingredient; +import org.apache.commons.lang3.function.TriFunction; import org.apache.commons.lang3.mutable.MutableLong; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -146,7 +147,7 @@ public class RoughlyEnoughItemsCoreClient { return entryType.read(object); }, "favoriteEntryFromJson"); ClientInternals.attachInstance((BiFunction<@Nullable Point, Collection<Tooltip.Entry>, Tooltip>) QueuedTooltip::impl, "tooltipProvider"); - ClientInternals.attachInstance((BiFunction<Point, @Nullable TooltipFlag, TooltipContext>) TooltipContextImpl::new, "tooltipContextProvider"); + ClientInternals.attachInstance((TriFunction<Point, @Nullable TooltipFlag, Boolean, TooltipContext>) TooltipContextImpl::new, "tooltipContextProvider"); ClientInternals.attachInstance((Function<Object, Tooltip.Entry>) QueuedTooltip.TooltipEntryImpl::new, "tooltipEntryProvider"); ClientInternals.attachInstance((Function<@Nullable Boolean, ClickArea.Result>) successful -> new ClickArea.Result() { private List<CategoryIdentifier<?>> categories = Lists.newArrayList(); 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 919a2c1c6..a5535f6f0 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 @@ -57,6 +57,19 @@ public class RenderingEntryDefinition { } return super.asFormattedText(entry, value); } + + @Override + public Component asFormattedText(EntryStack<Renderer> entry, Renderer value, TooltipContext context) { + Tooltip tooltip = value.getTooltip(context); + if (tooltip != null) { + for (Tooltip.Entry e : tooltip.entries()) { + if (e.isText()) { + return e.getAsText(); + } + } + } + return super.asFormattedText(entry, value, context); + } }; private static <T> T throwRendering() { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TooltipContextImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TooltipContextImpl.java index 0b91481ac..3f8504968 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TooltipContextImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TooltipContextImpl.java @@ -35,10 +35,12 @@ public class TooltipContextImpl implements TooltipContext { private final Point point; @Nullable private final TooltipFlag flag; + private final boolean isSearch; - public TooltipContextImpl(Point point, @Nullable TooltipFlag flag) { + public TooltipContextImpl(Point point, @Nullable TooltipFlag flag, boolean isSearch) { this.point = Objects.requireNonNull(point); this.flag = flag; + this.isSearch = isSearch; } @Override @@ -51,4 +53,9 @@ public class TooltipContextImpl implements TooltipContext { public Point getPoint() { return point; } + + @Override + public boolean isSearch() { + return isSearch; + } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TextArgumentType.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TextArgumentType.java index 1342a2b0c..8d05ea91b 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TextArgumentType.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TextArgumentType.java @@ -23,11 +23,15 @@ package me.shedaniel.rei.impl.client.search.argument.type; +import me.shedaniel.math.Point; import me.shedaniel.rei.api.client.gui.config.SearchMode; +import me.shedaniel.rei.api.client.gui.widgets.TooltipContext; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.FormattingUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.util.Unit; +import net.minecraft.world.item.TooltipFlag; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -37,6 +41,7 @@ import java.util.Locale; @Environment(EnvType.CLIENT) public final class TextArgumentType extends ArgumentType<Unit, String> { public static final TextArgumentType INSTANCE = new TextArgumentType(); + private static final TooltipContext CONTEXT = TooltipContext.of(new Point(), TooltipFlag.Default.NORMAL, true); @Override public String getName() { @@ -56,7 +61,7 @@ public final class TextArgumentType extends ArgumentType<Unit, String> { @Override public String cacheData(EntryStack<?> stack) { - return stack.asFormatStrippedText().getString().toLowerCase(Locale.ROOT); + return FormattingUtils.stripFormatting(stack.asFormattedText(CONTEXT).getString()).toLowerCase(Locale.ROOT); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TooltipArgumentType.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TooltipArgumentType.java index 4557ddeae..4dcc0f00f 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TooltipArgumentType.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TooltipArgumentType.java @@ -46,7 +46,7 @@ import java.util.StringJoiner; @Environment(EnvType.CLIENT) public final class TooltipArgumentType extends ArgumentType<Unit, String> { public static final TooltipArgumentType INSTANCE = new TooltipArgumentType(); - private static final TooltipContext CONTEXT = TooltipContext.of(new Point(), TooltipFlag.Default.NORMAL); + private static final TooltipContext CONTEXT = TooltipContext.of(new Point(), TooltipFlag.Default.NORMAL, true); public static String INVALID = "INVALID_PIECE_OF_TOOLTIP_I_DONT_THINK_PEOPLE_WILL_EXACTLY_HAVE_THIS_REI_REI_REI"; private static final Style STYLE = Style.EMPTY.withColor(TextColor.fromRgb(0xffe0ad)); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java index 66aff5e0d..24994570e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java @@ -257,7 +257,12 @@ public abstract class AbstractEntryStack<A> implements EntryStack<A>, Renderer { @Override public Component asFormattedText() { - return getDefinition().asFormattedText(this, getValue()); + return getDefinition().asFormattedText(this, getValue(), TooltipContext.of()); + } + + @Override + public Component asFormattedText(TooltipContext context) { + return getDefinition().asFormattedText(this, getValue(), context); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java index 7728a55a2..06d4f297d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java @@ -188,10 +188,16 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer @Override public Component asFormattedText(EntryStack<ItemStack> entry, ItemStack value) { + return asFormattedText(entry, value, TooltipContext.of()); + } + + @Override + public Component asFormattedText(EntryStack<ItemStack> entry, ItemStack value, TooltipContext context) { if (!SEARCH_BLACKLISTED.contains(value.getItem())) try { return value.getHoverName(); } catch (Throwable e) { + if (context != null && context.isSearch()) throw e; e.printStackTrace(); SEARCH_BLACKLISTED.add(value.getItem()); } @@ -214,10 +220,11 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer try { return value.getTooltipLines(Minecraft.getInstance().player, context.getFlag()); } catch (Throwable e) { + if (context.isSearch()) throw e; e.printStackTrace(); SEARCH_BLACKLISTED.add(value.getItem()); } - return Lists.newArrayList(asFormattedText(entry, value)); + return Lists.newArrayList(asFormattedText(entry, value, context)); } @Override |
