From 70417f41613ae30582cd48708fe43ce9a3e6ae86 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 6 Aug 2019 22:35:12 +0800 Subject: These days are great days to completely scrap an api --- .../me/shedaniel/rei/api/AutoTransferHandler.java | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java (limited to 'src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java') 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 recipeDisplaySupplier; + + private ContextImpl(boolean actuallyCrafting, AbstractContainerScreen containerScreen, Supplier 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(); + } + } + +} -- cgit