aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-06-22 16:08:14 +0800
committershedaniel <daniel@shedaniel.me>2021-06-22 16:08:14 +0800
commitf6b10e75179c8237cab172d757238d1404273187 (patch)
tree6a6d4d6f0cd37cf5a8172117267a31e56a59b597 /runtime/src/main/java/me/shedaniel
parentabf54d61e6991267151bea3e487ea4cd80dc6740 (diff)
downloadRoughlyEnoughItems-f6b10e75179c8237cab172d757238d1404273187.tar.gz
RoughlyEnoughItems-f6b10e75179c8237cab172d757238d1404273187.tar.bz2
RoughlyEnoughItems-f6b10e75179c8237cab172d757238d1404273187.zip
Fix #568
Diffstat (limited to 'runtime/src/main/java/me/shedaniel')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/QueuedTooltip.java26
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java8
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));
}