|
| 1 | +package net.darkhax.bookshelf.api.util; |
| 2 | + |
| 3 | +import net.darkhax.bookshelf.mixin.entity.AccessorEntity; |
| 4 | +import net.minecraft.network.chat.Component; |
| 5 | +import net.minecraft.network.chat.HoverEvent; |
| 6 | +import net.minecraft.network.chat.MutableComponent; |
| 7 | +import net.minecraft.network.chat.TextComponent; |
| 8 | +import net.minecraft.network.chat.TranslatableComponent; |
| 9 | +import net.minecraft.util.StringUtil; |
| 10 | +import net.minecraft.world.entity.Entity; |
| 11 | +import net.minecraft.world.item.ItemStack; |
| 12 | + |
| 13 | +public final class TextHelper { |
| 14 | + |
| 15 | + public static MutableComponent getFormatedTime(int ticks, boolean includeHover) { |
| 16 | + |
| 17 | + MutableComponent component = new TextComponent(StringUtil.formatTickDuration(ticks)); |
| 18 | + |
| 19 | + if (includeHover) { |
| 20 | + |
| 21 | + component = setHover(component, new TranslatableComponent("text.bookshelf.ticks", ticks)); |
| 22 | + } |
| 23 | + |
| 24 | + return component; |
| 25 | + } |
| 26 | + |
| 27 | + public static <T extends Component> T setHover(T component, Component hoverInfo) { |
| 28 | + |
| 29 | + return setHover(component, HoverEvent.Action.SHOW_TEXT, hoverInfo); |
| 30 | + } |
| 31 | + |
| 32 | + public static <T extends Component> T setHover(T component, ItemStack hoverInfo) { |
| 33 | + |
| 34 | + return setHover(component, HoverEvent.Action.SHOW_ITEM, new HoverEvent.ItemStackInfo(hoverInfo)); |
| 35 | + } |
| 36 | + |
| 37 | + public static <T extends Component> T setHover(T component, Entity hoverInfo) { |
| 38 | + |
| 39 | + if (hoverInfo instanceof AccessorEntity accessor) { |
| 40 | + |
| 41 | + return setHover(component, accessor.bookshelf$createHoverEvent()); |
| 42 | + } |
| 43 | + |
| 44 | + return setHover(component, HoverEvent.Action.SHOW_ENTITY, new HoverEvent.EntityTooltipInfo(hoverInfo.getType(), hoverInfo.getUUID(), hoverInfo.getName())); |
| 45 | + } |
| 46 | + |
| 47 | + public static <T extends Component, AT, A extends HoverEvent.Action<AT>> T setHover(T component, A action, AT arg) { |
| 48 | + |
| 49 | + return setHover(component, new HoverEvent(action, arg)); |
| 50 | + } |
| 51 | + |
| 52 | + public static <T extends Component, AT, A extends HoverEvent.Action<AT>> T setHover(T component, HoverEvent hoverInfo) { |
| 53 | + |
| 54 | + if (component instanceof MutableComponent mutable) { |
| 55 | + |
| 56 | + mutable.withStyle(style -> style.withHoverEvent(hoverInfo)); |
| 57 | + } |
| 58 | + |
| 59 | + return component; |
| 60 | + } |
| 61 | +} |
0 commit comments