diff options
Diffstat (limited to 'src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java new file mode 100644 index 000000000..e138f99ec --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java @@ -0,0 +1,102 @@ +package me.shedaniel.rei.plugin.autocrafting; + +import me.shedaniel.rei.api.AutoTransferHandler; +import me.shedaniel.rei.api.RecipeDisplay; +import me.shedaniel.rei.impl.ScreenHelper; +import me.shedaniel.rei.listeners.RecipeBookGuiHooks; +import me.shedaniel.rei.plugin.blasting.DefaultBlastingDisplay; +import me.shedaniel.rei.plugin.crafting.DefaultCraftingDisplay; +import me.shedaniel.rei.plugin.smelting.DefaultSmeltingDisplay; +import me.shedaniel.rei.plugin.smoking.DefaultSmokingDisplay; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.container.CraftingContainer; +import net.minecraft.container.CraftingTableContainer; +import net.minecraft.container.PlayerContainer; +import net.minecraft.recipe.Recipe; + +public class DefaultRecipeBookHandler implements AutoTransferHandler { + @Override + public Result handle(Context context) { + RecipeDisplay display = context.getRecipe(); + if (!(context.getContainer() instanceof CraftingContainer)) + return Result.createNotApplicable(); + CraftingContainer<?> container = (CraftingContainer<?>) context.getContainer(); + if (display instanceof DefaultCraftingDisplay) { + DefaultCraftingDisplay craftingDisplay = (DefaultCraftingDisplay) display; + if (craftingDisplay.getOptionalRecipe().isPresent()) { + int h = -1, w = -1; + if (container instanceof CraftingTableContainer) { + h = 3; + w = 3; + } else if (container instanceof PlayerContainer) { + h = 2; + w = 2; + } + if (h == -1 || w == -1) + return Result.createNotApplicable(); + Recipe<?> recipe = (craftingDisplay).getOptionalRecipe().get(); + if (craftingDisplay.getHeight() > h || craftingDisplay.getWidth() > w) + return Result.createFailed(I18n.translate("error.rei.transfer.too_small", h, w)); + if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) + return Result.createFailed(I18n.translate("error.rei.recipe.not.unlocked")); + if (!context.isActuallyCrafting()) + return Result.createSuccessful(); + context.getMinecraft().openScreen(context.getContainerScreen()); + if (context.getContainerScreen() instanceof RecipeBookProvider) + ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset(); + context.getMinecraft().interactionManager.clickRecipe(container.syncId, recipe, Screen.hasShiftDown()); + ScreenHelper.getLastOverlay().init(); + } + } else if (display instanceof DefaultSmeltingDisplay) { + DefaultSmeltingDisplay defaultDisplay = (DefaultSmeltingDisplay) display; + if (defaultDisplay.getOptionalRecipe().isPresent()) { + Recipe<?> recipe = (defaultDisplay).getOptionalRecipe().get(); + if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) + return Result.createFailed(I18n.translate("error.rei.recipe.not.unlocked")); + if (!context.isActuallyCrafting()) + return Result.createSuccessful(); + context.getMinecraft().openScreen(context.getContainerScreen()); + if (context.getContainerScreen() instanceof RecipeBookProvider) + ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset(); + context.getMinecraft().interactionManager.clickRecipe(container.syncId, recipe, Screen.hasShiftDown()); + ScreenHelper.getLastOverlay().init(); + } + } else if (display instanceof DefaultSmokingDisplay) { + DefaultSmokingDisplay defaultDisplay = (DefaultSmokingDisplay) display; + if (defaultDisplay.getOptionalRecipe().isPresent()) { + Recipe<?> recipe = (defaultDisplay).getOptionalRecipe().get(); + if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) + return Result.createFailed(I18n.translate("error.rei.recipe.not.unlocked")); + if (!context.isActuallyCrafting()) + return Result.createSuccessful(); + context.getMinecraft().openScreen(context.getContainerScreen()); + if (context.getContainerScreen() instanceof RecipeBookProvider) + ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset(); + context.getMinecraft().interactionManager.clickRecipe(container.syncId, recipe, Screen.hasShiftDown()); + ScreenHelper.getLastOverlay().init(); + } + } else if (display instanceof DefaultBlastingDisplay) { + DefaultBlastingDisplay defaultDisplay = (DefaultBlastingDisplay) display; + if (defaultDisplay.getOptionalRecipe().isPresent()) { + Recipe<?> recipe = (defaultDisplay).getOptionalRecipe().get(); + if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) + return Result.createFailed(I18n.translate("error.rei.recipe.not.unlocked")); + if (!context.isActuallyCrafting()) + return Result.createSuccessful(); + context.getMinecraft().openScreen(context.getContainerScreen()); + if (context.getContainerScreen() instanceof RecipeBookProvider) + ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset(); + context.getMinecraft().interactionManager.clickRecipe(container.syncId, recipe, Screen.hasShiftDown()); + ScreenHelper.getLastOverlay().init(); + } + } + return Result.createNotApplicable(); + } + + @Override + public double getPriority() { + return -20; + } +} |
