From f9b894ecbf5d04194b58f98a92312fe401f6beed Mon Sep 17 00:00:00 2001 From: Take Weiland Date: Sat, 17 Jul 2021 02:37:41 +0200 Subject: [PATCH] Add IRecipeType parameter to burn time hooks (#7771) --- .../AbstractFurnaceContainer.java.patch | 11 ++++++++++ .../AbstractFurnaceTileEntity.java.patch | 13 ++++++++++-- .../net/minecraftforge/common/ForgeHooks.java | 13 +++++++++--- .../common/extensions/IForgeItem.java | 9 +++++++- .../common/extensions/IForgeItemStack.java | 9 +++++++- .../event/ForgeEventFactory.java | 9 +++++++- .../furnace/FurnaceFuelBurnTimeEvent.java | 21 +++++++++++++++++++ 7 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 patches/minecraft/net/minecraft/inventory/container/AbstractFurnaceContainer.java.patch diff --git a/patches/minecraft/net/minecraft/inventory/container/AbstractFurnaceContainer.java.patch b/patches/minecraft/net/minecraft/inventory/container/AbstractFurnaceContainer.java.patch new file mode 100644 index 0000000000..19c9211b93 --- /dev/null +++ b/patches/minecraft/net/minecraft/inventory/container/AbstractFurnaceContainer.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/inventory/container/AbstractFurnaceContainer.java ++++ b/net/minecraft/inventory/container/AbstractFurnaceContainer.java +@@ -150,7 +_,7 @@ + } + + protected boolean func_217058_b(ItemStack p_217058_1_) { +- return AbstractFurnaceTileEntity.func_213991_b(p_217058_1_); ++ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_217058_1_, this.field_217065_f) > 0; + } + + @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/tileentity/AbstractFurnaceTileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/AbstractFurnaceTileEntity.java.patch index 8a6297f60b..ddfc7c978e 100644 --- a/patches/minecraft/net/minecraft/tileentity/AbstractFurnaceTileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/AbstractFurnaceTileEntity.java.patch @@ -98,7 +98,7 @@ } else { Item item = p_213997_1_.func_77973_b(); - return func_214001_f().getOrDefault(item, 0); -+ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_213997_1_); ++ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_213997_1_, this.field_214014_c); } } @@ -107,10 +107,19 @@ public static boolean func_213991_b(ItemStack p_213991_0_) { - return func_214001_f().containsKey(p_213991_0_.func_77973_b()); -+ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_213991_0_) > 0; ++ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_213991_0_, null) > 0; } public int[] func_180463_a(Direction p_180463_1_) { +@@ -410,7 +_,7 @@ + return true; + } else { + ItemStack itemstack = this.field_214012_a.get(1); +- return func_213991_b(p_94041_2_) || p_94041_2_.func_77973_b() == Items.field_151133_ar && itemstack.func_77973_b() != Items.field_151133_ar; ++ return net.minecraftforge.common.ForgeHooks.getBurnTime(p_94041_2_, this.field_214014_c) > 0 || p_94041_2_.func_77973_b() == Items.field_151133_ar && itemstack.func_77973_b() != Items.field_151133_ar; + } + } + @@ -473,5 +_,28 @@ p_194018_1_.func_194112_a(itemstack); } diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index b0f86abeeb..d1a77bcc22 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -63,6 +63,7 @@ import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.GlobalEntityTypeAttributes; import net.minecraft.fluid.*; import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.loot.LootContext; import net.minecraft.loot.LootTable; import net.minecraft.loot.LootTableManager; @@ -1244,10 +1245,16 @@ public class ForgeHooks private static final Map, Integer> VANILLA_BURNS = new HashMap<>(); + @Deprecated // use variant with IRecipeType + public static int getBurnTime(ItemStack stack) + { + return getBurnTime(stack, null); + } + /** * Gets the burn time of this itemstack. */ - public static int getBurnTime(ItemStack stack) + public static int getBurnTime(ItemStack stack, @Nullable IRecipeType recipeType) { if (stack.isEmpty()) { @@ -1256,8 +1263,8 @@ public class ForgeHooks else { Item item = stack.getItem(); - int ret = stack.getBurnTime(); - return ForgeEventFactory.getItemBurnTime(stack, ret == -1 ? VANILLA_BURNS.getOrDefault(item.delegate, 0) : ret); + int ret = stack.getBurnTime(recipeType); + return ForgeEventFactory.getItemBurnTime(stack, ret == -1 ? VANILLA_BURNS.getOrDefault(item.delegate, 0) : ret, recipeType); } } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java index 44d6c6aeff..5847f4e80f 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java @@ -48,6 +48,7 @@ import net.minecraft.item.AxeItem; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ActionResultType; import net.minecraft.util.ResourceLocation; @@ -759,7 +760,13 @@ public interface IForgeItem * it not act as a fuel. Return -1 to let the default vanilla logic * decide. */ - default int getBurnTime(ItemStack itemStack) + default int getBurnTime(ItemStack itemStack, @Nullable IRecipeType recipeType) + { + return getBurnTime(itemStack); + } + + @Deprecated // use variant with IRecipeType + default int getBurnTime(ItemStack stack) { return -1; } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java index c429cc1149..0f66ff3f72 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java @@ -24,6 +24,7 @@ import java.util.Set; import javax.annotation.Nullable; import net.minecraft.entity.monster.EndermanEntity; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.util.CachedBlockInfo; import net.minecraft.block.BlockState; import net.minecraft.enchantment.Enchantment; @@ -83,9 +84,15 @@ public interface IForgeItemStack extends ICapabilitySerializable * it not act as a fuel. Return -1 to let the default vanilla logic * decide. */ + default int getBurnTime(@Nullable IRecipeType recipeType) + { + return getStack().getItem().getBurnTime(getStack(), recipeType); + } + + @Deprecated // use variant with IRecipeType default int getBurnTime() { - return getStack().getItem().getBurnTime(getStack()); + return getBurnTime(null); } /** diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index e522ac5b0f..119271f7dd 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -57,6 +57,7 @@ import net.minecraft.entity.projectile.ThrowableEntity; import net.minecraft.block.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.loot.LootTable; import net.minecraft.loot.LootTableManager; import net.minecraft.resources.IFutureReloadListener; @@ -221,9 +222,15 @@ public class ForgeEventFactory return event.getResult(); } + @Deprecated // use version with IRecipeType public static int getItemBurnTime(@Nonnull ItemStack itemStack, int burnTime) { - FurnaceFuelBurnTimeEvent event = new FurnaceFuelBurnTimeEvent(itemStack, burnTime); + return getItemBurnTime(itemStack, burnTime, null); + } + + public static int getItemBurnTime(@Nonnull ItemStack itemStack, int burnTime, @Nullable IRecipeType recipeType) + { + FurnaceFuelBurnTimeEvent event = new FurnaceFuelBurnTimeEvent(itemStack, burnTime, recipeType); MinecraftForge.EVENT_BUS.post(event); return event.getBurnTime(); } diff --git a/src/main/java/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.java b/src/main/java/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.java index 037dcee66f..4605095d7e 100644 --- a/src/main/java/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.java +++ b/src/main/java/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.java @@ -20,9 +20,11 @@ package net.minecraftforge.event.furnace; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeType; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.eventbus.api.Cancelable; @@ -46,12 +48,21 @@ public class FurnaceFuelBurnTimeEvent extends Event { @Nonnull private final ItemStack itemStack; + @Nullable + private final IRecipeType recipeType; private int burnTime; + @Deprecated // use version with IRecipeType public FurnaceFuelBurnTimeEvent(@Nonnull ItemStack itemStack, int burnTime) + { + this(itemStack, burnTime, null); + } + + public FurnaceFuelBurnTimeEvent(@Nonnull ItemStack itemStack, int burnTime, @Nullable IRecipeType recipeType) { this.itemStack = itemStack; this.burnTime = burnTime; + this.recipeType = recipeType; } /** @@ -63,6 +74,16 @@ public class FurnaceFuelBurnTimeEvent extends Event return itemStack; } + /** + * + * Get the recipe type for which to obtain the burn time, if known. + */ + @Nullable + public IRecipeType getRecipeType() + { + return recipeType; + } + /** * Set the burn time for the given ItemStack. * Setting it to 0 will prevent the item from being used as fuel, overriding vanilla's decision.