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; + } +}