shMonifactory/kubejs/server_scripts/mods/Solar_Flux.js
2025-09-14 20:52:18 +03:00

248 lines
8.5 KiB
JavaScript

/**
* Solar Flux mod script.
*
* Adds recipes for:
* Solar Flux Solars
* Photovoltaic Cells
* Sunnarium
* GT <-> Solarflux conversion recipes
* Does not add recipes for:
* Sculk Solars
* Neutronium & Infinity Solars
*/
ServerEvents.recipes(event => {
// T1 (No photovoltaic cell)
event.shaped("2x solarflux:sp_1", [
"MMM",
"WWW",
"SCS"
], {
M: "solarflux:mirror",
W: "gtceu:fine_copper_wire",
S: "minecraft:stone_slab",
C: "laserio:energy_overclocker_card_tier_1"
})
event.recipes.gtceu.assembler("sp_1")
.itemInputs([
Item.of("solarflux:mirror", 3),
Item.of("gtceu:fine_copper_wire", 3),
Item.of("minecraft:stone_slab", 2),
Item.of("laserio:energy_overclocker_card_tier_1", 1)
])
.itemOutputs("2x solarflux:sp_1")
.duration(2400)
.EUt(2)
// All the other panels follow a pattern until 7
let solarCrafting = [
["gtceu:tin_single_cable", "minecraft:redstone_block", "gtceu:cupronickel_plate", "laserio:energy_overclocker_card_tier_2"],
["gtceu:electrical_steel_plate", "gtceu:conductive_alloy_block", "gtceu:electrical_steel_gear", "laserio:energy_overclocker_card_tier_3"],
["gtceu:microversium_ingot", "gtceu:end_steel_block", "gtceu:microversium_ingot", "laserio:energy_overclocker_card_tier_4"],
["gtceu:lumium_plate", "gtceu:sunnarium_dust", "gtceu:lumium_plate", "laserio:energy_overclocker_card_tier_5"],
["gtceu:signalum_plate", "gtceu:enriched_sunnarium_dust", "gtceu:signalum_plate", "laserio:energy_overclocker_card_tier_6"]
]
solarCrafting.forEach((ingredients, index) => {
// Account for the first recipe, which doesn't use a photovoltaic cell
let photovoltaic = index == 0 ?
"gtceu:tempered_glass"
: `solarflux:photovoltaic_cell_${index}`
event.shaped(`2x solarflux:sp_${index + 2}`, [
"SCS",
"WBW",
"PEP"
], {
S: `solarflux:sp_${index + 1}`,
C: photovoltaic,
W: ingredients[0],
B: ingredients[1],
P: ingredients[2],
E: ingredients[3]
})
// Account for when the same ingredients are used twice
let assemblerInputs;
if (ingredients[0] == ingredients[2]) {
assemblerInputs = [
`2x solarflux:sp_${index + 1}`,
Item.of(photovoltaic, 1),
Item.of(ingredients[0], 4),
Item.of(ingredients[1], 1),
Item.of(ingredients[3], 1)
]
} else {
assemblerInputs = [
`2x solarflux:sp_${index + 1}`,
Item.of(photovoltaic, 1),
Item.of(ingredients[0], 2),
Item.of(ingredients[1], 1),
Item.of(ingredients[2], 2),
Item.of(ingredients[3], 1)
]
}
event.recipes.gtceu.assembler(`sp_${index + 2}`)
.itemInputs(assemblerInputs)
.itemOutputs(`2x solarflux:sp_${index + 2}`)
.duration(2400)
.EUt(GTValues.VA[index])
})
// High tier solars
// T7
event.recipes.gtceu.assembler("sp_7")
.itemInputs("2x solarflux:sp_6", "3x solarflux:photovoltaic_cell_5", "2x gtceu:osmium_plate", "laserio:energy_overclocker_card_tier_7")
.inputFluids("gtceu:signalum 1296")
.itemOutputs("2x solarflux:sp_7")
.duration(2400)
.EUt(GTValues.VA[GTValues.IV])
// T8
event.recipes.gtceu.assembly_line("sp_8")
.itemInputs("2x solarflux:sp_7", "3x solarflux:photovoltaic_cell_6", "2x gtceu:osmiridium_plate", "laserio:energy_overclocker_card_tier_8")
.inputFluids("gtceu:enderium 1296")
.itemOutputs("2x solarflux:sp_8")
["scannerResearch(java.util.function.UnaryOperator)"](b => b.researchStack("solarflux:sp_7").EUt(480).duration(1200))
.duration(4800)
.EUt(30720)
//
// Photovoltaic Cell Recipes
//
// Similar thing with the photovoltaic cells, cells 2-6 follow a pattern (1 uses mirror)
// Mirror
event.shaped("solarflux:mirror", [
"GGG",
"SSS",
" "
], {
G: "minecraft:glass_pane",
S: "gtceu:silver_plate"
})
// Photovoltaic Cell T1
event.shaped("6x solarflux:photovoltaic_cell_1", [
"LLL",
"MMM",
"FFF"
], {
L: "gtceu:lapis_plate",
M: "solarflux:mirror",
F: "gtceu:fluix_plate"
})
// Photovoltaic Cells T2-6
let cellCrafting = [
[2, "enderio:photovoltaic_plate", "gtceu:battery_alloy_plate"],
[3, "minecraft:ender_pearl", "gtceu:annealed_copper_plate"],
[4, "gtceu:light_blue_glass_lens", "gtceu:vibrant_alloy_plate"],
[5, "gtceu:sunnarium_plate", "gtceu:sunnarium_plate"],
[6, "gtceu:enriched_sunnarium_plate", "gtceu:enriched_sunnarium_plate"]
]
cellCrafting.forEach(cell => {
event.shaped(`6x solarflux:photovoltaic_cell_${cell[0]}`, [
"TTT",
"PPP",
"BBB"
], {
T: cell[1],
P: `solarflux:photovoltaic_cell_${cell[0] - 1}`,
B: cell[2]
})
})
// Sunnarium
event.shaped("3x gtceu:sunnarium_dust", [
"ABA",
"BCB",
"ABA"
], {
A: "kubejs:stabilized_plutonium",
B: "kubejs:stabilized_americium",
C: "minecraft:glowstone"
})
event.recipes.gtceu.mixer("kubejs:sunnarium_dust_mixer")
.inputFluids("gtceu:plutonium 144", "gtceu:americium 72")
.itemInputs("minecraft:glowstone_dust")
.itemOutputs("2x gtceu:sunnarium_dust")
.duration(1800)
.EUt(GTValues.VHA[GTValues.IV]);
event.recipes.gtceu.mixer("kubejs:sunnarium_dust_mixer_alt")
.inputFluids("gtceu:plutonium_241 144", "gtceu:americium 72")
.itemInputs("minecraft:glowstone_dust")
.itemOutputs("2x gtceu:sunnarium_dust")
.duration(1800)
.EUt(GTValues.VHA[GTValues.IV]);
event.remove({ id: "gtceu:macerator/macerate_sunnarium_plate" })
// Enriched Sunnarium
event.shaped("4x gtceu:enriched_sunnarium_dust", [
"ABA",
"BCB",
"ABA"
], {
A: "kubejs:stabilized_neptunium",
B: "kubejs:stabilized_curium",
C: "gtceu:sunnarium_dust"
})
event.recipes.gtceu.mixer("kubejs:enriched_sunnarium_dust_mixer")
.inputFluids("gtceu:neptunium 288", "gtceu:curium 144")
.itemInputs("gtceu:sunnarium_dust")
.itemOutputs("6x gtceu:enriched_sunnarium_dust")
.duration(2400)
.EUt(GTValues.VHA[GTValues.LuV]);
event.remove({ id: "gtceu:macerator/macerate_enriched_sunnarium_plate" })
event.remove({ id: "gtceu:macerator/macerate_dense_enriched_sunnarium_plate" })
})
/* Gregtech Solar conversion/reversion */
ServerEvents.recipes(event => {
event.remove({ id: /gtceu:shaped\/solar_panel_/ })
// Basic conversion & reversion
event.shapeless("2x gtceu:solar_panel", "solarflux:sp_3").id("gtceu:solar_panel_basic_conversion")
event.shapeless("solarflux:sp_3", "2x gtceu:solar_panel").id("gtceu:solar_panel_basic_reversion")
// Generic conversion & reversion (Note the switch for Sculk solars)
for (let index = 0; index <= 8; index++) {
let tiername = TIER_ID_MAPPING[index].toLowerCase();
let solarFluxPanel;
if (index <= 4) {
solarFluxPanel = `solarflux:sp_${index + 4}`;
} else {
switch (index) {
case 5:
solarFluxPanel = "solarflux:sp_custom_bathyal"
break;
case 6:
solarFluxPanel = "solarflux:sp_custom_abyssal"
break;
case 7:
solarFluxPanel = "solarflux:sp_custom_hadal"
break;
case 8:
solarFluxPanel = "solarflux:sp_custom_neutronium"
break;
default:
break;
}
}
event.recipes.gtceu.atomic_reconstruction(`gtceu:solar_panel_${tiername}_conversion`)
.itemInputs(solarFluxPanel)
.itemOutputs(`gtceu:${tiername}_solar_panel`)
.duration(5)
.EUt(32)
event.recipes.gtceu.atomic_reconstruction(`gtceu:solar_panel_${tiername}_reversion`)
.itemInputs(`gtceu:${tiername}_solar_panel`)
.itemOutputs(solarFluxPanel)
.duration(5)
.EUt(32)
}
})