aboutsummaryrefslogtreecommitdiff
path: root/api/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-06-20 23:20:05 +0800
committershedaniel <daniel@shedaniel.me>2021-06-20 23:20:05 +0800
commit2cc2cfa70062efac58335d62ad8e47105c15fdd7 (patch)
treeb60bbd87e913080c95f82a0b2d38a8da2a89c332 /api/src
parent06c695df2c1ae92ddd71dfa23491d7554387156c (diff)
downloadRoughlyEnoughItems-2cc2cfa70062efac58335d62ad8e47105c15fdd7.tar.gz
RoughlyEnoughItems-2cc2cfa70062efac58335d62ad8e47105c15fdd7.tar.bz2
RoughlyEnoughItems-2cc2cfa70062efac58335d62ad8e47105c15fdd7.zip
Properly implement tooltip rendering for bundles
Diffstat (limited to 'api/src')
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java3
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java76
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java9
3 files changed, 85 insertions, 3 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java b/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java
index b91ee13fe..4df94598e 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/ClientHelper.java
@@ -24,6 +24,7 @@
package me.shedaniel.rei.api.client;
import me.shedaniel.rei.api.client.config.ConfigManager;
+import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.FormattingUtils;
@@ -142,6 +143,8 @@ public interface ClientHelper {
return components;
}
+ void appendModIdToTooltips(Tooltip components, String modId);
+
/**
* Gets the mod from an identifier
*
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java
index 16d329002..1971bb7d1 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java
@@ -26,18 +26,31 @@ package me.shedaniel.rei.api.client.gui.widgets;
import dev.architectury.utils.EnvExecutor;
import me.shedaniel.math.Point;
import me.shedaniel.rei.api.client.REIRuntime;
+import me.shedaniel.rei.api.common.util.CollectionUtils;
import me.shedaniel.rei.impl.ClientInternals;
import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.network.chat.Component;
+import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+@Environment(EnvType.CLIENT)
public interface Tooltip {
+ static Tooltip.Entry entry(Component text) {
+ return ClientInternals.createTooltipEntry(text);
+ }
+
+ static Tooltip.Entry entry(ClientTooltipComponent text) {
+ return ClientInternals.createTooltipEntry(text);
+ }
+
static Tooltip create(@Nullable Point point, Collection<Component> texts) {
- return ClientInternals.createTooltip(point, texts);
+ return from(point, CollectionUtils.map(texts, Tooltip::entry));
}
static Tooltip create(@Nullable Point point, Component... texts) {
@@ -52,13 +65,74 @@ public interface Tooltip {
return create(Arrays.asList(texts));
}
+ static Tooltip from(@Nullable Point point, Collection<Entry> entries) {
+ return ClientInternals.createTooltip(point, entries);
+ }
+
+ static Tooltip from(@Nullable Point point, Entry... entries) {
+ return from(point, Arrays.asList(entries));
+ }
+
+ static Tooltip from(Collection<Entry> entries) {
+ return from(null, entries);
+ }
+
+ static Tooltip from(Entry... entries) {
+ return from(Arrays.asList(entries));
+ }
+
int getX();
int getY();
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
List<Component> getText();
+ List<Entry> entries();
+
+ Tooltip add(ClientTooltipComponent component);
+
+ Tooltip add(Component text);
+
+ default Tooltip addAll(ClientTooltipComponent... components) {
+ for (ClientTooltipComponent component : components) {
+ add(component);
+ }
+ return this;
+ }
+
+ default Tooltip addAll(Component... text) {
+ for (Component component : text) {
+ add(component);
+ }
+ return this;
+ }
+
+ default Tooltip addAllComponents(Iterable<ClientTooltipComponent> text) {
+ for (ClientTooltipComponent component : text) {
+ add(component);
+ }
+ return this;
+ }
+
+ default Tooltip addAllTexts(Iterable<Component> text) {
+ for (Component component : text) {
+ add(component);
+ }
+ return this;
+ }
+
default void queue() {
EnvExecutor.runInEnv(EnvType.CLIENT, () -> () -> REIRuntime.getInstance().queueTooltip(this));
}
+
+ @ApiStatus.NonExtendable
+ interface Entry {
+ boolean isText();
+
+ Component getAsText();
+
+ ClientTooltipComponent getAsComponent();
+ }
}
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 e7d550c2a..5df95263b 100644
--- a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
+++ b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java
@@ -60,7 +60,8 @@ public final class ClientInternals {
private static BiFunction<Supplier<FavoriteEntry>, Supplier<CompoundTag>, FavoriteEntry> delegateFavoriteEntry = (supplier, toJson) -> throwNotSetup();
private static Function<CompoundTag, FavoriteEntry> favoriteEntryFromJson = (object) -> throwNotSetup();
private static Function<Boolean, ClickArea.Result> clickAreaHandlerResult = (result) -> throwNotSetup();
- private static BiFunction<@Nullable Point, Collection<Component>, Tooltip> tooltipProvider = (point, texts) -> throwNotSetup();
+ private static BiFunction<@Nullable Point, Collection<Tooltip.Entry>, Tooltip> tooltipProvider = (point, texts) -> 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;
@@ -113,10 +114,14 @@ public final class ClientInternals {
return clickAreaHandlerResult.apply(applicable);
}
- public static Tooltip createTooltip(@Nullable Point point, Collection<Component> texts) {
+ public static Tooltip createTooltip(@Nullable Point point, Collection<Tooltip.Entry> texts) {
return tooltipProvider.apply(point, texts);
}
+ public static Tooltip.Entry createTooltipEntry(Object component) {
+ return tooltipEntryProvider.apply(component);
+ }
+
public static FavoriteEntry delegateFavoriteEntry(Supplier<FavoriteEntry> supplier, Supplier<CompoundTag> toJoin) {
return delegateFavoriteEntry.apply(supplier, toJoin);
}