aboutsummaryrefslogtreecommitdiff
path: root/runtime/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2023-07-17 02:21:05 +0800
committershedaniel <daniel@shedaniel.me>2024-04-16 00:38:18 +0900
commit86f38210276a7d32cab8e5f802717fa7536e0e42 (patch)
treead40fdcdf3a9fed6000519531dc8628cc2f8a1d7 /runtime/src
parent15ede82cd7a0a7d83efa05064215b0d7c174dee8 (diff)
downloadRoughlyEnoughItems-86f38210276a7d32cab8e5f802717fa7536e0e42.tar.gz
RoughlyEnoughItems-86f38210276a7d32cab8e5f802717fa7536e0e42.tar.bz2
RoughlyEnoughItems-86f38210276a7d32cab8e5f802717fa7536e0e42.zip
Overlay errors for display tooltips
Diffstat (limited to 'runtime/src')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java
index 1d7a9f17e..214388dc3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayTooltipComponent.java
@@ -23,26 +23,36 @@
package me.shedaniel.rei.impl.client.gui.widget;
+import com.google.common.base.Suppliers;
import com.mojang.blaze3d.vertex.PoseStack;
+import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.math.impl.PointHelper;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
+import me.shedaniel.rei.api.client.util.MatrixUtils;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.impl.display.DisplaySpec;
+import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
public class DisplayTooltipComponent implements TooltipComponent, ClientTooltipComponent {
+ private final List<Widget> widgets;
private final Widget widget;
private final DisplaySpec display;
private final Rectangle bounds;
+ private final Supplier<AutoCraftingEvaluator.AutoCraftingResult> autoCraftingResult =
+ Suppliers.memoizeWithExpiration(this::evaluateAutoCrafting, 1000, TimeUnit.MILLISECONDS);
public DisplayTooltipComponent(DisplaySpec display) {
Display internalDisplay = display.provideInternalDisplay();
@@ -52,15 +62,22 @@ public class DisplayTooltipComponent implements TooltipComponent, ClientTooltipC
List<Widget> widgets = configuration.getView(internalDisplay).setupDisplay(internalDisplay, bounds);
this.display = display;
+ this.widgets = widgets;
this.widget = Widgets.concat(widgets);
}
public DisplayTooltipComponent(DisplaySpec display, List<Widget> widgets, Rectangle bounds) {
+ this.widgets = widgets;
this.widget = Widgets.concat(widgets);
this.display = display;
this.bounds = bounds;
}
+ private AutoCraftingEvaluator.AutoCraftingResult evaluateAutoCrafting() {
+ if (this.display == null) return new AutoCraftingEvaluator.AutoCraftingResult();
+ return AutoCraftingEvaluator.evaluateAutoCrafting(false, false, this.display.provideInternalDisplay(), this.display::provideInternalDisplayIds);
+ }
+
@Override
public int getHeight() {
return bounds.height + 4;
@@ -77,6 +94,17 @@ public class DisplayTooltipComponent implements TooltipComponent, ClientTooltipC
matrices.translate(x + 2, y + 2, z);
matrices.translate(-this.bounds.getX(), -this.bounds.getY(), 0);
widget.render(matrices, -1000, -1000, 0);
+
+ AutoCraftingEvaluator.AutoCraftingResult craftingResult = autoCraftingResult.get();
+ if (craftingResult.hasApplicable && craftingResult.renderer != null) {
+ matrices.pushPose();
+ Rectangle transformedBounds = MatrixUtils.transform(MatrixUtils.inverse(matrices.last().pose()), new Rectangle(x + 2, y + 2, bounds.width, bounds.height));
+ Point mouse = MatrixUtils.transform(matrices.last().pose(), PointHelper.ofMouse());
+ craftingResult.renderer.render(matrices, mouse.x, mouse.y, Minecraft.getInstance().getDeltaFrameTime(),
+ widgets, transformedBounds, display.provideInternalDisplay());
+ matrices.popPose();
+ }
+
matrices.popPose();
}
}