From da34d97d9d01c9879da138df9643dafb9c1a8e25 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 8 Nov 2023 12:53:27 +0700 Subject: [PATCH] Make Ingredient check for invalidation on getItems(), invalidate ingredients on tags update (#9688) --- .../minecraft/world/item/crafting/Ingredient.java.patch | 9 +++++++++ src/main/java/net/minecraftforge/common/ForgeMod.java | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch index 6c0f04b68c..24283ff027 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch @@ -27,6 +27,15 @@ protected Ingredient(Stream p_43907_) { this.values = p_43907_.toArray((p_43933_) -> { +@@ -50,7 +_,7 @@ + } + + public ItemStack[] getItems() { +- if (this.itemStacks == null) { ++ if (this.itemStacks == null || checkInvalidation()) { + this.itemStacks = Arrays.stream(this.values).flatMap((p_43916_) -> { + return p_43916_.getItems().stream(); + }).distinct().toArray((p_43910_) -> { @@ -78,7 +_,8 @@ } diff --git a/src/main/java/net/minecraftforge/common/ForgeMod.java b/src/main/java/net/minecraftforge/common/ForgeMod.java index dc413efeec..97e7e0fa0c 100644 --- a/src/main/java/net/minecraftforge/common/ForgeMod.java +++ b/src/main/java/net/minecraftforge/common/ForgeMod.java @@ -58,6 +58,7 @@ import net.minecraftforge.common.world.ForgeBiomeModifiers.RemoveSpawnsBiomeModi import net.minecraftforge.common.world.NoneBiomeModifier; import net.minecraftforge.common.world.NoneStructureModifier; import net.minecraftforge.common.world.StructureModifier; +import net.minecraftforge.event.TagsUpdatedEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fluids.FluidType; import net.minecraftforge.fluids.ForgeFlowingFluid; @@ -428,6 +429,7 @@ public class ForgeMod { MinecraftForge.EVENT_BUS.addListener(VillagerTradingManager::loadTrades); MinecraftForge.EVENT_BUS.register(MinecraftForge.INTERNAL_HANDLER); MinecraftForge.EVENT_BUS.addListener(this::mappingChanged); + MinecraftForge.EVENT_BUS.addListener(this::tagsUpdated); MinecraftForge.EVENT_BUS.addListener(this::registerPermissionNodes); MinecraftForge.EVENT_BUS.register(new ForgeNetworkConfigurationHandler()); @@ -454,6 +456,10 @@ public class ForgeMod { Ingredient.invalidateAll(); } + public void tagsUpdated(TagsUpdatedEvent evt) { + Ingredient.invalidateAll(); + } + public void gatherData(GatherDataEvent event) { DataGenerator gen = event.getGenerator(); PackOutput packOutput = gen.getPackOutput();