diff options
Diffstat (limited to 'api/src/main/java')
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); } |
