aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java')
-rw-r--r--src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java b/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java
new file mode 100644
index 000000000..a4a576299
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java
@@ -0,0 +1,131 @@
+/*
+ * Roughly Enough Items by Danielshe.
+ * Licensed under the MIT License.
+ */
+
+package me.shedaniel.rei.api;
+
+import me.shedaniel.rei.client.ScreenHelper;
+import me.shedaniel.rei.gui.ContainerScreenOverlay;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
+import net.minecraft.container.Container;
+
+import java.util.function.Supplier;
+
+public interface AutoTransferHandler {
+
+ default double getPriority() {
+ return 0d;
+ }
+
+ Result handle(Context context);
+
+ public interface Result {
+ static Result createSuccessful() {
+ return new ResultImpl();
+ }
+
+ static Result createNotApplicable() {
+ return new ResultImpl(false);
+ }
+
+ static Result createFailed(String errorKey) {
+ return new ResultImpl(errorKey);
+ }
+
+ boolean isSuccessful();
+
+ boolean isApplicable();
+
+ String getErrorKey();
+ }
+
+ public interface Context {
+ static Context create(boolean actuallyCrafting, AbstractContainerScreen<?> containerScreen, RecipeDisplay recipeDisplay) {
+ return new ContextImpl(actuallyCrafting, containerScreen, () -> recipeDisplay);
+ }
+
+ default MinecraftClient getMinecraft() {
+ return MinecraftClient.getInstance();
+ }
+
+ boolean isActuallyCrafting();
+
+ AbstractContainerScreen<?> getContainerScreen();
+
+ RecipeDisplay getRecipe();
+
+ default Container getContainer() {
+ return getContainerScreen().getContainer();
+ }
+
+ default ContainerScreenOverlay getOverlay() {
+ return ScreenHelper.getLastOverlay();
+ }
+ }
+
+ public final class ResultImpl implements Result {
+ private boolean successful, applicable;
+ private String errorKey;
+
+ private ResultImpl() {
+ this.successful = true;
+ this.applicable = true;
+ }
+
+ public ResultImpl(boolean applicable) {
+ this.successful = false;
+ this.applicable = applicable;
+ }
+
+ public ResultImpl(String errorKey) {
+ this.successful = false;
+ this.applicable = true;
+ this.errorKey = errorKey;
+ }
+
+ @Override
+ public boolean isSuccessful() {
+ return successful;
+ }
+
+ @Override
+ public boolean isApplicable() {
+ return applicable;
+ }
+
+ @Override
+ public String getErrorKey() {
+ return errorKey;
+ }
+ }
+
+ public final class ContextImpl implements Context {
+ boolean actuallyCrafting;
+ AbstractContainerScreen<?> containerScreen;
+ Supplier<RecipeDisplay> recipeDisplaySupplier;
+
+ private ContextImpl(boolean actuallyCrafting, AbstractContainerScreen<?> containerScreen, Supplier<RecipeDisplay> recipeDisplaySupplier) {
+ this.actuallyCrafting = actuallyCrafting;
+ this.containerScreen = containerScreen;
+ this.recipeDisplaySupplier = recipeDisplaySupplier;
+ }
+
+ @Override
+ public boolean isActuallyCrafting() {
+ return actuallyCrafting;
+ }
+
+ @Override
+ public AbstractContainerScreen<?> getContainerScreen() {
+ return containerScreen;
+ }
+
+ @Override
+ public RecipeDisplay getRecipe() {
+ return recipeDisplaySupplier.get();
+ }
+ }
+
+}