From 4a8a83a1bfc68eeb80581cde55ef23d16e59f52c Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 11 Jun 2022 00:18:06 +0800 Subject: Add TransferHandler.Result.tooltip() --- .../api/client/registry/transfer/TransferHandler.java | 18 ++++++++++++++++-- .../impl/client/gui/widget/AutoCraftingEvaluator.java | 6 ++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java index ad79d1d92..d379c381c 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java @@ -36,6 +36,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; import java.util.function.BiConsumer; import java.util.function.Supplier; @@ -143,6 +144,8 @@ public interface TransferHandler extends Comparable { @ApiStatus.Experimental Result overrideTooltipRenderer(BiConsumer renderer); + Result tooltip(Component component); + /** * @return whether this handler has successfully handled the transfer. */ @@ -229,6 +232,7 @@ public interface TransferHandler extends Comparable { final class ResultImpl implements Result { private boolean successful, applicable, returningToScreen, blocking; private Component error; + private List tooltips = new ArrayList<>(); private Object errorRenderer; private BiConsumer tooltipRenderer; private int color; @@ -289,6 +293,12 @@ public interface TransferHandler extends Comparable { return this; } + @Override + public Result tooltip(Component component) { + this.tooltips.add(component); + return this; + } + @Override public boolean isSuccessful() { return successful; @@ -330,8 +340,12 @@ public interface TransferHandler extends Comparable { @Override public void fillTooltip(List components) { - if (!isSuccessful() && isApplicable()) { - components.add(getError()); + if (isApplicable()) { + if (isSuccessful()) { + components.addAll(tooltips); + } else { + components.add(getError()); + } } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/AutoCraftingEvaluator.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/AutoCraftingEvaluator.java index 62c297dc9..3c3ddd9cf 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/AutoCraftingEvaluator.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/AutoCraftingEvaluator.java @@ -96,6 +96,7 @@ public class AutoCraftingEvaluator { } List errors = new ArrayList<>(); + TransferHandler.Result successfulResult = null; TransferHandler.Context context = TransferHandler.Context.create(actuallyCrafting, stackedCrafting, containerScreen, display); for (TransferHandler transferHandler : TransferHandlerRegistry.getInstance()) { @@ -127,6 +128,7 @@ public class AutoCraftingEvaluator { if (transferResult.isSuccessful()) { errors.clear(); + successfulResult = transferResult; result.successful = true; result.successfulHandler = transferHandler; break; @@ -152,6 +154,10 @@ public class AutoCraftingEvaluator { if (errors.isEmpty()) { errorTooltip.clear(); errorTooltip.add(new TranslatableComponent("text.auto_craft.move_items")); + + if (successfulResult != null) { + successfulResult.fillTooltip(errorTooltip); + } } else { errorTooltip.clear(); List tooltipsFilled = new ArrayList<>(); -- cgit