aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-08-06 22:35:12 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-08-06 22:35:12 +0800
commit70417f41613ae30582cd48708fe43ce9a3e6ae86 (patch)
tree7a0b8286005568237e894662a9c40bfdb42550d7 /src/main/java
parentcbf03f9c2625b0f336ae86a916fe77db2ee4a420 (diff)
downloadRoughlyEnoughItems-70417f41613ae30582cd48708fe43ce9a3e6ae86.tar.gz
RoughlyEnoughItems-70417f41613ae30582cd48708fe43ce9a3e6ae86.tar.bz2
RoughlyEnoughItems-70417f41613ae30582cd48708fe43ce9a3e6ae86.zip
These days are great days to completely scrap an api
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java25
-rw-r--r--src/main/java/me/shedaniel/rei/api/AutoTransferHandler.java131
-rw-r--r--src/main/java/me/shedaniel/rei/api/RecipeHelper.java4
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigObject.java2
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java12
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java4
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java40
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java34
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java34
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java41
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java34
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java36
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoSmokerBookHandler.java34
-rw-r--r--src/main/java/me/shedaniel/rei/server/InputSlotCrafter.java80
-rw-r--r--src/main/java/me/shedaniel/rei/server/RecipeGridAligner.java61
-rw-r--r--src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java6
16 files changed, 380 insertions, 198 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java b/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java
deleted file mode 100644
index fbf1a9514..000000000
--- a/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Roughly Enough Items by Danielshe.
- * Licensed under the MIT License.
- */
-
-package me.shedaniel.rei.api;
-
-import me.shedaniel.rei.gui.ContainerScreenOverlay;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
-
-import java.util.function.Supplier;
-
-public interface AutoCraftingHandler {
-
- default double getPriority() {
- return 0d;
- }
-
- boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay);
-
- boolean canHandle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay);
-
-}
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();
+ }
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java
index f7ddec0c0..f70f21669 100644
--- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java
+++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java
@@ -29,9 +29,9 @@ public interface RecipeHelper {
return RoughlyEnoughItemsCore.getRecipeHelper();
}
- AutoCraftingHandler registerAutoCraftingHandler(AutoCraftingHandler handler);
+ AutoTransferHandler registerAutoCraftingHandler(AutoTransferHandler handler);
- List<AutoCraftingHandler> getSortedAutoCraftingHandler();
+ List<AutoTransferHandler> getSortedAutoCraftingHandler();
/**
* Gets the total recipe count registered
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java
index 11803a325..5363e672c 100644
--- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java
+++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java
@@ -50,6 +50,8 @@ public class ConfigObject {
@Comment("Disable Recipe Book")
public boolean disableRecipeBook = false;
+ public boolean clickableRecipeArrows = true;
+
public ItemCheatingMode itemCheatingMode = ItemCheatingMode.REI_LIKE;
public boolean lightGrayRecipeBorder = false;
diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
index 979776040..7592cfe03 100644
--- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
@@ -43,7 +43,7 @@ public class RecipeHelperImpl implements RecipeHelper {
VISIBILITY_HANDLER_COMPARATOR = comparator.reversed();
}
- private final List<AutoCraftingHandler> autoCraftingHandlers = Lists.newArrayList();
+ private final List<AutoTransferHandler> autoTransferHandlers = Lists.newArrayList();
private final List<RecipeFunction> recipeFunctions = Lists.newArrayList();
private final List<ScreenClickArea> screenClickAreas = Lists.newArrayList();
private final AtomicInteger recipeCount = new AtomicInteger();
@@ -229,7 +229,7 @@ public class RecipeHelperImpl implements RecipeHelper {
this.recipeFunctions.clear();
this.displayVisibilityHandlers.clear();
this.liveRecipeGenerators.clear();
- this.autoCraftingHandlers.clear();
+ this.autoTransferHandlers.clear();
((DisplayHelperImpl) RoughlyEnoughItemsCore.getDisplayHelper()).resetCache();
BaseBoundsHandler baseBoundsHandler = new BaseBoundsHandlerImpl();
RoughlyEnoughItemsCore.getDisplayHelper().registerBoundsHandler(baseBoundsHandler);
@@ -303,14 +303,14 @@ public class RecipeHelperImpl implements RecipeHelper {
}
@Override
- public AutoCraftingHandler registerAutoCraftingHandler(AutoCraftingHandler handler) {
- autoCraftingHandlers.add(handler);
+ public AutoTransferHandler registerAutoCraftingHandler(AutoTransferHandler handler) {
+ autoTransferHandlers.add(handler);
return handler;
}
@Override
- public List<AutoCraftingHandler> getSortedAutoCraftingHandler() {
- return autoCraftingHandlers.stream().sorted(Comparator.comparingDouble(AutoCraftingHandler::getPriority).reversed()).collect(Collectors.toList());
+ public List<AutoTransferHandler> getSortedAutoCraftingHandler() {
+ return autoTransferHandlers.stream().sorted(Comparator.comparingDouble(AutoTransferHandler::getPriority).reversed()).collect(Collectors.toList());
}
@Override
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index edc1dbbc6..f544e2472 100644
--- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -373,7 +373,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiLighting.disable();
this.renderWidgets(mouseX, mouseY, delta);
- if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen) {
+ if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen && RoughlyEnoughItemsCore.getConfigManager().getConfig().clickableRecipeArrows) {
ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen;
for (RecipeHelperImpl.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas())
if (area.getScreenClass().equals(MinecraftClient.getInstance().currentScreen.getClass()))
@@ -532,7 +532,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
public boolean mouseClicked(double double_1, double double_2, int int_1) {
if (!ScreenHelper.isOverlayVisible())
return false;
- if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen) {
+ if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen && RoughlyEnoughItemsCore.getConfigManager().getConfig().clickableRecipeArrows) {
ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen;
for (RecipeHelperImpl.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas())
if (area.getScreenClass().equals(MinecraftClient.getInstance().currentScreen.getClass()))
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java
index bae81875c..62412c3c9 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java
@@ -5,7 +5,7 @@
package me.shedaniel.rei.gui.widget;
-import me.shedaniel.rei.api.AutoCraftingHandler;
+import me.shedaniel.rei.api.AutoTransferHandler;
import me.shedaniel.rei.api.RecipeDisplay;
import me.shedaniel.rei.api.RecipeHelper;
import me.shedaniel.rei.client.ScreenHelper;
@@ -22,6 +22,7 @@ public class AutoCraftingButtonWidget extends ButtonWidget {
private final Supplier<RecipeDisplay> displaySupplier;
private String extraTooltip;
+ private String errorTooltip;
private AbstractContainerScreen<?> containerScreen;
public AutoCraftingButtonWidget(Rectangle rectangle, String text, Supplier<RecipeDisplay> displaySupplier) {
@@ -34,14 +35,15 @@ public class AutoCraftingButtonWidget extends ButtonWidget {
@Override
public void onPressed() {
- for (AutoCraftingHandler autoCraftingHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler())
- if (autoCraftingHandler.canHandle(displaySupplier, minecraft, minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay()))
- try {
- if (autoCraftingHandler.handle(displaySupplier, minecraft, minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay()))
- return;
- } catch (Exception e) {
- e.printStackTrace();
- }
+ AutoTransferHandler.Context context = AutoTransferHandler.Context.create(true, containerScreen, displaySupplier.get());
+ for (AutoTransferHandler autoTransferHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler())
+ try {
+ AutoTransferHandler.Result result = autoTransferHandler.handle(context);
+ if (result.isSuccessful())
+ return;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
minecraft.openScreen(containerScreen);
ScreenHelper.getLastOverlay().init();
}
@@ -49,24 +51,32 @@ public class AutoCraftingButtonWidget extends ButtonWidget {
@Override
public void render(int mouseX, int mouseY, float delta) {
this.enabled = false;
- for (AutoCraftingHandler autoCraftingHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler())
- if (autoCraftingHandler.canHandle(displaySupplier, minecraft, minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay())) {
+ String error = null;
+ AutoTransferHandler.Context context = AutoTransferHandler.Context.create(false, containerScreen, displaySupplier.get());
+ for (AutoTransferHandler autoTransferHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler()) {
+ AutoTransferHandler.Result result = autoTransferHandler.handle(context);
+ if (result.isSuccessful()) {
enabled = true;
+ error = null;
break;
+ } else if (error == null) {
+ error = result.getErrorKey();
}
+ }
+ errorTooltip = error;
super.render(mouseX, mouseY, delta);
}
@Override
public Optional<String> getTooltips() {
if (this.minecraft.options.advancedItemTooltips)
- if (enabled)
+ if (errorTooltip == null)
return Optional.ofNullable(I18n.translate("text.auto_craft.move_items") + extraTooltip);
else
- return Optional.ofNullable(I18n.translate("text.auto_craft.failed_move_items") + extraTooltip);
- if (enabled)
+ return Optional.ofNullable("§c" + I18n.translate(errorTooltip) + extraTooltip);
+ if (errorTooltip == null)
return Optional.ofNullable(I18n.translate("text.auto_craft.move_items"));
else
- return Optional.ofNullable(I18n.translate("text.auto_craft.failed_move_items"));
+ return Optional.ofNullable("§c" + I18n.translate(errorTooltip));
}
}
diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java
index dbdea81bf..855ea7ee1 100644
--- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java
+++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java
@@ -5,35 +5,31 @@
package me.shedaniel.rei.plugin.autocrafting;
-import me.shedaniel.rei.api.AutoCraftingHandler;
-import me.shedaniel.rei.api.RecipeDisplay;
+import me.shedaniel.rei.api.AutoTransferHandler;
import me.shedaniel.rei.client.ScreenHelper;
-import me.shedaniel.rei.gui.ContainerScreenOverlay;
import me.shedaniel.rei.listeners.RecipeBookGuiHooks;
import me.shedaniel.rei.plugin.blasting.DefaultBlastingDisplay;
-import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
import net.minecraft.client.gui.screen.ingame.BlastFurnaceScreen;
import net.minecraft.container.BlastFurnaceContainer;
-import java.util.function.Supplier;
-
-public class AutoBlastingBookHandler implements AutoCraftingHandler {
+public class AutoBlastingBookHandler implements AutoTransferHandler {
@Override
- public boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- DefaultBlastingDisplay display = (DefaultBlastingDisplay) displaySupplier.get();
- BlastFurnaceScreen furnaceScreen = (BlastFurnaceScreen) parentScreen;
- minecraft.openScreen(furnaceScreen);
+ public Result handle(Context context) {
+ if (!(context.getContainerScreen() instanceof BlastFurnaceScreen) || !(context.getRecipe() instanceof DefaultBlastingDisplay))
+ return Result.createNotApplicable();
+ if (!((DefaultBlastingDisplay) context.getRecipe()).getOptionalRecipe().isPresent() || !context.getMinecraft().player.getRecipeBook().contains(((DefaultBlastingDisplay) context.getRecipe()).getOptionalRecipe().get()))
+ return Result.createNotApplicable();
+ if (!context.isActuallyCrafting())
+ return Result.createSuccessful();
+
+ DefaultBlastingDisplay display = (DefaultBlastingDisplay) context.getRecipe();
+ BlastFurnaceScreen furnaceScreen = (BlastFurnaceScreen) context.getContainerScreen();
+ context.getMinecraft().openScreen(furnaceScreen);
((RecipeBookGuiHooks) furnaceScreen.getRecipeBookGui()).rei_getGhostSlots().reset();
BlastFurnaceContainer container = furnaceScreen.getContainer();
- minecraft.interactionManager.clickRecipe(container.syncId, display.getOptionalRecipe().get(), Screen.hasShiftDown());
+ context.getMinecraft().interactionManager.clickRecipe(container.syncId, display.getOptionalRecipe().get(), Screen.hasShiftDown());
ScreenHelper.getLastOverlay().init();
- return true;
- }
-
- @Override
- public boolean canHandle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- return parentScreen instanceof BlastFurnaceScreen && displaySupplier.get() instanceof DefaultBlastingDisplay && ((DefaultBlastingDisplay) displaySupplier.get()).getOptionalRecipe().isPresent() && minecraft.player.getRecipeBook().contains(((DefaultBlastingDisplay) displaySupplier.get()).getOptionalRecipe().get());
+ return Result.createSuccessful();
}
}
diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java
index b53b1cf33..16038bc75 100644
--- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java
+++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java
@@ -5,35 +5,31 @@
package me.shedaniel.rei.plugin.autocrafting;
-import me.shedaniel.rei.api.AutoCraftingHandler;
-import me.shedaniel.rei.api.RecipeDisplay;
+import me.shedaniel.rei.api.AutoTransferHandler;
import me.shedaniel.rei.client.ScreenHelper;
-import me.shedaniel.rei.gui.ContainerScreenOverlay;
import me.shedaniel.rei.listeners.RecipeBookGuiHooks;
import me.shedaniel.rei.plugin.crafting.DefaultCraftingDisplay;
-import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
import net.minecraft.client.gui.screen.ingame.CraftingTableScreen;
import net.minecraft.container.CraftingTableContainer;
-import java.util.function.Supplier;
-
-public class AutoCraftingTableBookHandler implements AutoCraftingHandler {
+public class AutoCraftingTableBookHandler implements AutoTransferHandler {
@Override
- public boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- DefaultCraftingDisplay display = (DefaultCraftingDisplay) displaySupplier.get();
- CraftingTableScreen craftingTableScreen = (CraftingTableScreen) parentScreen;
- minecraft.openScreen(craftingTableScreen);
+ public Result handle(Context context) {
+ if (!(context.getContainerScreen() instanceof CraftingTableScreen) || !(context.getRecipe() instanceof DefaultCraftingDisplay))
+ return Result.createNotApplicable();
+ if (!((DefaultCraftingDisplay) context.getRecipe()).getOptionalRecipe().isPresent() || !context.getMinecraft().player.getRecipeBook().contains(((DefaultCraftingDisplay) context.getRecipe()).getOptionalRecipe().get()))
+ return Result.createNotApplicable();
+ if (!context.isActuallyCrafting())
+ return Result.createSuccessful();
+
+ DefaultCraftingDisplay display = (DefaultCraftingDisplay) context.getRecipe();
+ CraftingTableScreen craftingTableScreen = (CraftingTableScreen) context.getContainerScreen();
+ context.getMinecraft().openScreen(craftingTableScreen);
((RecipeBookGuiHooks) craftingTableScreen.getRecipeBookGui()).rei_getGhostSlots().reset();
CraftingTableContainer container = craftingTableScreen.getContainer();
- minecraft.interactionManager.clickRecipe(container.syncId, display.getOptionalRecipe().get(), Screen.hasShiftDown());
+ context.getMinecraft().interactionManager.clickRecipe(container.syncId, display.getOptionalRecipe().get(), Screen.hasShiftDown());
ScreenHelper.getLastOverlay().init();
- return true;
- }
-
- @Override
- public boolean canHandle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- return parentScreen instanceof CraftingTableScreen && displaySupplier.get() instanceof DefaultCraftingDisplay && ((DefaultCraftingDisplay) displaySupplier.get()).getOptionalRecipe().isPresent() && minecraft.player.getRecipeBook().contains(((DefaultCraftingDisplay) displaySupplier.get()).getOptionalRecipe().get());
+ return Result.createSuccessful();
}
}
diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java
index 627ac6982..d92b40de9 100644
--- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java
+++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java
@@ -8,9 +8,7 @@ package me.shedaniel.rei.plugin.autocrafting;
import com.google.common.collect.Lists;
import io.netty.buffer.Unpooled;
import me.shedaniel.rei.RoughlyEnoughItemsNetwork;
-import me.shedaniel.rei.api.AutoCraftingHandler;
-import me.shedaniel.rei.api.RecipeDisplay;
-import me.shedaniel.rei.gui.ContainerScreenOverlay;
+import me.shedaniel.rei.api.AutoTransferHandler;
import me.shedaniel.rei.listeners.RecipeBookGuiHooks;
import me.shedaniel.rei.plugin.crafting.DefaultCraftingCategory;
import me.shedaniel.rei.plugin.crafting.DefaultCraftingDisplay;
@@ -18,7 +16,6 @@ import me.shedaniel.rei.plugin.crafting.DefaultShapedDisplay;
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
import net.minecraft.client.gui.screen.ingame.CraftingTableScreen;
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider;
@@ -28,18 +25,30 @@ import net.minecraft.util.DefaultedList;
import net.minecraft.util.PacketByteBuf;
import java.util.List;
-import java.util.function.Supplier;
-public class AutoCraftingTableHandler implements AutoCraftingHandler {
+public class AutoCraftingTableHandler implements AutoTransferHandler {
@Override
- public boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- minecraft.openScreen(parentScreen);
- ((RecipeBookGuiHooks) ((RecipeBookProvider) parentScreen).getRecipeBookGui()).rei_getGhostSlots().reset();
- DefaultCraftingDisplay display = (DefaultCraftingDisplay) displaySupplier.get();
+ public Result handle(Context context) {
+ if (!(context.getRecipe() instanceof DefaultCraftingDisplay))
+ return Result.createNotApplicable();
+ if (!(context.getContainerScreen() instanceof CraftingTableScreen) && !(context.getContainerScreen() instanceof InventoryScreen))
+ return Result.createNotApplicable();
+ if (context.getContainerScreen() instanceof InventoryScreen && (((DefaultCraftingDisplay) context.getRecipe()).getWidth() > 2 || ((DefaultCraftingDisplay) context.getRecipe()).getHeight() > 2))
+ return Result.createFailed("error.rei.transfer.too_small");
+ if (!canUseMovePackets())
+ return Result.createFailed("error.rei.not.on.server");
+ if (!hasItems(context.getRecipe().getInput()))
+ return Result.createFailed("error.rei.not.enough.materials");
+ if (!context.isActuallyCrafting())
+ return Result.createSuccessful();
+
+ context.getMinecraft().openScreen(context.getContainerScreen());
+ ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset();
+ DefaultCraftingDisplay display = (DefaultCraftingDisplay) context.getRecipe();
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
buf.writeUuid(RoughlyEnoughItemsNetwork.CRAFTING_TABLE_MOVE);
buf.writeBoolean(Screen.hasShiftDown());
- CraftingContainer craftingContainer = (CraftingContainer) parentScreen.getContainer();
+ CraftingContainer craftingContainer = (CraftingContainer) context.getContainer();
List<List<ItemStack>> ogInput = display.getInput();
List<List<ItemStack>> input = Lists.newArrayListWithCapacity(craftingContainer.getCraftingWidth() * craftingContainer.getCraftingHeight());
@@ -63,15 +72,7 @@ public class AutoCraftingTableHandler implements AutoCraftingHandler {
}
}
ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.MOVE_ITEMS_PACKET, buf);
- return true;
- }
-
- @Override
- public boolean canHandle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- if (displaySupplier.get() instanceof DefaultCraftingDisplay && (parentScreen instanceof CraftingTableScreen || (parentScreen instanceof InventoryScreen && ((DefaultCraftingDisplay) displaySupplier.get()).getWidth() <= 2 && ((DefaultCraftingDisplay) displaySupplier.get()).getHeight() <= 2)) && canUseMovePackets()) {
- return hasItems(displaySupplier.get().getInput());
- }
- return false;
+ return Result.createSuccessful();
}
@Override
diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java
index b00e77747..47fbeeeaa 100644
--- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java
+++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java
@@ -5,35 +5,31 @@
package me.shedaniel.rei.plugin.autocrafting;
-import me.shedaniel.rei.api.AutoCraftingHandler;
-import me.shedaniel.rei.api.RecipeDisplay;
+import me.shedaniel.rei.api.AutoTransferHandler;
import me.shedaniel.rei.client.ScreenHelper;
-import me.shedaniel.rei.gui.ContainerScreenOverlay;
import me.shedaniel.rei.listeners.RecipeBookGuiHooks;
import me.shedaniel.rei.plugin.smelting.DefaultSmeltingDisplay;
-import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
import net.minecraft.client.gui.screen.ingame.FurnaceScreen;
import net.minecraft.container.FurnaceContainer;
-import java.util.function.Supplier;
-
-public class AutoFurnaceBookHandler implements AutoCraftingHandler {
+public class AutoFurnaceBookHandler implements AutoTransferHandler {
@Override
- public boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- DefaultSmeltingDisplay display = (DefaultSmeltingDisplay) displaySupplier.get();
- FurnaceScreen furnaceScreen = (FurnaceScreen) parentScreen;
- minecraft.openScreen(furnaceScreen);
+ public Result handle(Context context) {
+ if (!(context.getContainerScreen() instanceof FurnaceScreen) || !(context.getRecipe() instanceof DefaultSmeltingDisplay))
+ return Result.createNotApplicable();
+ if (!((DefaultSmeltingDisplay) context.getRecipe()).getOptionalRecipe().isPresent() || !context.getMinecraft().player.getRecipeBook().contains(((DefaultSmeltingDisplay) context.getRecipe()).getOptionalRecipe().get()))
+ return Result.createNotApplicable();
+ if (!context.isActuallyCrafting())
+ return Result.createSuccessful();
+
+ DefaultSmeltingDisplay display = (DefaultSmeltingDisplay) context.getRecipe();
+ FurnaceScreen furnaceScreen = (FurnaceScreen) context.getContainerScreen();
+ context.getMinecraft().openScreen(furnaceScreen);
((RecipeBookGuiHooks) furnaceScreen.getRecipeBookGui()).rei_getGhostSlots().reset();
FurnaceContainer container = furnaceScreen.getContainer();
- minecraft.interactionManager.clickRecipe(container.syncId, display.getOptionalRecipe().get(), Screen.hasShiftDown());
+ context.getMinecraft().interactionManager.clickRecipe(container.syncId, display.getOptionalRecipe().get(), Screen.hasShiftDown());
ScreenHelper.getLastOverlay().init();
- return true;
- }
-
- @Override
- public boolean canHandle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) {
- return parentScreen instanceof FurnaceScreen && displaySupplier.get() instanceof DefaultSmeltingDisplay && ((DefaultSmeltingDisplay) displaySupplier.get()).getOptionalRecipe().isPresent() && minecraft.player.getRecipeBook().contains(((DefaultSmeltingDisplay) displaySupplier.get()).getOptionalRecipe().get());
+ return Result.createSuccessful();
}
}
diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java
index f6adfe666..e644b9a0b 100644
--- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java
+++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java
@@ -5,35 +5,33 @@
package me.shedaniel.rei.plugin.autocrafting;
-import me.shedaniel.rei.api.AutoCraftingHandler;
-import me.shedaniel.rei.api.RecipeDisplay;
+import me.shedaniel.rei.api.AutoTransferHandler;
import me.shedaniel.rei.client.Scre