/** * Atomic Reconstructor singleblock */ ServerEvents.recipes(event => { const reconstructedItems = [ ["minecraft:redstone", "gtceu:restonia_gem", GTValues.VA[GTValues.MV], "restonia"], ["minecraft:iron_ingot", "gtceu:enori_gem", GTValues.VA[GTValues.MV], "enori"], ["minecraft:coal", "gtceu:void_gem", GTValues.VA[GTValues.MV], "void"], ["minecraft:lapis_lazuli", "gtceu:palis_gem", GTValues.VA[GTValues.MV], "palis"], ["minecraft:diamond", "gtceu:diamatine_gem", GTValues.VA[GTValues.MV], "diamatine"], ["minecraft:emerald", "gtceu:emeradic_gem", GTValues.VA[GTValues.MV], "emeradic"], ["minecraft:coal_block", "gtceu:void_block", GTValues.VA[GTValues.MV], "void_block"], ["#forge:storage_blocks/redstone", "gtceu:restonia_block", GTValues.VA[GTValues.MV], "restonia_block"], ["#forge:storage_blocks/lapis", "gtceu:palis_block", GTValues.VA[GTValues.MV], "palis_block"], ["#forge:storage_blocks/diamond", "gtceu:diamatine_block", GTValues.VA[GTValues.MV], "diamatine_block"], ["#forge:storage_blocks/emerald", "gtceu:emeradic_block", GTValues.VA[GTValues.MV], "emeradic_block"], ["#forge:storage_blocks/iron", "gtceu:enori_block", GTValues.VA[GTValues.MV], "enori_block"], ["minecraft:sand", "minecraft:soul_sand", GTValues.VA[GTValues.MV], "soul_sand"], ["minecraft:quartz", "minecraft:prismarine_shard", GTValues.VA[GTValues.MV], "prismarine_shard"], ["minecraft:rotten_flesh", "minecraft:leather", GTValues.VA[GTValues.LV], "leather"], ["gtceu:topaz_gem", "minecraft:prismarine_crystals", GTValues.VA[GTValues.MV], "prismarine_crystals"], ["gtceu:steel_ingot", "gtceu:damascus_steel_ingot", GTValues.VA[GTValues.MV], "damascus_steel"], ["gtceu:diamatine_block", "kubejs:starry_diamond_block", GTValues.VA[GTValues.MV], "starry_diamond"], ["gtceu:obsidian_dust", "enderio:grains_of_infinity", GTValues.VA[GTValues.LV], "temp_grains"], ["minecraft:dried_kelp", "minecraft:wither_rose", GTValues.VA[GTValues.LV], "wither_rose"], ["gtceu:plant_ball", "minecraft:kelp", GTValues.VA[GTValues.LV], "kelp"], ["minecraft:obsidian", "minecraft:crying_obsidian", GTValues.VA[GTValues.LV], "crying_obsidian"], ["#forge:dyes/black", "minecraft:ink_sac", GTValues.VA[GTValues.LV], "ink_sac"], ["minecraft:ink_sac", "minecraft:glow_ink_sac", GTValues.VA[GTValues.LV], "glow_ink_sac"], ["thermal:rubberwood_sapling", "gtceu:rubber_sapling", GTValues.VA[GTValues.LV], "rubberwood_to_rubber"], ["gtceu:rubber_sapling", "thermal:rubberwood_sapling", GTValues.VA[GTValues.LV], "rubber_to_rubberwood"], ] const crystals = ["enori", "void", "palis", "diamatine", "restonia", "emeradic"] crystals.forEach(crystal => { event.remove({ id: `gtceu:shaped/gear_${crystal}` }) event.remove({ id: `gtceu:shaped/gear_${crystal}_empowered` }) }) // Black Quartz event.recipes.gtceu.electrolyzer("kubejs:black_quartz_dust") .itemInputs("4x gtceu:quartzite_dust") .itemOutputs("gtceu:black_quartz_dust") .duration(400) .EUt(90) event.recipes.gtceu.autoclave("kubejs:black_quartz_gem__water") .itemInputs("gtceu:black_quartz_dust") .inputFluids(Fluid.of("minecraft:water", 250)) .itemOutputs("gtceu:black_quartz_gem") .duration(1200) .EUt(24) event.recipes.gtceu.autoclave("kubejs:black_quartz_gem__distilled") .itemInputs("gtceu:black_quartz_dust") .inputFluids(Fluid.of("gtceu:distilled_water", 50)) .itemOutputs("gtceu:black_quartz_gem") .duration(600) .EUt(24) // Black quartz, tag-based recipes for Tinted Glass event.replaceInput({ output: "minecraft:tinted_glass" }, "minecraft:glass", "#forge:glass") event.replaceInput({ output: "minecraft:tinted_glass" }, "minecraft:amethyst_shard", "#forge:gems/amethyst") event.shaped("2x minecraft:tinted_glass", [ " Q ", "QGQ", " Q " ], { Q: "#forge:gems/black_quartz", G: "#forge:glass" }).id("kubejs:tinted_glass_black_quartz") event.recipes.gtceu.assembler("tinted_glass_black_quartz") .itemInputs("2x #forge:gems/black_quartz", "#forge:glass") .itemOutputs("minecraft:tinted_glass") .duration(100) .EUt(GTValues.VA[GTValues.LV]) // Reconstruction reconstructedItems.forEach(([input, output, eut, id]) => { event.recipes.gtceu.atomic_reconstruction(`kubejs:${id}`) .itemInputs(input) .itemOutputs(output) .duration(20) .EUt(eut) }) // Universal Circuits const tiers = ["ulv", "lv", "mv", "hv", "ev", "iv", "luv", "zpm", "uv", "uhv", "uev", "uiv"] tiers.forEach((level) => { event.recipes.gtceu.atomic_reconstruction(`kubejs:${level}_universal_circuit`) .itemInputs(`#gtceu:circuits/${level}`) .itemOutputs(`kubejs:${level}_universal_circuit`) .EUt(32) .duration(5) }) const reconstructorrecipe = [ ["lv", "lead"], ["mv", "rose_gold"], ["hv", "beryllium"], ["ev", "platinum"], ["iv", "rhodium"], ["luv", "osmiridium"], ["zpm", "naquadah"], ["uv", "duranium"], ["uhv", "tritanium"], ["uev", "omnium"], ["uiv", "holmium"] ] reconstructorrecipe.forEach(([tier, plate]) => { event.shaped(`gtceu:${tier}_atomic_reconstructor`, [ "CPC", "EHE", "PPM" ], { P: `gtceu:${plate}_plate`, E: `gtceu:${tier}_emitter`, H: `gtceu:${tier}_machine_hull`, C: `#gtceu:circuits/${tier}`, M: `gtceu:${tier}_electric_motor` }).id(`kubejs:shaped/${tier}_atomic_reconstructor`) }) // Crystal Gears crystals.forEach(crystal => { event.recipes.gtceu.extruder(`kubejs:${crystal}_gear`) .itemInputs(`4x gtceu:${crystal}_gem`) .itemOutputs(`gtceu:${crystal}_gear`) .notConsumable("gtceu:gear_extruder_mold") .duration(80) .EUt(56) }) // Flower conversion convenience recipes const flowerCycle = [ "dandelion", "poppy", "blue_orchid", "allium", "azure_bluet", "red_tulip", "orange_tulip", "white_tulip", "pink_tulip", "oxeye_daisy", "cornflower", "lily_of_the_valley", // 'sunflower', //Flowers that give 2x as much dye are excluded. Sorry! // 'lilac', // 'rose_bush', // 'peony', "spore_blossom", "wither_rose", "dead_bush" ] reconstructCycle(flowerCycle); // Fungus conversion convenience recipes const fungusCycle = [ "red_mushroom", "brown_mushroom", "nether_wart" ] reconstructCycle(fungusCycle); /** * Creates a "cycle" of Atomic Reconstructor recipes that allow players to transmute * any one item in the cycle into any other, through repeated applications of Atomic Reconstruction. * Best applied to plants or fungi, where getting one enables you to get many more easily. * * @param {Ingredient[]} cycle The array of ingredients for the AR to cycle through */ function reconstructCycle(cycle) { cycle.forEach((flower, index) => { let curItem = cycle[index]; let nextItem = cycle[(index + 1) % cycle.length]; event.recipes.gtceu.atomic_reconstruction(`gtceu:${curItem}_to_${nextItem}`) .itemInputs(`minecraft:${curItem}`) .itemOutputs(`minecraft:${nextItem}`) .EUt(GTValues.VA[GTValues.LV]) .duration(30) }) } })