From c7b38c23c5b34a324256966f0a9335694fe8d63b Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Sat, 27 Jul 2024 07:12:04 +0100 Subject: Optimize load time (#2774) * Load time optimization: replace recipe reflection with mixin accessor * Save an inner loop allocation in StaticRecipeChangeLoaders * Move Bauble event handler from individual items to GT++ proxy * Update mobs info with more optimizations --- .../early/minecraft/ForgeShapedRecipeMixin.java | 34 +++++++++++++++++++ .../early/minecraft/ForgeShapelessRecipeMixin.java | 36 ++++++++++++++++++++ .../early/minecraft/VanillaShapedRecipeMixin.java | 36 ++++++++++++++++++++ .../minecraft/VanillaShapelessRecipeMixin.java | 38 ++++++++++++++++++++++ 4 files changed, 144 insertions(+) create mode 100644 src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java create mode 100644 src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java create mode 100644 src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java create mode 100644 src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java (limited to 'src/mixin') diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java new file mode 100644 index 0000000000..041df1937f --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java @@ -0,0 +1,34 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(value = ShapedOreRecipe.class, remap = false) +public class ForgeShapedRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack output; + + @Shadow + private Object[] input; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.output; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.output = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.input; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java new file mode 100644 index 0000000000..7bf4ba489e --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java @@ -0,0 +1,36 @@ +package gregtech.mixin.mixins.early.minecraft; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(value = ShapelessOreRecipe.class, remap = false) +public class ForgeShapelessRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack output; + + @Shadow + private ArrayList input; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.output; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.output = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.input; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java new file mode 100644 index 0000000000..0eecaef6ea --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java @@ -0,0 +1,36 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapedRecipes; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(ShapedRecipes.class) +public class VanillaShapedRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack recipeOutput; + + @Shadow + @Final + public ItemStack[] recipeItems; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.recipeOutput; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.recipeOutput = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.recipeItems; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java new file mode 100644 index 0000000000..926ae6630c --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java @@ -0,0 +1,38 @@ +package gregtech.mixin.mixins.early.minecraft; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapelessRecipes; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(ShapelessRecipes.class) +public class VanillaShapelessRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack recipeOutput; + + @Shadow + @Final + public List recipeItems; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.recipeOutput; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.recipeOutput = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.recipeItems; + } +} -- cgit