From 74441387fa129daa904487d90b02444671145d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ampflower=20=F0=9F=8C=BA?= Date: Fri, 30 Aug 2024 00:10:26 -0700 Subject: [PATCH] Resolve conflict with Traveler's Backpack Fixes #9 --- .../tfar/fastbench/mixin/CraftingResultSlotMixin.java | 8 ++++++-- .../java/tfar/fastbench/mixin/RecipeManagerMixin.java | 10 +++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/tfar/fastbench/mixin/CraftingResultSlotMixin.java b/src/main/java/tfar/fastbench/mixin/CraftingResultSlotMixin.java index be2eb99..47f043c 100644 --- a/src/main/java/tfar/fastbench/mixin/CraftingResultSlotMixin.java +++ b/src/main/java/tfar/fastbench/mixin/CraftingResultSlotMixin.java @@ -29,7 +29,11 @@ import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.*; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.inventory.RecipeCraftingHolder; +import net.minecraft.world.inventory.ResultContainer; +import net.minecraft.world.inventory.ResultSlot; +import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.RecipeHolder; @@ -77,7 +81,7 @@ public void set(ItemStack stack) { @Redirect(method = "checkTakeAchievements", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/RecipeCraftingHolder;awardUsedRecipes(Lnet/minecraft/world/entity/player/Player;Ljava/util/List;)V")) public void no(final RecipeCraftingHolder instance, final Player player, final List list) { - if (((CraftingInventoryDuck) craftSlots).getCheckMatrixChanges() && + if ((!(craftSlots instanceof CraftingInventoryDuck duck) || duck.getCheckMatrixChanges()) && this.container instanceof RecipeCraftingHolder recipeHolder) { var recipeUsed = recipeHolder.getRecipeUsed(); if (recipeUsed != null && !recipeUsed.value().isSpecial()) { diff --git a/src/main/java/tfar/fastbench/mixin/RecipeManagerMixin.java b/src/main/java/tfar/fastbench/mixin/RecipeManagerMixin.java index 22b5373..0f09211 100644 --- a/src/main/java/tfar/fastbench/mixin/RecipeManagerMixin.java +++ b/src/main/java/tfar/fastbench/mixin/RecipeManagerMixin.java @@ -34,9 +34,13 @@ public class RecipeManagerMixin { //note: C is actually CraftingInventory, treat it accordingly @Inject(method = "getRemainingItemsFor",at = @At("HEAD"),cancellable = true) private > void techRebornWorkAround(RecipeType recipeType, C craftInput, Level world, CallbackInfoReturnable> cir) { - if (MixinHooks.hascachedrecipe) { - if (MixinHooks.lastRecipe != null) cir.setReturnValue(MixinHooks.lastRecipe.getRemainingItems((CraftingContainer) craftInput)); - else cir.setReturnValue(((CraftingInventoryAccessor) craftInput).getItems()); + // Explicit check on CraftingInventoryAccessor resolves crash relating to Traveler's Backpack + if (MixinHooks.hascachedrecipe && craftInput instanceof CraftingInventoryAccessor accessor) { + if (MixinHooks.lastRecipe != null) { + cir.setReturnValue(MixinHooks.lastRecipe.getRemainingItems((CraftingContainer) craftInput)); + } else { + cir.setReturnValue(accessor.getItems()); + } MixinHooks.hascachedrecipe = false; } }