From 3333b14ee3d6d770fa4ea3f39620a7683254120d Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Mon, 13 Jul 2020 01:56:42 +0200 Subject: Adds a result that will return to the actual screen on success. --- .../me/shedaniel/rei/api/AutoTransferHandler.java | 35 +++++++++++++++++----- .../me/shedaniel/rei/impl/InternalWidgets.java | 6 +++- 2 files changed, 32 insertions(+), 9 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java b/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java index 85eb02553..df1afc053 100644 --- a/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java +++ b/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java @@ -47,7 +47,11 @@ public interface AutoTransferHandler { static Result createSuccessful() { return new ResultImpl(); } - + + static Result createSuccessfulReturnToScreen() { + return new ResultImpl(true, true, true); + } + static Result createNotApplicable() { return new ResultImpl(false); } @@ -71,6 +75,12 @@ public interface AutoTransferHandler { int getColor(); boolean isSuccessful(); + + /** + * Applicable if {@link #isSuccessful()} is true. Will return + * to the previous screen rather than staying open. + */ + boolean isReturnToScreen(); boolean isApplicable(); @@ -111,21 +121,25 @@ public interface AutoTransferHandler { @ApiStatus.Internal final class ResultImpl implements Result { - private boolean successful, applicable; + private boolean successful, applicable, returnToScreen; private String errorKey; private IntList integers = new IntArrayList(); private int color; private ResultImpl() { - this.successful = true; - this.applicable = true; + this(true, true, false); } public ResultImpl(boolean applicable) { - this.successful = false; + this(false, applicable, false); + } + + public ResultImpl(boolean successful, boolean applicable, boolean returnToScreen) { + this.successful = successful; this.applicable = applicable; + this.returnToScreen = returnToScreen; } - + public ResultImpl(String errorKey, IntList integers, int color) { this.successful = false; this.applicable = true; @@ -144,12 +158,17 @@ public interface AutoTransferHandler { public boolean isSuccessful() { return successful; } - + @Override public boolean isApplicable() { return applicable; } - + + @Override + public boolean isReturnToScreen() { + return returnToScreen; + } + @Override public String getErrorKey() { return errorKey; diff --git a/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java b/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java index e6b04a84d..307b3cffc 100644 --- a/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java +++ b/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java @@ -65,8 +65,12 @@ public final class InternalWidgets { for (AutoTransferHandler autoTransferHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler()) try { AutoTransferHandler.Result result = autoTransferHandler.handle(context); - if (result.isSuccessful()) + if (result.isSuccessful()) { + if (result.isReturnToScreen()) { + break; // Same as failing, but doesn't ask other handlers + } return; + } } catch (Exception e) { e.printStackTrace(); } -- cgit From 0df9f46a8b74ec6517eeb574633d436c066027f3 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 13 Jul 2020 22:11:30 +0800 Subject: Change ReturnToScreen to ReturningToScreen Signed-off-by: shedaniel --- .../java/me/shedaniel/rei/api/AutoTransferHandler.java | 14 +++++++------- src/main/java/me/shedaniel/rei/impl/InternalWidgets.java | 5 ++++- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java b/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java index df1afc053..aff7a5e2b 100644 --- a/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java +++ b/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java @@ -48,7 +48,7 @@ public interface AutoTransferHandler { return new ResultImpl(); } - static Result createSuccessfulReturnToScreen() { + static Result createSuccessfulReturningToScreen() { return new ResultImpl(true, true, true); } @@ -80,7 +80,7 @@ public interface AutoTransferHandler { * Applicable if {@link #isSuccessful()} is true. Will return * to the previous screen rather than staying open. */ - boolean isReturnToScreen(); + boolean isReturningToScreen(); boolean isApplicable(); @@ -121,7 +121,7 @@ public interface AutoTransferHandler { @ApiStatus.Internal final class ResultImpl implements Result { - private boolean successful, applicable, returnToScreen; + private boolean successful, applicable, returningToScreen; private String errorKey; private IntList integers = new IntArrayList(); private int color; @@ -134,10 +134,10 @@ public interface AutoTransferHandler { this(false, applicable, false); } - public ResultImpl(boolean successful, boolean applicable, boolean returnToScreen) { + public ResultImpl(boolean successful, boolean applicable, boolean returningToScreen) { this.successful = successful; this.applicable = applicable; - this.returnToScreen = returnToScreen; + this.returningToScreen = returningToScreen; } public ResultImpl(String errorKey, IntList integers, int color) { @@ -165,8 +165,8 @@ public interface AutoTransferHandler { } @Override - public boolean isReturnToScreen() { - return returnToScreen; + public boolean isReturningToScreen() { + return returningToScreen; } @Override diff --git a/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java b/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java index 307b3cffc..497d67727 100644 --- a/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java +++ b/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java @@ -35,6 +35,8 @@ import me.shedaniel.rei.gui.widget.LateRenderable; import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.gui.widget.WidgetWithBounds; import me.shedaniel.rei.utils.CollectionUtils; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.ingame.ContainerScreen; @@ -51,6 +53,7 @@ import java.util.Objects; import java.util.function.Supplier; @ApiStatus.Internal +@Environment(EnvType.CLIENT) public final class InternalWidgets { private InternalWidgets() {} @@ -66,7 +69,7 @@ public final class InternalWidgets { try { AutoTransferHandler.Result result = autoTransferHandler.handle(context); if (result.isSuccessful()) { - if (result.isReturnToScreen()) { + if (result.isReturningToScreen()) { break; // Same as failing, but doesn't ask other handlers } return; -- cgit