From 34993a81d065f46451fc04cb7de62a861500dff4 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 2 Aug 2022 15:31:07 +0200 Subject: [PATCH] [Feature] Vanilla Water Bottles do return empty bottle when consumed in recipes (quiqueck/BetterEnd#21) --- .../bclib/mixin/common/RecipeMixin.java | 34 +++++++++++++++++++ .../together/tag/v3/CommonItemTags.java | 3 ++ src/main/resources/bclib.mixins.common.json | 1 + 3 files changed, 38 insertions(+) create mode 100644 src/main/java/org/betterx/bclib/mixin/common/RecipeMixin.java diff --git a/src/main/java/org/betterx/bclib/mixin/common/RecipeMixin.java b/src/main/java/org/betterx/bclib/mixin/common/RecipeMixin.java new file mode 100644 index 00000000..1df41cdd --- /dev/null +++ b/src/main/java/org/betterx/bclib/mixin/common/RecipeMixin.java @@ -0,0 +1,34 @@ +package org.betterx.bclib.mixin.common; + +import net.minecraft.core.NonNullList; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.PotionItem; +import net.minecraft.world.item.alchemy.PotionUtils; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Recipe; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Recipe.class) +public interface RecipeMixin { + //Water Bottles are potions and they do not return an empty bottle in crafting Recipes + //This mixin will fix that behaviour + + @Inject(method = "getRemainingItems", at = @At("RETURN")) + default void bcl_getRemainingItems(C container, CallbackInfoReturnable> cir) { + NonNullList remaining = cir.getReturnValue(); + + for (int i = 0; i < remaining.size(); ++i) { + ItemStack stack = container.getItem(i); + if (stack.getItem() instanceof PotionItem pi) { + if (PotionUtils.getPotion(stack) == Potions.WATER) + remaining.set(i, new ItemStack(Items.GLASS_BOTTLE)); + } + } + } +} diff --git a/src/main/java/org/betterx/worlds/together/tag/v3/CommonItemTags.java b/src/main/java/org/betterx/worlds/together/tag/v3/CommonItemTags.java index 22445500..d3799160 100644 --- a/src/main/java/org/betterx/worlds/together/tag/v3/CommonItemTags.java +++ b/src/main/java/org/betterx/worlds/together/tag/v3/CommonItemTags.java @@ -19,11 +19,14 @@ public class CommonItemTags { public static final TagKey WOODEN_CHEST = TagManager.ITEMS.makeCommonTag("wooden_chests"); public static final TagKey WORKBENCHES = TagManager.ITEMS.makeCommonTag("workbench"); + public static final TagKey WATER_BOTTLES = TagManager.ITEMS.makeCommonTag("`water_bottles`"); + static void prepareTags() { TagManager.ITEMS.add(SOUL_GROUND, Blocks.SOUL_SAND.asItem(), Blocks.SOUL_SOIL.asItem()); TagManager.ITEMS.add(CommonItemTags.CHEST, Items.CHEST); TagManager.ITEMS.add(CommonItemTags.IRON_INGOTS, Items.IRON_INGOT); TagManager.ITEMS.add(CommonItemTags.FURNACES, Blocks.FURNACE.asItem()); + TagManager.ITEMS.add(CommonItemTags.WATER_BOTTLES, Items.WATER_BUCKET); } } diff --git a/src/main/resources/bclib.mixins.common.json b/src/main/resources/bclib.mixins.common.json index 5c501db3..69cb11d3 100644 --- a/src/main/resources/bclib.mixins.common.json +++ b/src/main/resources/bclib.mixins.common.json @@ -30,6 +30,7 @@ "PotionBrewingAccessor", "RecipeManagerAccessor", "RecipeManagerMixin", + "RecipeMixin", "RegistryAccessMixin", "ServerAdvancementManagerMixin", "ServerLevelMixin",