aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-04-12 12:55:54 +0800
committershedaniel <daniel@shedaniel.me>2022-04-12 18:01:16 +0800
commitcaa82617183f2665cb4bd369eab72b996b4ef1e4 (patch)
tree8b58d15dacc65eaced9e7a50bb79610b3798cec8
parentbeec9eae120d193b5c75baf80bbeda8bd07fec72 (diff)
downloadRoughlyEnoughItems-caa82617183f2665cb4bd369eab72b996b4ef1e4.tar.gz
RoughlyEnoughItems-caa82617183f2665cb4bd369eab72b996b4ef1e4.tar.bz2
RoughlyEnoughItems-caa82617183f2665cb4bd369eab72b996b4ef1e4.zip
Fix quark tooltip fighting issues
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java38
-rw-r--r--fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplImpl.java16
-rw-r--r--forge/src/main/java/me/shedaniel/rei/impl/client/gui/forge/ScreenOverlayImplImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/QueuedTooltip.java39
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java11
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();*/
}
}