aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java12
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java5
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/util/TextRepresentable.java5
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TooltipContextImpl.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TextArgumentType.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TooltipArgumentType.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java9
11 files changed, 69 insertions, 10 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java
index 7bc2ecd15..598bbc292 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipContext.java
@@ -35,12 +35,20 @@ import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
@ApiStatus.NonExtendable
public interface TooltipContext {
+ static TooltipContext of() {
+ return TooltipContext.of(new Point());
+ }
+
static TooltipContext of(Point point) {
return TooltipContext.of(point, null);
}
static TooltipContext of(Point point, @Nullable TooltipFlag flag) {
- return ClientInternals.createTooltipContext(point, flag);
+ return TooltipContext.of(point, flag, false);
+ }
+
+ static TooltipContext of(Point point, @Nullable TooltipFlag flag, boolean isSearch) {
+ return ClientInternals.createTooltipContext(point, flag, isSearch);
}
static TooltipContext ofMouse() {
@@ -50,4 +58,6 @@ public interface TooltipContext {
TooltipFlag getFlag();
Point getPoint();
+
+ boolean isSearch();
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java
index d2e3e62e5..e6a6e112e 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java
@@ -24,6 +24,7 @@
package me.shedaniel.rei.api.common.entry.type;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
+import me.shedaniel.rei.api.client.gui.widgets.TooltipContext;
import me.shedaniel.rei.api.common.entry.EntrySerializer;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
@@ -168,6 +169,10 @@ public interface EntryDefinition<T> {
Component asFormattedText(EntryStack<T> entry, T value);
+ default Component asFormattedText(EntryStack<T> entry, T value, TooltipContext context) {
+ return asFormattedText(entry, value);
+ }
+
/**
* Returns a stream of {@link TagKey} for an entry.
* It is not guaranteed that the stream is ordered, or that the {@link TagKey}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/util/TextRepresentable.java b/api/src/main/java/me/shedaniel/rei/api/common/util/TextRepresentable.java
index 23f96182e..a2e7fa86c 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/util/TextRepresentable.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/util/TextRepresentable.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.api.common.util;
+import me.shedaniel.rei.api.client.gui.widgets.TooltipContext;
import net.minecraft.network.chat.Component;
/**
@@ -33,6 +34,10 @@ public interface TextRepresentable {
return Component.empty();
}
+ default Component asFormattedText(TooltipContext context) {
+ return asFormattedText();
+ }
+
default Component asFormatStrippedText() {
return Component.literal(FormattingUtils.stripFormatting(asFormattedText().getString()));
}
diff --git a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
index 10b29150f..bdf2cbefa 100644
--- a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
+++ b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
@@ -47,6 +47,7 @@ import net.minecraft.network.chat.FormattedText;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.TooltipFlag;
+import org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@@ -70,7 +71,7 @@ public final class ClientInternals {
private static Function<Boolean, ClickArea.Result> clickAreaHandlerResult = (result) -> throwNotSetup();
private static BiConsumer<List<ClientTooltipComponent>, TooltipComponent> clientTooltipComponentProvider = (tooltip, result) -> throwNotSetup();
private static BiFunction<@Nullable Point, Collection<Tooltip.Entry>, Tooltip> tooltipProvider = (point, texts) -> throwNotSetup();
- private static BiFunction<Point, @Nullable TooltipFlag, TooltipContext> tooltipContextProvider = (point, texts) -> throwNotSetup();
+ private static TriFunction<Point, @Nullable TooltipFlag, Boolean, TooltipContext> tooltipContextProvider = (point, texts, search) -> throwNotSetup();
private static Function<Object, Tooltip.Entry> tooltipEntryProvider = (component) -> throwNotSetup();
private static Supplier<List<String>> jeiCompatMods = ClientInternals::throwNotSetup;
private static Supplier<Object> builtinClientPlugin = ClientInternals::throwNotSetup;
@@ -132,8 +133,8 @@ public final class ClientInternals {
return tooltipProvider.apply(point, texts);
}
- public static TooltipContext createTooltipContext(Point point, @Nullable TooltipFlag flag) {
- return tooltipContextProvider.apply(point, flag);
+ public static TooltipContext createTooltipContext(Point point, @Nullable TooltipFlag flag, boolean isSearch) {
+ return tooltipContextProvider.apply(point, flag, isSearch);
}
public static Tooltip.Entry createTooltipEntry(Object component) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
index dab08c264..09fd38d66 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
@@ -100,6 +100,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;
@@ -143,7 +144,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 20b0c9a5b..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
@@ -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 b049ee893..f7d0e771f 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
@@ -187,10 +187,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());
}
@@ -213,10 +219,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