From 7398b48345b8c2258c0416d2a9f35033a0cacd27 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 2 May 2025 17:25:20 -0400 Subject: [PATCH] Patch CoFH Core to not rely on Ingredient.itemStacks --- forge/build.gradle | 1 + .../CofhIngredientWithCountMixin.java | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/faster_ingredients/CofhIngredientWithCountMixin.java diff --git a/forge/build.gradle b/forge/build.gradle index 4d5881ec..d304ab3d 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -60,6 +60,7 @@ dependencies { modCompileOnly("curse.maven:supermartijncore-454372:4455391") modCompileOnly("vazkii.patchouli:Patchouli:1.19.2-77") + modCompileOnly("curse.maven:cofhcore-69162:5374122") // runtime remapping at home for (extraModJar in fileTree(dir: extraModsDir, include: '*.jar')) { diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/faster_ingredients/CofhIngredientWithCountMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/faster_ingredients/CofhIngredientWithCountMixin.java new file mode 100644 index 00000000..de801ccb --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/faster_ingredients/CofhIngredientWithCountMixin.java @@ -0,0 +1,45 @@ +package org.embeddedt.modernfix.forge.mixin.perf.faster_ingredients; + +import cofh.lib.util.crafting.IngredientWithCount; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import org.embeddedt.modernfix.annotation.RequiresMod; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; + +import java.util.stream.Stream; + +@Mixin(IngredientWithCount.class) +@RequiresMod("cofh_core") +public class CofhIngredientWithCountMixin extends Ingredient { + @Shadow @Final private Ingredient wrappedIngredient; + @Shadow @Final private int count; + + @Unique + private ItemStack[] mfix$itemStacksWithAdjustedCount; + + protected CofhIngredientWithCountMixin(Stream values) { + super(values); + } + + /** + * @author embeddedt + * @reason reimplement in a way that doesn't rely on the itemStacks implementation detail of the wrapped ingredient + */ + @Overwrite + public ItemStack[] getItems() { + if (this.mfix$itemStacksWithAdjustedCount == null) { + ItemStack[] originalItems = this.wrappedIngredient.getItems(); + var newItems = new ItemStack[originalItems.length]; + for (int i = 0; i < originalItems.length; i++) { + newItems[i] = originalItems[i].copy(); + newItems[i].setCount(this.count); + } + this.mfix$itemStacksWithAdjustedCount = newItems; + } + return this.mfix$itemStacksWithAdjustedCount; + } +}