/** * Custom GT circuit recipes */ // Function for replacing items in circuit assembler recipes without changing the order function replaceCircassItem(event, idRegex, tagOrItem, toReplace, replaceWith) { // Get all GTCEu Circuit Assembler recipes with an ID matching the regex event.forEachRecipe({ id: idRegex, type: "gtceu:circuit_assembler" }, circuit_recipe => { // Get the JSON array object representing all of the item ingredients let itemIngredients = circuit_recipe.json.getAsJsonObject("inputs").getAsJsonArray("item") for (let i = 0; i < itemIngredients.size(); i++) { // Item ingredient to alter let curItemIngredient = itemIngredients.get(i).getAsJsonObject("content").getAsJsonObject("ingredient") if (curItemIngredient.getAsJsonPrimitive(tagOrItem) != null && curItemIngredient.getAsJsonPrimitive(tagOrItem).asString == toReplace) { // Change item ingredient if it does match curItemIngredient.remove(tagOrItem) curItemIngredient["addProperty(java.lang.String,java.lang.String)"](tagOrItem, replaceWith) } } }) } function replaceGTRecipeAmount(event, recipeType, idRegex, tagOrItem, toAlter, multiplier) { // Get all GTCEu Circuit Assembler recipes with an ID matching the regex event.forEachRecipe({ id: idRegex, type: recipeType }, circuit_recipe => { // Get the JSON array object representing all of the item ingredients let itemIngredients = circuit_recipe.json.getAsJsonObject("inputs").getAsJsonArray("item") for (let i = 0; i < itemIngredients.size(); i++) { // Item ingredient to alter let curItemContent = itemIngredients.get(i).getAsJsonObject("content") let curItemIngredient = curItemContent.getAsJsonObject("ingredient") if (curItemIngredient.getAsJsonPrimitive(tagOrItem) != null && curItemIngredient.getAsJsonPrimitive(tagOrItem).asString == toAlter) { // Change item ingredient if it does match let prevCount = curItemContent.getAsJsonPrimitive("count").asInt curItemContent.remove("count") curItemContent["addProperty(java.lang.String,java.lang.Number)"]("count", prevCount * multiplier) } } }) } ServerEvents.recipes(event => { // Replace some computer components with magical metals replaceCircassItem(event, /workstation_ev/, "tag", "forge:bolts/blue_alloy", "forge:bolts/vibrant_alloy") replaceCircassItem(event, /nano_computer_iv/, "tag", "forge:fine_wires/electrum", "forge:fine_wires/lumium") replaceCircassItem(event, /crystal_computer_zpm/, "tag", "forge:fine_wires/niobium_titanium", "forge:fine_wires/enderium") // Recipe categories seem to be separate when not using builders replaceGTRecipeAmount(event, "gtceu:chemical_reactor", /wetware_circuit_board/, "tag", "forge:foils/niobium_titanium", 0.75) replaceGTRecipeAmount(event, "gtceu:large_chemical_reactor", /wetware_circuit_board/, "tag", "forge:foils/niobium_titanium", 0.75) // Complex SMDs const smds = [ ["transistor", "gtceu:enriched_naquadah_foil", "8x gtceu:fine_holmium_wire", 2], ["resistor", "gtceu:crystal_matrix_dust", "4x gtceu:fine_holmium_wire", 4], ["capacitor", "gtceu:polybenzimidazole_foil", "gtceu:holmium_foil", 1], ["diode", "gtceu:indium_gallium_phosphide_dust", "8x gtceu:fine_holmium_wire", 2], ["inductor", "gtceu:tritanium_ring", "4x gtceu:fine_holmium_wire", 2] ] for (const [item, primary, secondary, foil_amount] of smds) { event.recipes.gtceu.assembler(`complex_smd_${item}`) // PECA foil is used since other electronic component recipes use fluid polymers .itemInputs(primary, secondary, Item.of("gtceu:polyethyl_cyanoacrylate_foil", foil_amount)) .itemOutputs(`64x kubejs:complex_smd_${item}`) .duration(160) .EUt(245760) } for (const javaRecipe of event.findRecipes({ mod: "gtceu" })) { /** @type {import("../../dx/typings/GTJSONRecipe.d.mts").GTJSONRecipe} */ let recipe = JSON.parse(javaRecipe.json.toString()) // Filter out non-GT-machine recipes if(!recipe?.type.startsWith("gtceu:")) continue // Filter out non-item recipes if (!(recipe.duration && recipe.inputs?.item && recipe.outputs)) continue // Filter out recipes without advanced smd if(!recipe.inputs.item.some(i => i.content.type === "gtceu:sized" && "item" in i.content.ingredient && i.content.ingredient.item.startsWith("gtceu:advanced_smd_") )) continue // Filter out recipes without eu if(!recipe.tickInputs?.eu) continue let eut = recipe.tickInputs.eu[0].content if(!eut) continue // Extract inputs and outputs data let [newInputItems, newOutputItems] = [recipe.inputs.item, recipe.outputs?.item].map(items => items && items.map(i => { let c = i.content if (c.type !== "gtceu:sized" || "type" in c.ingredient) throw new Error("Cannot generate complex SMD recipes") let ing = c.ingredient return { id: "tag" in ing ? "#" + ing.tag : ing.item, amount: c.count } }) ) let [newInputFluids, newOutputFluids] = [recipe.inputs.fluid, recipe.outputs?.fluid].map(items => items && items.map(i => { let c = i.content let [val] = c.value return { id: "tag" in val ? "gtceu:" + val.tag.split(":")[1] : val.fluid, amount: c.amount } }) ) let {duration, recipeConditions} = recipe /** @param {number} by */ let multiplyRecipe = by => { for(let matters of [newInputItems, newOutputItems, newInputFluids, newOutputFluids]) if(matters) for(let matter of matters) matter.amount *= by } /** @param {number} by */ let isRecipeDivisible = by => [newInputItems, newOutputItems, newInputFluids, newOutputFluids] .filter(matters => matters) .every(matters => matters.every( matter => matter.amount % by === 0 )) multiplyRecipe(4) // Replace all advanced smd by complex smd for(let inp of newInputItems) { let match = inp.id.match(/^gtceu:advanced(_smd_.*)$/) if(!match) continue inp.id = "kubejs:complex" + match[1] inp.amount /= 4 } // Divide recipe back as much as possible while(isRecipeDivisible(2)) multiplyRecipe(0.5) let [,machineName] = recipe.type.split(":") let newRecipe = event.recipes.gtceu[machineName]("complex_smd_recipe_" + javaRecipe.hashCode()) if(newInputItems) newRecipe = newRecipe.itemInputs.apply(newRecipe, newInputItems.map(i => `${i.amount}x ${i.id}`)) if(newInputFluids) newRecipe = newRecipe.inputFluids.apply(newRecipe, newInputFluids.map(i => `${i.id} ${i.amount}`)) if(newOutputItems) newRecipe = newRecipe.itemOutputs.apply(newRecipe, newOutputItems.map(i => `${i.amount}x ${i.id}`)) if(newOutputFluids) newRecipe = newRecipe.outputFluids.apply(newRecipe, newOutputFluids.map(i => `${i.id} ${i.amount}`)) // Advanced smd recipes take twice as fast to make than simple smds, // while the EU/t is unaffected. In total, EU is halved. // Here we follow the convention: newRecipe = newRecipe.EUt(eut).duration(duration / 2) let cleanroomCondition = recipeConditions.find(cond => cond.type === "cleanroom") if(cleanroomCondition) newRecipe = newRecipe.cleanroom(CleanroomType[cleanroomCondition.cleanroom.toUpperCase()]) let researchCondition = recipeConditions.find(cond => cond.type === "research") if(researchCondition) { let research = researchCondition.research[0] newRecipe = newRecipe.researchWithoutRecipe(research.researchId, research.dataItem.id) } } // Wetware tweaks are more invasive than a 1-item swapout // Wetware printed circuit board event.remove({ output: "gtceu:wetware_printed_circuit_board" }) event.recipes.gtceu.large_chemical_reactor("kubejs:wetware_printed_circuit_board") .itemInputs("gtceu:wetware_circuit_board", "24x minecraft:sculk_vein", "8x gtceu:stem_cells") .inputFluids("gtceu:sodium_persulfate 3000", "gtceu:iron_iii_chloride 1500", "enderio:xp_juice 1000") .itemOutputs("gtceu:wetware_printed_circuit_board") .EUt(480) .duration(1800) .cleanroom(CleanroomType.CLEANROOM) // NPU event.remove({ output: "gtceu:neuro_processing_unit" }) event.recipes.gtceu.circuit_assembler("neuro_processing_unit") .itemInputs("gtceu:wetware_printed_circuit_board", "4x gtceu:stem_cells", "8x gtceu:polybenzimidazole_small_fluid_pipe", "4x gtceu:enderium_plate", "16x gtceu:silicone_rubber_foil", "8x gtceu:hsse_bolt") .inputFluids("gtceu:sterilized_growth_medium 100") .itemOutputs("gtceu:neuro_processing_unit") .cleanroom(CleanroomType.CLEANROOM) .duration(600) .EUt(80000) // WIP: Matter Circuits let plasticBoard; if (doHarderRecipes) plasticBoard = "16x gtceu:kapton_k_plate" else plasticBoard = "16x gtceu:polyethyl_cyanoacrylate_plate" event.recipes.gtceu.circuit_assembler("matter_circuit_board") .itemInputs( plasticBoard, "16x gtceu:omnium_plate", "#gtceu:circuits/luv", "gtceu:iv_emitter", "2x gtceu:omnic_acid_dust", "3x gtceu:flawless_monazite_gem" ) .inputFluids("gtceu:distilled_water 500") .itemOutputs("32x kubejs:matter_circuit_board") .cleanroom(CleanroomType.CLEANROOM) .duration(1200) .EUt(250000) event.recipes.gtceu.large_chemical_reactor("matter_processing_unit") .itemInputs("1x kubejs:matter_circuit_board", "10x gtceu:activated_netherite_foil", "6x gtceu:crystal_matrix_foil") .inputFluids("gtceu:iron_iii_chloride 7500") .itemOutputs("1x kubejs:matter_processing_unit") .cleanroom(CleanroomType.CLEANROOM) .duration(100) .EUt(250000) event.recipes.gtceu.circuit_assembler("matter_processor") .itemInputs( "kubejs:matter_processing_unit", "2x kubejs:multidimensional_cpu_chip", "10x gtceu:advanced_smd_resistor", "10x gtceu:advanced_smd_capacitor", "10x gtceu:advanced_smd_transistor", "4x gtceu:fine_naquadria_wire" ) .inputFluids("gtceu:soldering_alloy 144") .itemOutputs("2x kubejs:matter_processor") .cleanroom(CleanroomType.CLEANROOM) .duration(10 * 20) .EUt(250000) event.recipes.gtceu.circuit_assembler("matter_processor_complex_smd") .itemInputs( "2x kubejs:matter_processing_unit", "4x kubejs:multidimensional_cpu_chip", "5x kubejs:complex_smd_resistor", "5x kubejs:complex_smd_capacitor", "5x kubejs:complex_smd_transistor", "8x gtceu:fine_naquadria_wire" ) .inputFluids("gtceu:soldering_alloy 288") .itemOutputs("4x kubejs:matter_processor") .cleanroom(CleanroomType.CLEANROOM) .duration(10 * 20 / 2) .EUt(250000) event.recipes.gtceu.circuit_assembler("matter_processor_assembly") .itemInputs("kubejs:matter_processing_unit", "2x kubejs:matter_processor", "8x gtceu:advanced_smd_inductor", "8x gtceu:advanced_smd_capacitor", "32x gtceu:ram_chip", "16x gtceu:fine_europium_wire" ) .inputFluids("gtceu:soldering_alloy 1152") .itemOutputs("2x kubejs:matter_processor_assembly") .cleanroom(CleanroomType.CLEANROOM) .duration(20 * 20) .EUt(250000) event.recipes.gtceu.circuit_assembler("matter_processor_assembly_complex_smd") .itemInputs("kubejs:matter_processing_unit", "2x kubejs:matter_processor", "2x kubejs:complex_smd_inductor", "2x kubejs:complex_smd_capacitor", "32x gtceu:ram_chip", "16x gtceu:fine_europium_wire" ) .inputFluids("gtceu:soldering_alloy 1152") .itemOutputs("2x kubejs:matter_processor_assembly") .cleanroom(CleanroomType.CLEANROOM) .duration(20 * 20 / 2) .EUt(250000) event.recipes.gtceu.assembly_line("matter_processor_computer") .itemInputs( "kubejs:matter_processing_unit", "2x kubejs:matter_processor_assembly", "12x gtceu:advanced_smd_diode", "24x gtceu:nor_memory_chip", "8x kubejs:uxpic_chip", "24x gtceu:fine_europium_wire", "8x gtceu:polyethyl_cyanoacrylate_foil", "4x gtceu:crystal_matrix_plate" ) .inputFluids("gtceu:soldering_alloy 1152", "gtceu:omnium 144") .itemOutputs("kubejs:matter_processor_computer") .duration(20 * 20) .EUt(250000) event.recipes.gtceu.assembly_line("matter_processor_computer_complex_smd") .itemInputs( "kubejs:matter_processing_unit", "2x kubejs:matter_processor_assembly", "3x kubejs:complex_smd_diode", "24x gtceu:nor_memory_chip", "8x kubejs:uxpic_chip", "24x gtceu:fine_europium_wire", "8x gtceu:polyethyl_cyanoacrylate_foil", "4x gtceu:crystal_matrix_plate" ) .inputFluids("gtceu:soldering_alloy 1152", "gtceu:omnium 144") .itemOutputs("kubejs:matter_processor_computer") .duration(20 * 20 / 2) .EUt(250000) event.recipes.gtceu.assembly_line("matter_processor_mainframe") .itemInputs("2x gtceu:activated_netherite_frame", "2x kubejs:matter_processor_computer", "32x gtceu:advanced_smd_diode", "32x gtceu:advanced_smd_capacitor", "32x gtceu:advanced_smd_transistor", "32x gtceu:advanced_smd_resistor", "32x gtceu:advanced_smd_inductor", "32x gtceu:ram_chip", "16x kubejs:multidimensional_cpu_chip", "16x gtceu:ruthenium_trinium_americium_neutronate_double_wire", "16x gtceu:polyethyl_cyanoacrylate_foil", "8x gtceu:crystal_matrix_plate") // could replace with omnium frame .inputFluids("gtceu:soldering_alloy 4320", "gtceu:omnium 288") .itemOutputs("kubejs:matter_processor_mainframe") .duration(2400) .EUt(GTValues.VA[GTValues.UHV]) event.recipes.gtceu.assembly_line("matter_processor_mainframe_complex_smd") .itemInputs("2x gtceu:activated_netherite_frame", "2x kubejs:matter_processor_computer", "8x kubejs:complex_smd_diode", "8x kubejs:complex_smd_capacitor", "8x kubejs:complex_smd_transistor", "8x kubejs:complex_smd_resistor", "8x kubejs:complex_smd_inductor", "32x gtceu:ram_chip", "16x kubejs:multidimensional_cpu_chip", "16x gtceu:ruthenium_trinium_americium_neutronate_double_wire", "16x gtceu:polyethyl_cyanoacrylate_foil", "8x gtceu:crystal_matrix_plate") // could replace with omnium frame .inputFluids("gtceu:soldering_alloy 4320", "gtceu:omnium 288") .itemOutputs("kubejs:matter_processor_mainframe") .duration(2400 / 2) .EUt(GTValues.VA[GTValues.UHV]) // WIP: Dimensional Circuits event.recipes.gtceu.circuit_assembler("dimensional_circuit_board") .itemInputs( "32x gtceu:polyethyl_cyanoacrylate_plate", "4x gtceu:infinity_plate", "#gtceu:circuits/zpm", "gtceu:luv_sensor", "3x kubejs:the_ultimate_material", "2x gtceu:nether_star_lens" ) .inputFluids("gtceu:omnium 288") .itemOutputs("32x kubejs:dimensional_circuit_board") .cleanroom(CleanroomType.CLEANROOM) .duration(1200) .EUt(500000) event.recipes.gtceu.large_chemical_reactor("dimensional_processing_unit") .itemInputs("1x kubejs:dimensional_circuit_board", "12x gtceu:holmium_foil", "6x gtceu:activated_netherite_foil") .inputFluids("gtceu:iron_iii_chloride 10000") .itemOutputs("1x kubejs:dimensional_processing_unit") .cleanroom(CleanroomType.CLEANROOM) .duration(100) .EUt(1966080) event.recipes.gtceu.circuit_assembler("dimensional_processor") .itemInputs( "kubejs:dimensional_processing_unit", "3x kubejs:multidimensional_cpu_chip", "4x kubejs:complex_smd_resistor", "4x kubejs:complex_smd_capacitor", "4x kubejs:complex_smd_transistor", "2x gtceu:fine_holmium_wire" ) .inputFluids("gtceu:soldering_alloy 144") .itemOutputs("2x kubejs:dimensional_processor") .cleanroom(CleanroomType.CLEANROOM) .duration(10 * 20) .EUt(1966080) event.recipes.gtceu.circuit_assembler("dimensional_processor_assembly") .itemInputs( "kubejs:dimensional_processing_unit", "2x kubejs:dimensional_processor", "4x kubejs:complex_smd_inductor", "4x kubejs:complex_smd_capacitor", "4x kubejs:hyperdynamic_ram_chip", "16x gtceu:fine_activated_netherite_wire" ) .inputFluids("gtceu:soldering_alloy 1152") .itemOutputs("2x kubejs:dimensional_processor_assembly") .cleanroom(CleanroomType.CLEANROOM) .duration(20 * 20) .EUt(1966080) event.recipes.gtceu.assembly_line("dimensional_processor_computer") .itemInputs( "kubejs:dimensional_processing_unit", "2x kubejs:dimensional_processor_assembly", "8x kubejs:complex_smd_diode", "32x gtceu:nor_memory_chip", "12x kubejs:multidimensional_cpu_chip", "16x kubejs:hyperdynamic_ram_chip", "16x kubejs:uxpic_chip", "24x gtceu:fine_activated_netherite_wire", "16x gtceu:polyethyl_cyanoacrylate_foil", "4x gtceu:holmium_plate" ) .inputFluids("gtceu:soldering_alloy 1152") .itemOutputs("kubejs:dimensional_processor_computer") .duration(20 * 20) .EUt(1966080) event.recipes.gtceu.assembly_line("dimensional_processor_mainframe") .itemInputs( "2x gtceu:infinity_frame", "2x kubejs:dimensional_processor_computer", "32x kubejs:complex_smd_diode", "32x kubejs:complex_smd_capacitor", "32x kubejs:complex_smd_transistor", "32x kubejs:complex_smd_resistor", "32x kubejs:complex_smd_inductor", "32x gtceu:nand_memory_chip", "24x kubejs:multidimensional_cpu_chip", "32x kubejs:hyperdynamic_ram_chip", "16x gtceu:activated_netherite_double_wire", "16x gtceu:polyethyl_cyanoacrylate_foil", "8x gtceu:holmium_plate" ) .inputFluids("gtceu:soldering_alloy 4320", "gtceu:omnium 576") .itemOutputs("kubejs:dimensional_processor_mainframe") .duration(2400) .EUt(GTValues.VA[GTValues.UEV]) // Monic Circuits event.recipes.gtceu.circuit_assembler("monic_circuit_board") .itemInputs("32x kubejs:dimensional_circuit_board", "2x gtceu:monium_plate", "#gtceu:circuits/uv", "gtceu:zpm_field_generator", "1x kubejs:quasi_stable_neutron_star", "2x kubejs:ultimate_gem" ) .inputFluids("gtceu:omnium 576") .itemOutputs("32x kubejs:monic_circuit_board") .cleanroom(CleanroomType.CLEANROOM) .duration(1200) .EUt(2000000) event.recipes.gtceu.large_chemical_reactor("monic_processing_unit") .itemInputs("1x kubejs:monic_circuit_board", "6x gtceu:monium_single_wire", "8x gtceu:holmium_foil") .inputFluids("gtceu:iron_iii_chloride 12000") .itemOutputs("1x kubejs:monic_processing_unit") .cleanroom(CleanroomType.CLEANROOM) .duration(100) .EUt(3932160) event.recipes.gtceu.circuit_assembler("monic_processor") .itemInputs( "kubejs:monic_processing_unit", "kubejs:contained_singularity", "8x kubejs:complex_smd_resistor", "8x kubejs:complex_smd_capacitor", "8x kubejs:complex_smd_transistor", "16x gtceu:fine_holmium_wire" ) .inputFluids("gtceu:soldering_alloy 288") .itemOutputs("2x kubejs:monic_processor") .cleanroom(CleanroomType.CLEANROOM) .duration(10 * 20) .EUt(3932160) event.recipes.gtceu.circuit_assembler("monic_processor_assembly") .itemInputs( "kubejs:monic_processing_unit", "2x kubejs:monic_processor", "8x kubejs:complex_smd_inductor", "8x kubejs:complex_smd_capacitor", "8x kubejs:hyperdynamic_ram_chip", "16x gtceu:fine_holmium_wire" ) .inputFluids("gtceu:soldering_alloy 1152") .itemOutputs("2x kubejs:monic_processor_assembly") .cleanroom(CleanroomType.CLEANROOM) .duration(20 * 20) .EUt(3932160) event.recipes.gtceu.assembly_line("monic_processor_computer") .itemInputs( "kubejs:monic_processing_unit", "2x kubejs:monic_processor_assembly", "4x kubejs:contained_singularity", "16x kubejs:complex_smd_diode", "48x gtceu:nor_memory_chip", "16x kubejs:multidimensional_cpu_chip", "24x kubejs:hyperdynamic_ram_chip", "16x kubejs:quantum_soc_chip", "24x kubejs:uxpic_chip", "24x gtceu:fine_holmium_wire", "32x gtceu:polyethyl_cyanoacrylate_foil", "4x gtceu:infinity_plate" ) .inputFluids("gtceu:soldering_alloy 1152") .itemOutputs("1x kubejs:monic_processor_computer") .duration(20 * 20) .EUt(3932160) event.recipes.gtceu.assembly_line("monic_processor_mainframe") .itemInputs( "4x gtceu:monium_frame", "2x kubejs:monic_processor_computer", "64x kubejs:complex_smd_diode", "64x kubejs:complex_smd_capacitor", "64x kubejs:complex_smd_transistor", "64x kubejs:complex_smd_resistor", "64x kubejs:complex_smd_inductor", "64x kubejs:contained_singularity", "64x gtceu:nor_memory_chip", "64x gtceu:nand_memory_chip", "64x kubejs:multidimensional_cpu_chip", "64x kubejs:hyperdynamic_ram_chip", "64x kubejs:quantum_soc_chip", "16x gtceu:holmium_double_wire", "16x gtceu:polyethyl_cyanoacrylate_foil", "8x gtceu:infinity_plate" ) .inputFluids("gtceu:soldering_alloy 4320", "gtceu:omnium 1152") .itemOutputs("kubejs:monic_processor_mainframe") .duration(3200) .EUt(GTValues.VA[GTValues.UIV]) // SoC recipe for cheaper matter processor event.recipes.gtceu.circuit_assembler("matter_processor_soc") .itemInputs( "kubejs:matter_processing_unit", "kubejs:quantum_soc_chip", "8x gtceu:fine_ruthenium_trinium_americium_neutronate_wire", "8x gtceu:activated_netherite_bolt" ) .itemOutputs("4x kubejs:matter_processor") .cleanroom(CleanroomType.CLEANROOM) .duration(5 * 20) .EUt(3932160) })