147 lines
5.2 KiB
Plaintext
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);
|
|
}
|
|
}
|
|
}
|