Files
sevtech-ages-1.12.2/scripts/crafttweaker/classes/resources/resources.zs
2025-07-23 08:37:00 +03:00

147 lines
5.2 KiB
Plaintext

#priority 2650
/*
SevTech: Ages Resources Script
It does things and stuff which some of us understand?
Note: These scripts are created and for the usage in SevTech: Ages and other
modpacks curated by DarkPacks. You can use these scripts for reference and for
learning but not for copying and pasting and claiming as your own.
*/
import crafttweaker.data.IData;
import crafttweaker.item.IIngredient;
import crafttweaker.item.IItemStack;
import crafttweaker.liquid.ILiquidStack;
import crafttweaker.oredict.IOreDictEntry;
import mods.zenstages.ZenStager;
import scripts.crafttweaker.craftingUtils;
import scripts.crafttweaker.stages.metalStages;
zenClass Resources {
var partsToSkip as string[] = [
"clump",
"crystal",
"shard"
];
zenConstructor() {
}
/*
Returns liquid if it exists for that metal if not return null.
*/
function getMetalLiquid(metalName as string) as ILiquidStack {
return metalItems[metalName].liquid as bool ? metalItems[metalName].liquid.liquids[0] : null;
}
/*
Returns item if it exists for that metal if not return null.
*/
function getPreferredMetalItem(metalName as string, metalPartName as string) as IItemStack {
return metalItems[metalName][metalPartName] as bool ? metalItems[metalName][metalPartName].items[0] : null;
}
/*
This method will handle the part being passed. This will perform the magic required to make the magic happen!
*/
function processPart(metalName as string, metalPartName as string, metal as IOreDictEntry[string], preferredMetalItem as IItemStack, metalLiquid as ILiquidStack, doFurnace as bool, metalStage as string, hasLiquid as bool) {
recipes.remove(preferredMetalItem);
furnace.remove(preferredMetalItem);
if (hasLiquid) {
metalProc.handleTinkers(preferredMetalItem, metalName, metalPartName, metalLiquid);
}
// ==============================
// Process the part via their own handlers.
if (metalPartName == "dirtyDust") {
metalProc.handleDirtyDust(preferredMetalItem, metalName, metal);
} else if (metalPartName == "dust") {
metalProc.handleDust(preferredMetalItem, metalName, metalPartName, metal);
} else if (metalPartName == "ingot") {
metalProc.handleIngot(preferredMetalItem, metalName, metalPartName);
} else if (metalPartName == "plate") {
metalProc.handlePlate(preferredMetalItem, metalName);
} else if (metalPartName == "block") {
metalProc.handleBlock(preferredMetalItem, metalName);
} else if (metalPartName == "rod") {
metalProc.handleRod(preferredMetalItem, metalName);
}
// ==============================
// Handle Press Recipes
metalProc.handlePress(preferredMetalItem, metalName, metalPartName);
}
/*
This method is called to init the loop over metals to change how the processing mechanics work for the pack.
TLDR: Removes/Adds/Changes recipes/usages for the metal being handled.
*/
function processMetal(metalName as string, metal as IOreDictEntry[string]) {
var metalLiquid = getMetalLiquid(metalName);
var hasLiquid = metalLiquid as bool;
var metalStage = (metalStages has metalName) ? metalStages[metalName] : "";
// Log as a warn is the metal has no Stage. As ALL metals should have been staged!
// I.E. Could be a new metal or change to a name which we missed in a mod update etc...
if (metalStage == "") {
logger.logWarning("[Metals] No stage found for " ~ metalName);
}
// ==============================
// Stage the Liquid
if (metalStage != "" & hasLiquid) {
ZenStager.getStage(metalStage).addLiquid(metalLiquid);
ZenStager.getStage(metalStage).addIngredient(craftingUtils.getBucketIngredient(metalLiquid));
}
// ==============================
// Loop over the parts for the Metal and handle each part for correcting/changing processing recipes/mechanics.
for partName, part in metal {
if (part as bool & partName != "ore") {
var preferredMetalItem = getPreferredMetalItem(metalName, partName);
unifier.unify(part, preferredMetalItem, metalLiquid);
if (preferredMetalItem as bool) {
// Stage the part.
if (metalStage != "") {
ZenStager.getStage(metalStage).addIngredient(preferredMetalItem);
}
if (!(partsToSkip has partName)) {
processPart(metalName, partName, metal, preferredMetalItem, metalLiquid, partName == "ingot", metalStage, hasLiquid);
}
}
}
}
// ==============================
// Ore Processing
if (metal has "ore" & !isNull(metal.dust)) {
metalProc.handleOre(metalName, metal);
}
}
function processCluster(metal as string, cluster as IItemStack) {
// ==============================
// Crushing Recipes
if (metal == "titanium") {
immersiveEngineering.addCrusher(metals[metal].dust.firstItem * 2, cluster, metals.iron.dust.firstItem, 0.50);
actuallyAdditions.addCrusher(metals[metal].dust.firstItem * 2, cluster, metals.iron.dust.firstItem, 50);
} else {
immersiveEngineering.addCrusher(metals[metal].dust.firstItem * 2, cluster);
actuallyAdditions.addCrusher(metals[metal].dust.firstItem * 2, cluster);
}
// ==============================
// Smelting Recipes
mekanism.addEnrichment(cluster, metals[metal].dust.firstItem * 2);
// ==============================
// Tinkers Melting
if (!isNull(metalItems[metal].liquid)) {
tinkers.addMelting(metalItems[metal].liquid.liquids[0] * 144, cluster);
}
}
}