aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/registry/transfer/TransferHandler.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/AutoCraftingEvaluator.java6
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<TransferHandler> {
@ApiStatus.Experimental
Result overrideTooltipRenderer(BiConsumer<Point, TooltipSink> renderer);
+ Result tooltip(Component component);
+
/**
* @return whether this handler has successfully handled the transfer.
*/
@@ -229,6 +232,7 @@ public interface TransferHandler extends Comparable<TransferHandler> {
final class ResultImpl implements Result {
private boolean successful, applicable, returningToScreen, blocking;
private Component error;
+ private List<Component> tooltips = new ArrayList<>();
private Object errorRenderer;
private BiConsumer<Point, TooltipSink> tooltipRenderer;
private int color;
@@ -290,6 +294,12 @@ public interface TransferHandler extends Comparable<TransferHandler> {
}
@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<TransferHandler> {
@Override
public void fillTooltip(List<Component> 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<TransferHandler.Result> 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<Component> tooltipsFilled = new ArrayList<>();