From f964e892de381ad56546be818762d8cee6f1a266 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:46:20 +0200 Subject: [PATCH] Less drains More II - Fixed Potion buckets from Tinkers Construct not interacting correctly with drains and spouts #6316 #4124 #6415 --- build.gradle | 4 ++-- .../create/compat/jei/category/ItemDrainCategory.java | 2 +- .../simibubi/create/compat/jei/category/SpoutCategory.java | 2 +- .../create/content/fluids/potion/PotionFluidHandler.java | 7 +++++++ .../content/fluids/transfer/GenericItemEmptying.java | 4 ++-- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index f679a558d..d38bb1153 100644 --- a/build.gradle +++ b/build.gradle @@ -200,8 +200,8 @@ dependencies { // implementation fg.deobf("com.ferreusveritas.dynamictrees:DynamicTrees-1.16.5:0.10.0-Beta25") // runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69") // runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984") - // runtimeOnly fg.deobf("slimeknights.mantle:Mantle:1.16.5-1.6.115") - // runtimeOnly fg.deobf("slimeknights.tconstruct:TConstruct:1.16.5-3.1.1.252") + // runtimeOnly fg.deobf("curse.maven:mantle-74924:4509007") + // runtimeOnly fg.deobf("curse.maven:tinkers-construct-74072:4509008") // runtimeOnly fg.deobf("maven.modrinth:rubidium:0.5.3") // implementation fg.deobf("com.railwayteam.railways:railways-1.18.2-1.1.1:all") { transitive = false } // runtimeOnly fg.deobf("maven.modrinth:spark:1.10.38-forge") diff --git a/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java index b40b8beb3..1041324b2 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java @@ -42,7 +42,7 @@ public class ItemDrainCategory extends CreateRecipeCategory { public static void consumeRecipes(Consumer consumer, IIngredientManager ingredientManager) { for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM_STACK)) { - if (stack.getItem() instanceof PotionItem) { + if (PotionFluidHandler.isPotionItem(stack)) { FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); Ingredient potion = Ingredient.of(stack); consumer.accept(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions")) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java index 58940cb79..aaf9482bd 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java @@ -46,7 +46,7 @@ public class SpoutCategory extends CreateRecipeCategory { public static void consumeRecipes(Consumer consumer, IIngredientManager ingredientManager) { Collection fluidStacks = ingredientManager.getAllIngredients(ForgeTypes.FLUID_STACK); for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM_STACK)) { - if (stack.getItem() instanceof PotionItem) { + if (PotionFluidHandler.isPotionItem(stack)) { FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE); consumer.accept(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions")) diff --git a/src/main/java/com/simibubi/create/content/fluids/potion/PotionFluidHandler.java b/src/main/java/com/simibubi/create/content/fluids/potion/PotionFluidHandler.java index ebe37f05c..3ea8d4a5f 100644 --- a/src/main/java/com/simibubi/create/content/fluids/potion/PotionFluidHandler.java +++ b/src/main/java/com/simibubi/create/content/fluids/potion/PotionFluidHandler.java @@ -22,9 +22,11 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffectUtil; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.PotionItem; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.item.alchemy.Potions; @@ -36,6 +38,11 @@ import net.minecraftforge.fluids.FluidStack; public class PotionFluidHandler { + public static boolean isPotionItem(ItemStack stack) { + return stack.getItem() instanceof PotionItem && !(stack.getContainerItem() + .getItem() instanceof BucketItem); + } + public static Pair emptyPotion(ItemStack stack, boolean simulate) { FluidStack fluid = getFluidFromPotionItem(stack); if (!simulate) diff --git a/src/main/java/com/simibubi/create/content/fluids/transfer/GenericItemEmptying.java b/src/main/java/com/simibubi/create/content/fluids/transfer/GenericItemEmptying.java index d9e3d9aa4..cb1bb141d 100644 --- a/src/main/java/com/simibubi/create/content/fluids/transfer/GenericItemEmptying.java +++ b/src/main/java/com/simibubi/create/content/fluids/transfer/GenericItemEmptying.java @@ -24,7 +24,7 @@ public class GenericItemEmptying { private static final RecipeWrapper WRAPPER = new RecipeWrapper(new ItemStackHandler(1)); public static boolean canItemBeEmptied(Level world, ItemStack stack) { - if (stack.getItem() instanceof PotionItem) + if (PotionFluidHandler.isPotionItem(stack)) return true; WRAPPER.setItem(0, stack); @@ -49,7 +49,7 @@ public class GenericItemEmptying { FluidStack resultingFluid = FluidStack.EMPTY; ItemStack resultingItem = ItemStack.EMPTY; - if (stack.getItem() instanceof PotionItem) + if (PotionFluidHandler.isPotionItem(stack)) return PotionFluidHandler.emptyPotion(stack, simulate); WRAPPER.setItem(0, stack);