From 6f15ea0a2fda6f0fb8e309b848b35432d12bf423 Mon Sep 17 00:00:00 2001 From: KnightMiner Date: Sat, 10 Jul 2021 00:49:03 -0400 Subject: [PATCH] Fix issues with stacked fluid containers and NBT based fluid containers filling cauldrons --- .../cauldron/EmptyBucketCauldronRecipe.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/knightminer/inspirations/recipes/recipe/cauldron/EmptyBucketCauldronRecipe.java b/src/main/java/knightminer/inspirations/recipes/recipe/cauldron/EmptyBucketCauldronRecipe.java index 7ceb4e69..ed6df164 100644 --- a/src/main/java/knightminer/inspirations/recipes/recipe/cauldron/EmptyBucketCauldronRecipe.java +++ b/src/main/java/knightminer/inspirations/recipes/recipe/cauldron/EmptyBucketCauldronRecipe.java @@ -7,6 +7,7 @@ import knightminer.inspirations.library.recipe.cauldron.recipe.ICauldronRecipe; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.tags.FluidTags; import net.minecraft.util.ResourceLocation; @@ -56,8 +57,16 @@ public boolean matches(ICauldronInventory inv, World worldIn) { return false; } + // on the chance the container is of size greater than 1, copy, as some containers don't process if not size 1 + ItemStack stack; + if (inv.getStack().getCount() != 1) { + stack = inv.getStack().copy(); + stack.setCount(1); + } else { + stack = inv.getStack(); + } // must have a fluid handler - return FluidUtil.getFluidHandler(inv.getStack()).map(handler -> { + return FluidUtil.getFluidHandler(stack).map(handler -> { // drain the fluid from the handler FluidStack drained = drain(inv, handler, FluidAction.SIMULATE); @@ -68,7 +77,8 @@ public boolean matches(ICauldronInventory inv, World worldIn) { @Override public void handleRecipe(IModifyableCauldronInventory inv) { - FluidUtil.getFluidHandler(inv.getStack()).ifPresent(handler -> { + ItemStack stack = inv.splitStack(1); + FluidUtil.getFluidHandler(stack).ifPresent(handler -> { // if we drain less or more, unfortunately the non bucket amount is lost. It passed in simulate, so this is a mod problem FluidStack drained = drain(inv, handler, FluidAction.EXECUTE); if (drained.getAmount() >= BUCKET_VOLUME) { @@ -78,7 +88,6 @@ public void handleRecipe(IModifyableCauldronInventory inv) { // fill cauldron inv.setLevel(MAX); // replace held item with container - inv.shrinkStack(1); inv.setOrGiveStack(handler.getContainer()); // play sound