diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-04-12 12:55:54 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-04-12 18:01:16 +0800 |
| commit | caa82617183f2665cb4bd369eab72b996b4ef1e4 (patch) | |
| tree | 8b58d15dacc65eaced9e7a50bb79610b3798cec8 | |
| parent | beec9eae120d193b5c75baf80bbeda8bd07fec72 (diff) | |
| download | RoughlyEnoughItems-caa82617183f2665cb4bd369eab72b996b4ef1e4.tar.gz RoughlyEnoughItems-caa82617183f2665cb4bd369eab72b996b4ef1e4.tar.bz2 RoughlyEnoughItems-caa82617183f2665cb4bd369eab72b996b4ef1e4.zip | |
Fix quark tooltip fighting issues
6 files changed, 82 insertions, 29 deletions
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 87efa7f26..0a5c1062d 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 @@ -48,10 +48,18 @@ public interface Tooltip { return ClientInternals.createTooltipEntry(text); } + @Deprecated + @ApiStatus.ScheduledForRemoval static Tooltip.Entry entry(ClientTooltipComponent text) { return ClientInternals.createTooltipEntry(text); } + @Deprecated + @ApiStatus.ScheduledForRemoval + static Tooltip.Entry entry(TooltipComponent text) { + return ClientInternals.createTooltipEntry(text); + } + static Tooltip create(@Nullable Point point, Collection<Component> texts) { return from(point, CollectionUtils.map(texts, Tooltip::entry)); } @@ -90,14 +98,27 @@ public interface Tooltip { List<Entry> entries(); + @Deprecated + @ApiStatus.ScheduledForRemoval List<TooltipComponent> components(); + @Deprecated + @ApiStatus.ScheduledForRemoval Tooltip add(ClientTooltipComponent component); Tooltip add(Component text); Tooltip add(TooltipComponent component); + default Tooltip addAll(TooltipComponent... components) { + for (TooltipComponent component : components) { + add(component); + } + return this; + } + + @Deprecated + @ApiStatus.ScheduledForRemoval default Tooltip addAll(ClientTooltipComponent... components) { for (ClientTooltipComponent component : components) { add(component); @@ -112,6 +133,15 @@ public interface Tooltip { return this; } + default Tooltip addAllTooltipComponents(Iterable<TooltipComponent> text) { + for (TooltipComponent component : text) { + add(component); + } + return this; + } + + @Deprecated + @ApiStatus.ScheduledForRemoval default Tooltip addAllComponents(Iterable<ClientTooltipComponent> text) { for (ClientTooltipComponent component : text) { add(component); @@ -134,12 +164,20 @@ public interface Tooltip { EnvExecutor.runInEnv(Env.CLIENT, () -> () -> REIRuntime.getInstance().queueTooltip(this)); } + Tooltip copy(); + @ApiStatus.NonExtendable interface Entry { boolean isText(); + boolean isTooltipComponent(); + Component getAsText(); + TooltipComponent getAsTooltipComponent(); + + @Deprecated + @ApiStatus.ScheduledForRemoval ClientTooltipComponent getAsComponent(); } } diff --git a/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplImpl.java b/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplImpl.java index 6dc97563f..86c21c5a4 100644 --- a/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplImpl.java +++ b/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplImpl.java @@ -50,15 +50,19 @@ public class ScreenOverlayImplImpl { : texts.stream().map(Language.getInstance()::getVisualOrder); return sequenceStream.map(ClientTooltipComponent::create); } else { - return Stream.of(component.getAsComponent()); + return Stream.empty(); } }) .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); + for (Tooltip.Entry entry : tooltip.entries()) { + if (entry.isTooltipComponent()) { + TooltipComponent component = entry.getAsTooltipComponent(); + + 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()); diff --git a/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplImpl.java b/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplImpl.java index 373e0a6ae..c9b9e73b2 100644 --- a/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplImpl.java @@ -27,6 +27,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; import me.shedaniel.rei.api.common.util.CollectionUtils; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; @@ -40,11 +41,11 @@ public class ScreenOverlayImplImpl { public static void renderTooltipInner(Screen screen, PoseStack matrices, Tooltip tooltip, int mouseX, int mouseY) { PoseStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.pushPose(); - modelViewStack.translate(0, 0, 500); +// modelViewStack.translate(0, 0, 500); RenderSystem.applyModelViewMatrix(); matrices.pushPose(); EntryStack<?> stack = tooltip.getContextStack(); - ItemStack itemStack = stack.getValue() instanceof ItemStack ? stack.castValue() : ItemStack.EMPTY; + ItemStack itemStack = stack.getType() == VanillaEntryTypes.ITEM ? stack.castValue() : ItemStack.EMPTY; List<Component> texts = CollectionUtils.filterAndMap(tooltip.entries(), Tooltip.Entry::isText, Tooltip.Entry::getAsText); List<ClientTooltipComponent> components = ForgeHooksClient.gatherTooltipComponents(itemStack, texts, mouseX, screen.width, screen.height, null, screen.getMinecraft().font); for (Tooltip.Entry entry : tooltip.entries()) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index 3f9cfe4cc..96a19c34d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java @@ -362,11 +362,9 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { RenderSystem.disableDepthTest(); RenderSystem.colorMask(true, true, true, false); Rectangle bounds = getInnerBounds(); - setZ(300); fillGradient(matrices, bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), 0x80ffffff, 0x80ffffff); int darkColor = 0x111111 | ((int) (90 * darkHighlightedAlpha.value()) << 24); fillGradient(matrices, bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), darkColor, darkColor); - setZ(0); RenderSystem.colorMask(true, true, true, true); RenderSystem.enableDepthTest(); } 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 586eae71a..5c992d197 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 @@ -29,6 +29,7 @@ import me.shedaniel.math.Point; import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.CollectionUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; @@ -46,17 +47,15 @@ import java.util.List; @Environment(EnvType.CLIENT) public class QueuedTooltip implements Tooltip { private Point location; - private List<Tooltip.Entry> entries; - private List<TooltipComponent> components; + private List<TooltipEntryImpl> entries; private EntryStack<?> stack = EntryStack.empty(); - private QueuedTooltip(Point location, Collection<Tooltip.Entry> entries) { + private QueuedTooltip(Point location, Collection<? extends Tooltip.Entry> entries) { this.location = location; if (this.location == null) { this.location = PointHelper.ofMouse(); } - this.entries = Lists.newArrayList(entries); - this.components = Lists.newArrayList(); + this.entries = (List<TooltipEntryImpl>) Lists.newArrayList(entries); } public static QueuedTooltip impl(Point location, Collection<Tooltip.Entry> text) { @@ -75,12 +74,12 @@ public class QueuedTooltip implements Tooltip { @Override public List<Entry> entries() { - return entries; + return (List<Entry>) (List<? extends Entry>) entries; } @Override public List<TooltipComponent> components() { - return components; + return CollectionUtils.filterAndMap(entries, TooltipEntryImpl::isTooltipComponent, TooltipEntryImpl::getAsTooltipComponent); } @Override @@ -97,7 +96,7 @@ public class QueuedTooltip implements Tooltip { @Override public Tooltip add(TooltipComponent component) { - components.add(component); + entries.add(new TooltipEntryImpl(component)); return this; } @@ -107,6 +106,13 @@ public class QueuedTooltip implements Tooltip { } @Override + public Tooltip copy() { + QueuedTooltip tooltip = new QueuedTooltip(location.clone(), entries); + tooltip.withContextStack(getContextStack()); + return tooltip; + } + + @Override public EntryStack<?> getContextStack() { return stack; } @@ -128,8 +134,25 @@ public class QueuedTooltip implements Tooltip { return obj instanceof Component; } + public boolean isTooltipComponent() { + return obj instanceof TooltipComponent; + } + + public boolean isClientComponent() { + return obj instanceof ClientTooltipComponent; + } + + @Override + public TooltipComponent getAsTooltipComponent() { + return (TooltipComponent) obj; + } + @Override public ClientTooltipComponent getAsComponent() { + if (isTooltipComponent()) { + return ClientTooltipComponent.create((TooltipComponent) obj); + } + return (ClientTooltipComponent) obj; } } 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 41c2bda04..f5efc2e4e 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 @@ -295,17 +295,6 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer Minecraft.getInstance().getItemRenderer().render(value, ItemTransforms.TransformType.GUI, false, matrices, immediate, ITEM_LIGHT, OverlayTexture.NO_OVERLAY, model); matrices.popPose(); - - /*ItemStack value = entry.getValue(); - matrices.pushPose(); - matrices.last().pose().load(RenderSystem.getModelViewStack().last().pose()); - matrices.scale(bounds.getWidth(), (bounds.getWidth() + bounds.getHeight()) / -2f, 1.0F); - RenderSystem.modelViewMatrix = matrices.last().pose(); - PoseStack stack = new PoseStack(); - stack.translate(bounds.getCenterX() / (double) bounds.getWidth(),bounds.getCenterY() * -2.0 / (bounds.getWidth() + bounds.getHeight()),100.0F + entry.getZ()); - Minecraft.getInstance().getItemRenderer().render(value, ItemTransforms.TransformType.GUI, false, stack, immediate, - 0xf000f0, OverlayTexture.NO_OVERLAY, getModelFromStack(value)); - matrices.popPose();*/ } } |
