diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-06-18 19:39:43 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-06-18 19:39:43 +0800 |
| commit | 6e20fcb8c5a13d2145d8960a00b03507823c8d4d (patch) | |
| tree | ea7188c9e8136e3778ba938d93515559ad423bbf | |
| parent | 332747a3332eec2f2bff5696f79ef1e38161aa75 (diff) | |
| download | RoughlyEnoughItems-6e20fcb8c5a13d2145d8960a00b03507823c8d4d.tar.gz RoughlyEnoughItems-6e20fcb8c5a13d2145d8960a00b03507823c8d4d.tar.bz2 RoughlyEnoughItems-6e20fcb8c5a13d2145d8960a00b03507823c8d4d.zip | |
auto crafting... still using vanilla recipe book, can't figure how
22 files changed, 284 insertions, 64 deletions
diff --git a/gradle.properties b/gradle.properties index 758ac90ad..f34f239ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -mod_version=2.9.4 +mod_version=2.10 minecraft_version=1.14.2 yarn_version=1.14.2+build.3 fabricloader_version=0.4.7+build.147 diff --git a/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java b/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java index fcd711bf4..b3a50cf2c 100644 --- a/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java +++ b/src/main/java/me/shedaniel/rei/api/AutoCraftingHandler.java @@ -9,6 +9,9 @@ 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 net.minecraft.util.ActionResult; + +import java.util.function.Supplier; public interface AutoCraftingHandler { @@ -16,6 +19,8 @@ public interface AutoCraftingHandler { return 0d; } - boolean handle(MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay); + 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/ClientHelper.java b/src/main/java/me/shedaniel/rei/api/ClientHelper.java index d9f6c7ae8..3900e24ae 100644 --- a/src/main/java/me/shedaniel/rei/api/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/api/ClientHelper.java @@ -146,4 +146,7 @@ public interface ClientHelper { * @return whether there are any recipes to show */ boolean executeViewAllRecipesKeyBind(); + + boolean executeViewAllRecipesFromCategory(Identifier category); + } diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java index 18c074121..80bb18238 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java @@ -152,6 +152,8 @@ public interface RecipeHelper { */ Map<RecipeCategory, List<RecipeDisplay>> getAllRecipes(); + List<RecipeDisplay> getAllRecipesFromCategory(RecipeCategory category); + /** * Registers a recipe visibility handler * diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java index 56e9cf65b..0b4c4f821 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java @@ -206,6 +206,19 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer { } @Override + public boolean executeViewAllRecipesFromCategory(Identifier category) { + Map<RecipeCategory, List<RecipeDisplay>> map = Maps.newLinkedHashMap(); + Optional<RecipeCategory> any = RecipeHelper.getInstance().getAllCategories().stream().filter(c -> c.getIdentifier().equals(category)).findAny(); + if (!any.isPresent()) + return false; + RecipeCategory<?> recipeCategory = any.get(); + map.put(recipeCategory, RecipeHelper.getInstance().getAllRecipesFromCategory(recipeCategory)); + if (map.keySet().size() > 0) + openRecipeViewingScreen(map); + return map.keySet().size() > 0; + } + + @Override public void openRecipeViewingScreen(Map<RecipeCategory, List<RecipeDisplay>> map) { if (RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType == RecipeScreenType.VILLAGER) MinecraftClient.getInstance().openScreen(new VillagerRecipeViewingScreen(map)); diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 25f29d7da..5db09d727 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -9,11 +9,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.*; -import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.config.DisplayVisibility; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; @@ -280,20 +276,6 @@ public class RecipeHelperImpl implements RecipeHelper { return -1f; } }); - registerAutoCraftingHandler(new AutoCraftingHandler() { - @Override - public double getPriority() { - return -Double.MAX_VALUE; - } - - @Override - public boolean handle(MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) { - minecraft.openScreen(parentScreen); - ScreenHelper.getLastOverlay().init(); - return true; - } - }); - // Clear Cache ((DisplayHelperImpl) RoughlyEnoughItemsCore.getDisplayHelper()).resetCache(); this.categoryDisplaySettingsMap.clear(); @@ -339,6 +321,11 @@ public class RecipeHelperImpl implements RecipeHelper { } @Override + public List<RecipeDisplay> getAllRecipesFromCategory(RecipeCategory category) { + return recipeCategoryListMap.get(category.getIdentifier()); + } + + @Override public void registerRecipeVisibilityHandler(DisplayVisibilityHandler visibilityHandler) { displayVisibilityHandlers.add(visibilityHandler); } 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 d0c8d0745..eaadc6c61 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java @@ -35,13 +35,21 @@ public class AutoCraftingButtonWidget extends ButtonWidget { @Override public void onPressed() { for(AutoCraftingHandler autoCraftingHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler()) - if (autoCraftingHandler.handle(minecraft,minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay())) - break; + if (autoCraftingHandler.canHandle(displaySupplier, minecraft, minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay())) + if (autoCraftingHandler.handle(displaySupplier, minecraft, minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay())) + return; + minecraft.openScreen(containerScreen); + ScreenHelper.getLastOverlay().init(); } @Override public void render(int mouseX, int mouseY, float delta) { - this.enabled = true; + this.enabled = false; + for(AutoCraftingHandler autoCraftingHandler : RecipeHelper.getInstance().getSortedAutoCraftingHandler()) + if (autoCraftingHandler.canHandle(displaySupplier, minecraft, minecraft.currentScreen, containerScreen, ScreenHelper.getLastOverlay())) { + enabled = true; + break; + } super.render(mouseX, mouseY, delta); } diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java b/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java index 993782324..b8edb3a26 100644 --- a/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java +++ b/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java @@ -6,9 +6,9 @@ package me.shedaniel.rei.mixin; import com.google.common.collect.Lists; +import me.shedaniel.rei.plugin.DefaultPlugin; import me.shedaniel.rei.plugin.brewing.BrewingRecipe; import me.shedaniel.rei.plugin.brewing.DefaultBrewingDisplay; -import me.shedaniel.rei.plugin.DefaultPlugin; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.item.PotionItem; @@ -17,6 +17,7 @@ import net.minecraft.potion.PotionUtil; import net.minecraft.recipe.BrewingRecipeRegistry; import net.minecraft.recipe.Ingredient; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -27,9 +28,9 @@ import java.util.List; @Mixin(BrewingRecipeRegistry.class) public class MixinBrewingRecipeRegistry { - private static final List<BrewingRecipe> SELF_ITEM_RECIPES = Lists.newArrayList(); - private static final List<Potion> REGISTERED_POTION_TYPES = Lists.newArrayList(); - private static final List<Ingredient> SELF_POTION_TYPES = Lists.newArrayList(); + @Unique private static final List<BrewingRecipe> SELF_ITEM_RECIPES = Lists.newArrayList(); + @Unique private static final List<Potion> REGISTERED_POTION_TYPES = Lists.newArrayList(); + @Unique private static final List<Ingredient> SELF_POTION_TYPES = Lists.newArrayList(); @Inject(method = "registerPotionType", at = @At("RETURN")) private static void method_8080(Item item_1, CallbackInfo ci) { diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultAutoCraftingPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultAutoCraftingPlugin.java index a1f085c46..3554b6fb9 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultAutoCraftingPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultAutoCraftingPlugin.java @@ -10,7 +10,7 @@ import me.shedaniel.rei.api.PluginDisabler; import me.shedaniel.rei.api.PluginFunction; import me.shedaniel.rei.api.REIPluginEntry; import me.shedaniel.rei.api.RecipeHelper; -import me.shedaniel.rei.plugin.autocrafting.AutoCraftingTableHandler; +import me.shedaniel.rei.plugin.autocrafting.*; import net.minecraft.util.Identifier; public class DefaultAutoCraftingPlugin implements REIPluginEntry { @@ -34,7 +34,11 @@ public class DefaultAutoCraftingPlugin implements REIPluginEntry { @Override public void registerOthers(RecipeHelper recipeHelper) { - recipeHelper.registerAutoCraftingHandler(new AutoCraftingTableHandler()); + recipeHelper.registerAutoCraftingHandler(new AutoCraftingTableBookHandler()); + recipeHelper.registerAutoCraftingHandler(new AutoInventoryBookHandler()); + recipeHelper.registerAutoCraftingHandler(new AutoFurnaceBookHandler()); + recipeHelper.registerAutoCraftingHandler(new AutoSmokerBookHandler()); + recipeHelper.registerAutoCraftingHandler(new AutoBlastingBookHandler()); } } diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java new file mode 100644 index 000000000..dbdea81bf --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoBlastingBookHandler.java @@ -0,0 +1,39 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.plugin.autocrafting; + +import me.shedaniel.rei.api.AutoCraftingHandler; +import me.shedaniel.rei.api.RecipeDisplay; +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 { + @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); + ((RecipeBookGuiHooks) furnaceScreen.getRecipeBookGui()).rei_getGhostSlots().reset(); + BlastFurnaceContainer container = furnaceScreen.getContainer(); + minecraft.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()); + } +} diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java new file mode 100644 index 000000000..b53b1cf33 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableBookHandler.java @@ -0,0 +1,39 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.plugin.autocrafting; + +import me.shedaniel.rei.api.AutoCraftingHandler; +import me.shedaniel.rei.api.RecipeDisplay; +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 { + @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); + ((RecipeBookGuiHooks) craftingTableScreen.getRecipeBookGui()).rei_getGhostSlots().reset(); + CraftingTableContainer container = craftingTableScreen.getContainer(); + minecraft.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()); + } +} diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java deleted file mode 100644 index 1b1142d76..000000000 --- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoCraftingTableHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Roughly Enough Items by Danielshe. - * Licensed under the MIT License. - */ - -package me.shedaniel.rei.plugin.autocrafting; - -import me.shedaniel.rei.api.AutoCraftingHandler; -import me.shedaniel.rei.client.ScreenHelper; -import me.shedaniel.rei.gui.ContainerScreenOverlay; -import me.shedaniel.rei.listeners.RecipeBookGuiHooks; -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; - -public class AutoCraftingTableHandler implements AutoCraftingHandler { - @Override - public boolean handle(MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) { - if (parentScreen instanceof CraftingTableScreen) { - CraftingTableScreen craftingTableScreen = (CraftingTableScreen) parentScreen; - minecraft.openScreen(craftingTableScreen); - ((RecipeBookGuiHooks) craftingTableScreen.getRecipeBookGui()).rei_getGhostSlots().reset(); - CraftingTableContainer container = craftingTableScreen.getContainer(); - ScreenHelper.getLastOverlay().init(); - return true; - } - return false; - } -} diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java new file mode 100644 index 000000000..b00e77747 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoFurnaceBookHandler.java @@ -0,0 +1,39 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.plugin.autocrafting; + +import me.shedaniel.rei.api.AutoCraftingHandler; +import me.shedaniel.rei.api.RecipeDisplay; +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 { + @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); + ((RecipeBookGuiHooks) furnaceScreen.getRecipeBookGui()).rei_getGhostSlots().reset(); + FurnaceContainer container = furnaceScreen.getContainer(); + minecraft.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()); + } +} diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java new file mode 100644 index 000000000..f6adfe666 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoInventoryBookHandler.java @@ -0,0 +1,39 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.plugin.autocrafting; + +import me.shedaniel.rei.api.AutoCraftingHandler; +import me.shedaniel.rei.api.RecipeDisplay; +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.InventoryScreen; +import net.minecraft.container.PlayerContainer; + +import java.util.function.Supplier; + +public class AutoInventoryBookHandler implements AutoCraftingHandler { + @Override + public boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) { + DefaultCraftingDisplay display = (DefaultCraftingDisplay) displaySupplier.get(); + InventoryScreen inventoryScreen = (InventoryScreen) parentScreen; + minecraft.openScreen(inventoryScreen); + ((RecipeBookGuiHooks) inventoryScreen.getRecipeBookGui()).rei_getGhostSlots().reset(); + PlayerContainer container = inventoryScreen.getContainer(); + minecraft.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 InventoryScreen && displaySupplier.get() instanceof DefaultCraftingDisplay && ((DefaultCraftingDisplay) displaySupplier.get()).getOptionalRecipe().isPresent() && minecraft.player.getRecipeBook().contains(((DefaultCraftingDisplay) displaySupplier.get()).getOptionalRecipe().get()) && ((DefaultCraftingDisplay) displaySupplier.get()).getWidth() <= 2 && ((DefaultCraftingDisplay) displaySupplier.get()).getHeight() <= 2; + } +} diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoSmokerBookHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoSmokerBookHandler.java new file mode 100644 index 000000000..2c768ab3a --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/AutoSmokerBookHandler.java @@ -0,0 +1,39 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.plugin.autocrafting; + +import me.shedaniel.rei.api.AutoCraftingHandler; +import me.shedaniel.rei.api.RecipeDisplay; +import me.shedaniel.rei.client.ScreenHelper; +import me.shedaniel.rei.gui.ContainerScreenOverlay; +import me.shedaniel.rei.listeners.RecipeBookGuiHooks; +import me.shedaniel.rei.plugin.smoking.DefaultSmokingDisplay; +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.SmokerScreen; +import net.minecraft.container.SmokerContainer; + +import java.util.function.Supplier; + +public class AutoSmokerBookHandler implements AutoCraftingHandler { + @Override + public boolean handle(Supplier<RecipeDisplay> displaySupplier, MinecraftClient minecraft, Screen recipeViewingScreen, AbstractContainerScreen<?> parentScreen, ContainerScreenOverlay overlay) { + DefaultSmokingDisplay display = (DefaultSmokingDisplay) displaySupplier.get(); + SmokerScreen smokerScreen = (SmokerScreen) parentScreen; + minecraft.openScreen(smokerScreen); + ((RecipeBookGuiHooks) smokerScreen.getRecipeBookGui()).rei_getGhostSlots().reset(); + SmokerContainer container = smokerScreen.getContainer(); + minecraft.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 SmokerScreen && displaySupplier.get() instanceof DefaultSmokingDisplay && ((DefaultSmokingDisplay) displaySupplier.get()).getOptionalRecipe().isPresent() && minecraft.player.getRecipeBook().contains(((DefaultSmokingDisplay) displaySupplier.get()).getOptionalRecipe().get()); + } +} diff --git a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java index 1cc64f818..5c002b268 100644 --- a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java @@ -62,4 +62,8 @@ public class DefaultBlastingDisplay implements RecipeDisplay { return input; } + public Optional<BlastingRecipe> getOptionalRecipe() { + return Optional.ofNullable(display); + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCraftingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCraftingDisplay.java index b63fdc97c..e0ea0235c 100644 --- a/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCraftingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCraftingDisplay.java @@ -7,9 +7,12 @@ package me.shedaniel.rei.plugin.crafting; import me.shedaniel.rei.api.RecipeDisplay; import me.shedaniel.rei.plugin.DefaultPlugin; +import net.minecraft.recipe.Recipe; import net.minecraft.util.Identifier; -public interface DefaultCraftingDisplay<T> extends RecipeDisplay { +import java.util.Optional; + +public interface DefaultCraftingDisplay extends RecipeDisplay { @Override default Identifier getRecipeCategory() { @@ -24,4 +27,6 @@ public interface DefaultCraftingDisplay<T> extends RecipeDisplay { return 2; } + Optional<Recipe<?>> getOptionalRecipe(); + } diff --git a/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCustomDisplay.java b/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCustomDisplay.java index 4bc83f233..d0be8b967 100644 --- a/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCustomDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultCustomDisplay.java @@ -17,10 +17,10 @@ public class DefaultCustomDisplay implements DefaultCraftingDisplay { private List<List<ItemStack>> input; private List<ItemStack> output; - private Recipe possibleRecipe; + private Recipe<?> possibleRecipe; private int width, height; - public DefaultCustomDisplay(List<List<ItemStack>> input, List<ItemStack> output, Recipe possibleRecipe) { + public DefaultCustomDisplay(List<List<ItemStack>> input, List<ItemStack> output, Recipe<?> possibleRecipe) { this.input = input; this.output = output; this.possibleRecipe = possibleRecipe; @@ -76,4 +76,9 @@ public class DefaultCustomDisplay implements DefaultCraftingDisplay { return height; } + @Override + public Optional<Recipe<?>> getOptionalRecipe() { + return Optional.ofNullable(possibleRecipe); + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultShapedDisplay.java b/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultShapedDisplay.java index 20af74515..33be540d0 100644 --- a/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultShapedDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/crafting/DefaultShapedDisplay.java @@ -6,6 +6,7 @@ package me.shedaniel.rei.plugin.crafting; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; import net.minecraft.recipe.ShapedRecipe; import net.minecraft.util.Identifier; |
