diff options
| author | shedaniel <daniel@shedaniel.me> | 2023-07-17 02:21:05 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-04-16 00:38:18 +0900 |
| commit | 86f38210276a7d32cab8e5f802717fa7536e0e42 (patch) | |
| tree | ad40fdcdf3a9fed6000519531dc8628cc2f8a1d7 /runtime/src | |
| parent | 15ede82cd7a0a7d83efa05064215b0d7c174dee8 (diff) | |
| download | RoughlyEnoughItems-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.java | 28 |
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(); } } |
