diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-06-20 23:20:05 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-06-20 23:20:05 +0800 |
| commit | 2cc2cfa70062efac58335d62ad8e47105c15fdd7 (patch) | |
| tree | b60bbd87e913080c95f82a0b2d38a8da2a89c332 /api/src/main/java/me | |
| parent | 06c695df2c1ae92ddd71dfa23491d7554387156c (diff) | |
| download | RoughlyEnoughItems-2cc2cfa70062efac58335d62ad8e47105c15fdd7.tar.gz RoughlyEnoughItems-2cc2cfa70062efac58335d62ad8e47105c15fdd7.tar.bz2 RoughlyEnoughItems-2cc2cfa70062efac58335d62ad8e47105c15fdd7.zip | |
Properly implement tooltip rendering for bundles
Diffstat (limited to 'api/src/main/java/me')
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); } |
