From 0da8ecd252a0157cbac49ab0458de94693936fa4 Mon Sep 17 00:00:00 2001 From: jchung01 Date: Tue, 8 Jul 2025 20:52:39 -0700 Subject: [PATCH] Unify thaumcraft plates in research rewards --- scripts/thaumcraft/Unifier.zs | 27 +++++++++++++++++++++ scripts/thaumcraft/UnifyGolemMaterials.zs | 24 ++++-------------- scripts/thaumcraft/research/LateResearch.zs | 18 +++++++++++++- 3 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 scripts/thaumcraft/Unifier.zs diff --git a/scripts/thaumcraft/Unifier.zs b/scripts/thaumcraft/Unifier.zs new file mode 100644 index 00000000..71b2c954 --- /dev/null +++ b/scripts/thaumcraft/Unifier.zs @@ -0,0 +1,27 @@ +#modloaded thaumcraft +#loader lateAddTC +#priority 10 + +import native.net.minecraft.item.ItemStack; + +import crafttweaker.item.IItemStack; + +static unifiedPlates as IItemStack[IItemStack] = { + : , // brass + : , // iron + : , // silver +}; + +function unifyStack(stackIn as ItemStack, unifiedDict as IItemStack[IItemStack]) as ItemStack { + var stack as IItemStack = stackIn.wrapper; + for original, unified in unifiedDict { + if (stack.anyAmount().matches(original)) { + return (unified * stack.amount).native; + } + } + return stackIn; +} + +function unifyPlates(stackIn as ItemStack) as ItemStack { + return unifyStack(stackIn, unifiedPlates); +} \ No newline at end of file diff --git a/scripts/thaumcraft/UnifyGolemMaterials.zs b/scripts/thaumcraft/UnifyGolemMaterials.zs index 2ca503d8..80103083 100644 --- a/scripts/thaumcraft/UnifyGolemMaterials.zs +++ b/scripts/thaumcraft/UnifyGolemMaterials.zs @@ -6,20 +6,16 @@ import native.thaumcraft.api.golems.parts.GolemHead; import native.thaumcraft.api.golems.parts.GolemLeg; import crafttweaker.item.IItemStack; + +import scripts.thaumcraft.Unifier; /* Unify plates visually shown in the golem press. */ -var unifiedPlates = { - : , // brass - : , // iron - : , // silver -} as IItemStack[IItemStack]; - # Materials for material in GolemMaterial.getMaterials() { if (isStackValid(material.componentBase)) { var baseComponent as IItemStack = material.componentBase.wrapper; - material.componentBase = unifyStack(baseComponent, unifiedPlates); + material.componentBase = Unifier.unifyPlates(baseComponent); } } # Head @@ -29,7 +25,7 @@ for head in GolemHead.getHeads() { var component = components[i]; if (component instanceof ItemStack && isStackValid(component as ItemStack)) { var stack as IItemStack = (component as ItemStack).wrapper; - components[i] = unifyStack(stack, unifiedPlates); + components[i] = Unifier.unifyPlates(stack); } } } @@ -40,21 +36,11 @@ for leg in GolemLeg.getLegs() { var component = components[i]; if (component instanceof ItemStack && isStackValid(component as ItemStack)) { var stack as IItemStack = (component as ItemStack).wrapper; - components[i] = unifyStack(stack, unifiedPlates); + components[i] = Unifier.unifyPlates(stack); } } } function isStackValid(stack as ItemStack) as bool { return !(isNull(stack) || stack.isEmpty()); -} - -function unifyStack(stackIn as ItemStack, unifiedDict as IItemStack[IItemStack]) as ItemStack { - var stack as IItemStack = stackIn.wrapper; - for original, unified in unifiedDict { - if (stack.anyAmount().matches(original)) { - return (unified * stack.amount).native; - } - } - return stackIn; } \ No newline at end of file diff --git a/scripts/thaumcraft/research/LateResearch.zs b/scripts/thaumcraft/research/LateResearch.zs index 1d831f67..80718e1d 100644 --- a/scripts/thaumcraft/research/LateResearch.zs +++ b/scripts/thaumcraft/research/LateResearch.zs @@ -1,15 +1,20 @@ #modloaded thaumcraft #loader lateAddTC + import native.net.minecraft.item.ItemStack; import native.thaumcraft.api.research.ResearchCategories; import native.thaumcraft.api.research.ResearchStage; import crafttweaker.item.IItemStack; +import scripts.thaumcraft.Unifier; + /* -Hard-coded, non-JSON, research pages to replace crafting requirements for consume requirements. +Hard-coded, non-JSON, research pages to edit. +- Replaces crafting requirements for consume requirements. This is so we can make these ingredients obtainable through non-crafting recipes, but still make associated research completable. +- Unifies plates from rewards. See config/thaumcraftfix/patches for research page changes that are JSON-based. */ @@ -41,6 +46,9 @@ convertCraftToConsume(t3SmelterStage, mithminitePlate); var scytheStage = findCraftingStage("TAR_MITHMINITE_SCYTHE", mithminitePlate); convertCraftToConsume(scytheStage, mithminitePlate); +# TC plate unification +convertRewardItems("TAR_CRYSTAL_CRUSHER", Unifier.unifiedPlates); + function findCraftingStage(researchName as string, targetItem as IItemStack) as ResearchStage { var stages = ResearchCategories.getResearch(researchName).getStages(); for stage in stages { @@ -80,3 +88,11 @@ function convertCraftToConsume(stage as ResearchStage, itemToConvert as IItemSta stage.setObtain((consumed as ItemStack[]) + itemToConvert.native); } } + +function convertRewardItems(researchName as string, itemsToReplace as IItemStack[IItemStack]) { + var rewards = ResearchCategories.getResearch(researchName).getRewardItem(); + for i in 0 to rewards.length { + var reward = rewards[i]; + rewards[i] = Unifier.unifyStack(reward, itemsToReplace); + } +}