diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-06-22 16:08:14 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-06-22 16:08:14 +0800 |
| commit | f6b10e75179c8237cab172d757238d1404273187 (patch) | |
| tree | 6a6d4d6f0cd37cf5a8172117267a31e56a59b597 /runtime | |
| parent | abf54d61e6991267151bea3e487ea4cd80dc6740 (diff) | |
| download | RoughlyEnoughItems-f6b10e75179c8237cab172d757238d1404273187.tar.gz RoughlyEnoughItems-f6b10e75179c8237cab172d757238d1404273187.tar.bz2 RoughlyEnoughItems-f6b10e75179c8237cab172d757238d1404273187.zip | |
Fix #568
Diffstat (limited to 'runtime')
3 files changed, 33 insertions, 15 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java index 07dd71186..628e823fc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java @@ -57,6 +57,7 @@ import me.shedaniel.rei.api.common.plugins.PluginManager; import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.api.common.util.ImmutableTextComponent; +import me.shedaniel.rei.impl.ClientInternals; import me.shedaniel.rei.impl.client.ClientHelperImpl; import me.shedaniel.rei.impl.client.REIRuntimeImpl; import me.shedaniel.rei.impl.client.gui.craftable.CraftableFilter; @@ -90,6 +91,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.InteractionResult; import net.minecraft.world.inventory.Slot; +import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.Blocks; @@ -549,7 +551,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { } public void renderTooltip(PoseStack matrices, Tooltip tooltip) { - renderTooltipInner(matrices, tooltip.entries().stream() + List<ClientTooltipComponent> lines = tooltip.entries().stream() .flatMap(component -> { if (component.isText()) { return Minecraft.getInstance().font.getSplitter().splitLines(component.getAsText(), 100000, Style.EMPTY).stream() @@ -559,7 +561,15 @@ public class ScreenOverlayImpl extends ScreenOverlay { return Stream.of(component.getAsComponent()); } }) - .collect(Collectors.toList()), tooltip.getX(), tooltip.getY()); + .collect(Collectors.toList()); + for (TooltipComponent component : tooltip.components()) { + try { + ClientInternals.getClientTooltipComponent(lines, component); + } catch (Throwable exception) { + throw new IllegalArgumentException("Failed to add tooltip component! " + component + ", Class: " + (component == null ? null : component.getClass().getCanonicalName()), exception); + } + } + renderTooltipInner(matrices, lines, tooltip.getX(), tooltip.getY()); } public void renderTooltipInner(PoseStack matrices, List<ClientTooltipComponent> lines, int mouseX, int mouseY) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/QueuedTooltip.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/QueuedTooltip.java index 96dff555e..213305e18 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/QueuedTooltip.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/QueuedTooltip.java @@ -33,6 +33,7 @@ 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 net.minecraft.world.inventory.tooltip.TooltipComponent; import org.jetbrains.annotations.ApiStatus; import java.util.Collection; @@ -45,14 +46,16 @@ import java.util.List; @Environment(EnvType.CLIENT) public class QueuedTooltip implements Tooltip { private Point location; - private List<Tooltip.Entry> components; + private List<Tooltip.Entry> entries; + private List<TooltipComponent> components; - private QueuedTooltip(Point location, Collection<Tooltip.Entry> components) { + private QueuedTooltip(Point location, Collection<Tooltip.Entry> entries) { this.location = location; if (this.location == null) { this.location = PointHelper.ofMouse(); } - this.components = Lists.newArrayList(components); + this.entries = Lists.newArrayList(entries); + this.components = Lists.newArrayList(); } public static QueuedTooltip impl(Point location, Collection<Tooltip.Entry> text) { @@ -71,23 +74,34 @@ public class QueuedTooltip implements Tooltip { @Override public List<Component> getText() { - return CollectionUtils.filterAndMap(components, Tooltip.Entry::isText, Tooltip.Entry::getAsText); + return CollectionUtils.filterAndMap(entries, Tooltip.Entry::isText, Tooltip.Entry::getAsText); } @Override public List<Entry> entries() { + return entries; + } + + @Override + public List<TooltipComponent> components() { return components; } @Override public Tooltip add(Component text) { - components.add(new TooltipEntryImpl(text)); + entries.add(new TooltipEntryImpl(text)); return this; } @Override public Tooltip add(ClientTooltipComponent component) { - components.add(new TooltipEntryImpl(component)); + entries.add(new TooltipEntryImpl(component)); + return this; + } + + @Override + public Tooltip add(TooltipComponent component) { + components.add(component); return this; } 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 5de962b0a..647d2c7dc 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 @@ -51,7 +51,6 @@ import net.fabricmc.api.Environment; import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -343,12 +342,7 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer if (!components.isEmpty()) { tooltip.add(components.get(0)); } - try { - component.ifPresent(tooltipComponent -> tooltip.add(ClientTooltipComponent.create(tooltipComponent))); - } catch (IllegalArgumentException exception) { - TooltipComponent tooltipComponent = component.orElse(null); - throw new IllegalArgumentException("Failed to add tooltip component! " + tooltipComponent + ", Class: " + (tooltipComponent == null ? null : tooltipComponent.getClass().getCanonicalName()), exception); - } + component.ifPresent(tooltip::add); for (int i = 1; i < components.size(); i++) { tooltip.add(components.get(i)); } |
