neuralgia/kubejs/server_scripts/gregtech/utility.js
Redeix 911ede670a
Created utility function to add circuit numbers to pre-existing recipes (#1320)
* - Yeast recipe conflict fix

* - Fixed seed oil voiding in barrels. And item weight inconsistency.

* - Reduced loading screen logo size by 4MB

* - Update Changelog

* - Compressed loading screen images to maybe help with ram

* - Added default gui scale to make the main menu look better on first launch

* - Update Changelog

* - Added utility script for adding circuits to existing recipes

* fixed changelog conflict

Signed-off-by: Redeix <59435925+Redeix@users.noreply.github.com>

---------

Signed-off-by: Redeix <59435925+Redeix@users.noreply.github.com>
2025-07-14 10:10:37 +01:00

279 lines
No EOL
9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// priority: 0
//#region Mixer Recipes
/**
* Function for generating gtceu mixer recipes.
* Adding a circuit is optional.
*
* @param {*} event
* @param {string} input -Item
* @param {string} fluid_input -Fluid
* @param {string} output -Item
* @param {number} circuit -0-32
* @param {string} fluid_output -Fluid
* @param {number} duration -Ticks
* @param {number} EUt -GTValues.VA[]
* @param {number} rpm -Depreciated
* @param {string} id -Recipe ID
*/
const generateMixerRecipe = (event, input, fluid_input, output, circuit, fluid_output, duration, EUt, rpm, id) => {
const recipe = event.recipes.gtceu.mixer(id)
.itemInputs(input)
.inputFluids(fluid_input)
.itemOutputs(output)
.outputFluids(fluid_output)
.duration(duration)
.EUt(EUt)
/**
* Applies if circuit param is not empty
*/
if (circuit != null) {
recipe.circuit(circuit)
}
}
//#endregion
//#region Cutter Recipes
/**
* Function for generating gtceu cutter recipes.
*
* @param {*} event
* @param {string} input -Item
* @param {string} output -Item
* @param {number} duration -Ticks
* @param {number} EUt -GTValues.VA[]
* @param {string} id -Recipe ID
*/
const generateCutterRecipe = (event, input, output, duration, EUt, id) => {
event.recipes.gtceu.cutter(`tfg:${id}`)
.itemInputs(input)
.itemOutputs(output)
.duration(duration)
.EUt(EUt)
}
//#endregion
//#region Green House
/**
* Function for generating greenhouse recipes.
*
* @param {*} event
* @param {string} input -Item
* @param {number} fluid_amount -mB
* @param {string} output -Item
* @param {string} id -Recipe ID
* @param {string} dimension -Dimension ID
* @param {number} fertiliser_count
*/
const generateGreenHouseRecipe = (event, input, fluid_amount, output, id, dimension, fertiliser_count) => {
// Без удобрения (Without fertilizer)
let r = event.recipes.gtceu.greenhouse(id)
.notConsumable(input)
.circuit(1)
.inputFluids(JsonIO.of({ amount: fluid_amount, value: { tag: "tfg:clean_water" }}))
.itemOutputs(output)
.chancedOutput(input, 750, 0)
.chancedOutput(input, 500, 0)
.duration(36000) // 30 mins
.EUt(GTValues.VA[GTValues.LV])
if (dimension != null)
r.dimension(dimension)
// С удобрением (With fertilizer)
r = event.recipes.gtceu.greenhouse(`${id}_fertilized`)
.notConsumable(input)
.itemInputs(Item.of('gtceu:fertilizer', fertiliser_count))
.circuit(2)
.inputFluids(JsonIO.of({ amount: fluid_amount, value: { tag: "tfg:clean_water" }}))
.itemOutputs(output)
.chancedOutput(input, 4000, 0)
.chancedOutput(input, 3000, 0)
.duration(12000) // 10 mins
.EUt(GTValues.VA[GTValues.LV])
if (dimension != null)
r.dimension(dimension)
}
//#endregion
//#region Filling NBT
/**
* Function to get fluid filling NBT.
*
* @param {string} material -Fluid
* @param {number} amount -mB
* @returns {{ tank: { FluidName: string; Amount: number; }; }}
*/
const getFillingNBT = (material, amount) => {
return {
tank: {
FluidName: Fluid.of(material.getFluid()).getId(),
Amount: amount
}
}
}
//#endregion
//#region Plated Blocks
/**
* Function for generating plated block recipes.
*
* @param {*} event
* @param {GTMaterials} material
*/
function generatePlatedBlockRecipe(event, material) {
// firmaciv plated blocks don't have this property
let tfcProperty = material.getProperty(TFGPropertyKey.TFC_PROPERTY)
let outputMaterial = (tfcProperty == null || tfcProperty.getOutputMaterial() == null) ? material : tfcProperty.getOutputMaterial()
let plateItem = ChemicalHelper.get(TagPrefix.plate, material, 1);
let platedBlock = ChemicalHelper.get(TFGTagPrefix.blockPlated, material, 1);
let platedSlab = ChemicalHelper.get(TFGTagPrefix.slabPlated, material, 1);
let platedStair = ChemicalHelper.get(TFGTagPrefix.stairPlated, material, 1);
let tfcMetalName = material.getName();
if (tfcMetalName == "iron")
tfcMetalName = "cast_iron";
event.recipes.create.item_application(platedBlock, ['#forge:stone_bricks', plateItem])
.id(`tfg:item_application/${material.getName()}_plated_block`)
event.recipes.createDeploying(platedBlock, ['#forge:stone_bricks', plateItem])
.id(`tfg:deploying/${material.getName()}_plated_block`)
event.recipes.gtceu.assembler(`tfg:${material.getName()}_plated_block`)
.itemInputs('#forge:stone_bricks', plateItem)
.itemOutputs(platedBlock)
.circuit(10)
.duration(50)
.EUt(GTValues.VA[GTValues.ULV])
if (tfcProperty != null) {
event.recipes.tfc.heating(platedBlock, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
.id(`tfc:heating/metal/${tfcMetalName}_block`)
}
event.recipes.gtceu.macerator(`tfg:${material.getName()}_plated_block`)
.itemInputs(platedBlock)
.itemOutputs(ChemicalHelper.get(TagPrefix.dust, material, 1), 'gtceu:stone_dust')
.duration(material.getMass())
.category(GTRecipeCategories.MACERATOR_RECYCLING)
.EUt(GTValues.VA[GTValues.ULV])
event.recipes.gtceu.arc_furnace(`tfg:${material.getName()}_plated_block`)
.itemInputs(platedBlock)
.itemOutputs(ChemicalHelper.get(TagPrefix.ingot, material, 1), 'gtceu:ash_dust')
.duration(material.getMass())
.category(GTRecipeCategories.ARC_FURNACE_RECYCLING)
.EUt(GTValues.VA[GTValues.LV])
event.recipes.create.item_application(platedSlab, ['#tfg:brick_slabs', plateItem])
.id(`tfg:item_application/${material.getName()}_plated_slab`)
event.recipes.createDeploying(platedSlab, ['#tfg:brick_slabs', plateItem])
.id(`tfg:deploying/${material.getName()}_plated_slab`)
event.recipes.gtceu.assembler(`tfg:${material.getName()}_plated_slab`)
.itemInputs('#tfg:brick_slabs', plateItem)
.itemOutputs(platedSlab)
.circuit(10)
.duration(50)
.EUt(GTValues.VA[GTValues.ULV])
if (tfcProperty != null) {
// Slabs are lossy because it's possible to plate a double slab block with one metal plate
event.recipes.tfc.heating(platedSlab, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 72))
.id(`tfc:heating/metal/${tfcMetalName}_block_slab`)
}
event.recipes.gtceu.macerator(`tfg:${material.getName()}_plated_slab`)
.itemInputs(platedSlab)
.itemOutputs(ChemicalHelper.get(TagPrefix.dustSmall, material, 2), 'gtceu:small_stone_dust')
.duration(material.getMass())
.category(GTRecipeCategories.MACERATOR_RECYCLING)
.EUt(GTValues.VA[GTValues.ULV])
event.recipes.gtceu.arc_furnace(`tfg:${material.getName()}_plated_slab`)
.itemInputs(platedSlab)
.itemOutputs(ChemicalHelper.get(TagPrefix.nugget, material, 4), 'gtceu:small_ash_dust')
.duration(material.getMass())
.category(GTRecipeCategories.ARC_FURNACE_RECYCLING)
.EUt(GTValues.VA[GTValues.LV])
event.recipes.create.item_application(platedStair, ['#tfg:brick_stairs', plateItem])
.id(`tfg:item_application/${material.getName()}_plated_stair`)
event.recipes.createDeploying(platedStair, ['#tfg:brick_stairs', plateItem])
.id(`tfg:deploying/${material.getName()}_plated_stair`)
event.recipes.gtceu.assembler(`tfg:${material.getName()}_plated_stair`)
.itemInputs('#tfg:brick_stairs', plateItem)
.itemOutputs(platedStair)
.circuit(10)
.duration(50)
.EUt(GTValues.VA[GTValues.ULV])
if (tfcProperty != null) {
event.recipes.tfc.heating(platedStair, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
.id(`tfc:heating/metal/${tfcMetalName}_block_stairs`)
}
event.recipes.gtceu.macerator(`tfg:${material.getName()}_plated_stair`)
.itemInputs(platedStair)
.itemOutputs(ChemicalHelper.get(TagPrefix.dust, material, 1), 'gtceu:stone_dust')
.duration(material.getMass())
.category(GTRecipeCategories.MACERATOR_RECYCLING)
.EUt(GTValues.VA[GTValues.ULV])
event.recipes.gtceu.arc_furnace(`tfg:${material.getName()}_plated_stair`)
.itemInputs(platedStair)
.itemOutputs(ChemicalHelper.get(TagPrefix.ingot, material, 1), 'gtceu:ash_dust')
.duration(material.getMass())
.category(GTRecipeCategories.ARC_FURNACE_RECYCLING)
.EUt(GTValues.VA[GTValues.LV])
}
//#endregion
//#region forEachMaterial
/**
* Function for iterating through registered materials
* {@link https://github.com/GregTechCEu/GregTech-Modern/blob/1.20.1/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java}
*
* @param {GTCEuAPI.materialManager.getRegisteredMaterials} iterator -Material
*/
function forEachMaterial(iterator) {
for (var material of GTCEuAPI.materialManager.getRegisteredMaterials()) {
iterator(material)
}
}
//#endregion
//#region Add Circuit
/**
* Function for adding circuit numbers for existing recipes
*
* Constants {@link global.ADD_CIRCUIT}
*
* @param {*} event
* @param {string} recipeId -Recipe ID
* @param {number} circuitNumber -0-32
*/
function addCircuitToRecipe(event, recipeId, circuitNumber) {
event.findRecipes({ id: recipeId }).forEach(recipe => {
const inputs = recipe.json.get("inputs");
const itemArray = inputs.has("item") ? Java.from(inputs.get("item")) : [];
itemArray.push({
content: {
type: "gtceu:circuit",
configuration: circuitNumber
},
chance: 0,
maxChance: 10000,
tierChanceBoost: 0
});
inputs.add("item", itemArray);
recipe.json.add("inputs", inputs);
});
}
//#endregion