Merge pull request #61 from jchung01/thaumcraft-research

Unify thaumcraft plates in research rewards
This commit is contained in:
sainagh
2025-08-01 14:13:25 -05:00
committed by GitHub
3 changed files with 49 additions and 20 deletions
+27
View File
@@ -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] = {
<thaumcraft:plate:0>: <techreborn:plates:18>, // brass
<thaumcraft:plate:1>: <thermalfoundation:material:32>, // iron
<bewitchment:silver_plate>: <thermalfoundation:material:322>, // 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);
}
+5 -19
View File
@@ -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 = {
<thaumcraft:plate:0>: <techreborn:plates:18>, // brass
<thaumcraft:plate:1>: <thermalfoundation:material:32>, // iron
<bewitchment:silver_plate>: <thermalfoundation:material:322>, // 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;
}
+17 -1
View File
@@ -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);
}
}