ServerEvents.recipes(event => {
    //
    function ElectrolyzeFluid(fluid, mode, tank, amount) {
        return ({
            "type": "custommachinery:fluid",
            "mode": mode,
            "tank": tank,
            "fluid": fluid,
            "amount": amount
        })
    }
    function ElectrolyzeFluidInput1(fluid, amount) {
        return (ElectrolyzeFluid(fluid, "input", "fluidInput1", amount))
    }
    function ElectrolyzeFluidInput2(fluid, amount) {
        return (ElectrolyzeFluid(fluid, "input", "fluidInput2", amount))
    }
    //阴极
    function ElectrolyzeFluidOutput1(fluid, amount) {
        return (ElectrolyzeFluid(fluid, "output", "fluidOutput1", amount))
    }
    //阳极
    function ElectrolyzeFluidOutput2(fluid, amount) {
        return (ElectrolyzeFluid(fluid, "output", "fluidOutput2", amount))
    }
    function ElectrolyzeFluidOutput3(fluid, amount) {
        return (ElectrolyzeFluid(fluid, "output", "fluidOutput3", amount))
    }
    function ElectrolyzeEnergyInput(amount) {
        return ({
            "type": "custommachinery:energy_per_tick",
            "mode": "input",
            "amount": amount
        })
    }
    const ElectrolyzeStructure =
    {
        "type": "custommachinery:structure",
        "pattern": [
            [
                "  AAAAA  ",
                "AAABBBAAA",
                "AAABBBAAA",
                "AAABBBAAA",
                "  AAAAA  ",
                "  AAAAA  "
            ], [
                "DDE   EDD",
                "  FGGGF  ",
                "  FGHGF  ",
                "  FGGGF  ",
                "DDAIIIADD",
                "  A   A  "
            ], [
                "         ",
                "    J    ",
                " K JLJ K ",
                "    M    ",
                "  E   E  ",
                "         "
            ], [
                "         ",
                "    N    ",
                " OMAPAMO ",
                "    J    ",
                "         ",
                "         "
            ], [
                "         ",
                "         ",
                " OMAPAMO ",
                "         ",
                "         ",
                "         "
            ], [
                "         ",
                "    J    ",
                " O APA O ",
                "   F F   ",
                "         ",
                "         "
            ], [
                "         ",
                "         ",
                " R QmQ R ",
                "   Q Q   ",
                "         ",
                "         "
            ], [
                "         ",
                "         ",
                " T  L  T ",
                "         ",
                "         ",
                "         "
            ], [
                "         ",
                "         ",
                " T  E  T ",
                "         ",
                "         ",
                "         "
            ]
        ],
        "keys":
        {
            "K": "create_things_and_misc:brass_brick_slab",
            "J": "design_decor:diagonal_metal_support",
            "R": "kubejs:carbon_electrode",
            "M": "create:smart_fluid_pipe",
            "B": "create:railway_casing",
            "I": "create:item_drain",
            "N": "design_decor:stepped_lever",
            "A": "create:copper_casing",
            "O": "create:fluid_tank",
            "L": "design_decor:brass_boiler",
            "G": "design_decor:brass_boiler_structure",
            "H": "design_decor:brass_boiler_large",
            "Q": "create:fluid_pipe",
            "E": "design_decor:andesite_floodlight",
            "F": "create:mechanical_pump",
            "P": "design_decor:copper_boiler",
            "T": "createaddition:modular_accumulator",
            "D": "design_decor:copper_railing",
        }
    }
    const ElectrolyzeSound = {
        "type": "custommachinery:command",
        "phase": "ending",
        "command": "/playsound create:steam block @a[distance=..24] ~ ~-3.5 ~ 0.3",
        "log": false,
        "permissionlevel": 5
    }
    const ElectrolyzeParticle = {
        "type": "custommachinery:command",
        "phase": "crafting_tickable",
        "command": "/particle minecraft:electric_spark ~ ~-2.5 ~ 1 2.5 1 0.1 8",
        "log": false,
        "permissionlevel": 5
    }
    const ElectrolyzeFluidFilter = [
        "minecraft:air",
        "minecraft:void_air",
        "minecraft:cave_air",
        "ad_astra:oxygen[level=1]",
        "ad_astra:oxygen[level=2]",
        "ad_astra:oxygen[level=3]",
        "ad_astra:oxygen[level=4]",
        "ad_astra:oxygen[level=5]",
        "ad_astra:oxygen[level=6]",
        "ad_astra:oxygen[level=7]",
        "ad_astra:oxygen[level=8]",
        "ad_astra:oxygen[level=9]",
        "ad_astra:oxygen[level=10]",
        "ad_astra:oxygen[level=11]",
        "ad_astra:oxygen[level=12]",
        "ad_astra:oxygen[level=13]",
        "ad_astra:oxygen[level=14]",
        "ad_astra:oxygen[level=15]",
        "ad_astra:hydrogen[level=1]",
        "ad_astra:hydrogen[level=2]",
        "ad_astra:hydrogen[level=3]",
        "ad_astra:hydrogen[level=4]",
        "ad_astra:hydrogen[level=5]",
        "ad_astra:hydrogen[level=6]",
        "ad_astra:hydrogen[level=7]",
        "ad_astra:hydrogen[level=8]",
        "ad_astra:hydrogen[level=9]",
        "ad_astra:hydrogen[level=10]",
        "ad_astra:hydrogen[level=11]",
        "ad_astra:hydrogen[level=12]",
        "ad_astra:hydrogen[level=13]",
        "ad_astra:hydrogen[level=14]",
        "ad_astra:hydrogen[level=15]",
        "kubejs:nitrogen_dioxide[level=1]",
        "kubejs:nitrogen_dioxide[level=2]",
        "kubejs:nitrogen_dioxide[level=3]",
        "kubejs:nitrogen_dioxide[level=4]",
        "kubejs:nitrogen_dioxide[level=5]",
        "kubejs:nitrogen_dioxide[level=6]",
        "kubejs:nitrogen_dioxide[level=7]",
        "kubejs:nitrogen_dioxide[level=8]",
        "kubejs:nitrogen_dioxide[level=9]",
        "kubejs:nitrogen_dioxide[level=10]",
        "kubejs:nitrogen_dioxide[level=11]",
        "kubejs:nitrogen_dioxide[level=12]",
        "kubejs:nitrogen_dioxide[level=13]",
        "kubejs:nitrogen_dioxide[level=14]",
        "kubejs:nitrogen_dioxide[level=15]",
        "kubejs:chlorine[level=1]",
        "kubejs:chlorine[level=2]",
        "kubejs:chlorine[level=3]",
        "kubejs:chlorine[level=4]",
        "kubejs:chlorine[level=5]",
        "kubejs:chlorine[level=6]",
        "kubejs:chlorine[level=7]",
        "kubejs:chlorine[level=8]",
        "kubejs:chlorine[level=9]",
        "kubejs:chlorine[level=10]",
        "kubejs:chlorine[level=11]",
        "kubejs:chlorine[level=12]",
        "kubejs:chlorine[level=13]",
        "kubejs:chlorine[level=14]",
        "kubejs:chlorine[level=15]",
        "kubejs:caustic_soda[level=1]",
        "kubejs:caustic_soda[level=2]",
        "kubejs:caustic_soda[level=3]",
        "kubejs:caustic_soda[level=4]",
        "kubejs:caustic_soda[level=5]",
        "kubejs:caustic_soda[level=6]",
        "kubejs:caustic_soda[level=7]",
        "kubejs:caustic_soda[level=8]",
        "kubejs:caustic_soda[level=9]",
        "kubejs:caustic_soda[level=10]",
        "kubejs:caustic_soda[level=11]",
        "kubejs:caustic_soda[level=12]",
        "kubejs:caustic_soda[level=13]",
        "kubejs:caustic_soda[level=14]",
        "kubejs:caustic_soda[level=15]",
        "kubejs:nitric_acid[level=1]",
        "kubejs:nitric_acid[level=2]",
        "kubejs:nitric_acid[level=3]",
        "kubejs:nitric_acid[level=4]",
        "kubejs:nitric_acid[level=5]",
        "kubejs:nitric_acid[level=6]",
        "kubejs:nitric_acid[level=7]",
        "kubejs:nitric_acid[level=8]",
        "kubejs:nitric_acid[level=9]",
        "kubejs:nitric_acid[level=10]",
        "kubejs:nitric_acid[level=11]",
        "kubejs:nitric_acid[level=12]",
        "kubejs:nitric_acid[level=13]",
        "kubejs:nitric_acid[level=14]",
        "kubejs:nitric_acid[level=15]"
    ]
    
    function ElectrolyzeItem(mode,item,amount){
        return({
            "type": "custommachinery:item",
            "mode": mode,
            "item": item,
            "amount": amount
        })
    }
    function ElectrolyzeFluidOutPositive(fluid) {
        event.custom({
            "type": "custommachinery:custom_machine",
            "machine": "dut:electrolytic_cell",
            "time": 1,
            "priority": 4,
            "error": true,
            "hidden": true,
            "requirements": [
                ElectrolyzeFluid(fluid, "input", "fluidOutput2", 1000),
                {
                    "type": "custommachinery:block",
                    "mode": "input",
                    "action": "replace_destroy",
                    "amount": 1,
                    "pos": [-3,-5,1,-3,-5,-1],
                    "filter": ElectrolyzeFluidFilter,
                    "whitelist": true,
                    "block": fluid
                },
                {
                    "type": "custommachinery:block",
                    "mode": "input",
                    "action": "replace_destroy",
                    "amount": 1,
                    "pos": [-3,0,0,-3,0,0],
                    "filter": ["kubejs:carbon_electrode"],
                    "whitelist": true,
                    "block": "minecraft:air",
                    "chance":0.005
                }
            ]
        }).id("dut_create:electrolytic_cell/output_positive_" + fluid.split(":")[1])
    }
    function ElectrolyzeFluidOutNegative(fluid) {
        event.custom({
            "type": "custommachinery:custom_machine",
            "machine": "dut:electrolytic_cell",
            "time": 1,
            "priority": 5,
            "hidden": true,
            "error": true,
            "requirements": [
                ElectrolyzeFluid(fluid, "input", "fluidOutput1", 1000),
                {
                    "type": "custommachinery:block",
                    "mode": "input",
                    "action": "replace_destroy",
                    "amount": 1,
                    "pos": [3,-5,1,3,-5,-1],
                    "filter": ElectrolyzeFluidFilter,
                    "whitelist": true,
                    "block": fluid
                },
                {
                    "type": "custommachinery:block",
                    "mode": "input",
                    "action": "replace_destroy",
                    "amount": 1,
                    "pos": [3,0,0,3,0,0],
                    "filter": ["kubejs:carbon_electrode"],
                    "whitelist": true,
                    "block": "minecraft:air",
                    "chance":0.005
                }
            ]
        }).id("dut_create:electrolytic_cell/output_negative_" + fluid.split(":")[1])
    }
    function ElectrolyzeFluidOutSub(fluid) {
        event.custom({
            "type": "custommachinery:custom_machine",
            "machine": "dut:electrolytic_cell",
            "time": 1,
            "priority": 6,
            "hidden": true,
            "error": true,
            "requirements": [
                ElectrolyzeFluid(fluid, "input", "fluidOutput3", 1000),
                {
                    "type": "custommachinery:block",
                    "mode": "input",
                    "action": "replace_destroy",
                    "amount": 1,
                    "pos": [1,-5,3,-1,-5,3],
                    "filter": ElectrolyzeFluidFilter,
                    "whitelist": true,
                    "block": fluid
                }
            ]
        }).id("dut_create:electrolytic_cell/output_sub_" + fluid.split(":")[1])
    }
    function ElectrolyzeBiome(biome) {
      return ({
        "type": "custommachinery:biome",
        "filter": biome,
        "blacklist": false
      })
    }
    ElectrolyzeFluidOutNegative("ad_astra:hydrogen")
    ElectrolyzeFluidOutNegative("kubejs:nitrogen_dioxide")
    ElectrolyzeFluidOutPositive("kubejs:chlorine")
    ElectrolyzeFluidOutPositive("ad_astra:oxygen")
    ElectrolyzeFluidOutSub("kubejs:caustic_soda")
    ElectrolyzeFluidOutSub("kubejs:nitrogen_dioxide")
    ElectrolyzeFluidOutSub("kubejs:nitric_acid")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 60,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(2880),
            ElectrolyzeFluidInput1("minecraft:water", 8000),
            ElectrolyzeFluidOutput1("ad_astra:hydrogen", 8000),
            ElectrolyzeFluidOutput2("ad_astra:oxygen", 4000)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(2880),
            ElectrolyzeFluidInput1("minecraft:water", 8000),
            ElectrolyzeFluidOutput1("ad_astra:hydrogen", 8000),
            ElectrolyzeFluidOutput2("ad_astra:oxygen", 4000)
        ]
    }).id("dut_create:electrolytic_cell/water")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 30,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(5760),
            ElectrolyzeFluidInput1("kubejs:saline_water", 8000),
            ElectrolyzeFluidOutput1("ad_astra:hydrogen", 4000),
            ElectrolyzeFluidOutput2("kubejs:chlorine", 4000),
            ElectrolyzeFluidOutput3("kubejs:caustic_soda", 8000)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(5760),
            ElectrolyzeFluidInput1("kubejs:saline_water", 8000),
            ElectrolyzeFluidOutput1("ad_astra:hydrogen", 4000),
            ElectrolyzeFluidOutput2("kubejs:chlorine", 4000),
            ElectrolyzeFluidOutput3("kubejs:caustic_soda", 8000)
        ]
    }).id("dut_create:electrolytic_cell/saline_water")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 50,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(4320),
            ElectrolyzeFluidInput1("kubejs:nitrogen", 3000),
            ElectrolyzeFluidInput2("ad_astra:oxygen", 6000),
            ElectrolyzeFluidOutput3("kubejs:nitrogen_dioxide", 6000)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(4320),
            ElectrolyzeFluidInput1("kubejs:nitrogen", 3000),
            ElectrolyzeFluidInput2("ad_astra:oxygen", 6000),
            ElectrolyzeFluidOutput3("kubejs:nitrogen_dioxide", 6000)
        ]
    }).id("dut_create:electrolytic_cell/nitrogen_dioxide")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 50,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(2880),
            ElectrolyzeFluidInput1("kubejs:ammonia", 4000),
            ElectrolyzeFluidInput2("ad_astra:oxygen", 16000),
            ElectrolyzeFluidOutput1("kubejs:nitrogen_dioxide", 2000),
            ElectrolyzeFluidOutput3("kubejs:nitric_acid", 2000)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(2880),
            ElectrolyzeFluidInput1("kubejs:ammonia", 4000),
            ElectrolyzeFluidInput2("ad_astra:oxygen", 16000),
            ElectrolyzeFluidOutput1("kubejs:nitrogen_dioxide", 2000),
            ElectrolyzeFluidOutput3("kubejs:nitric_acid", 2000)
        ]
    }).id("dut_create:electrolytic_cell/nitric_acid")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 60,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(7200),
            ElectrolyzeFluidInput2("kubejs:fused_alumina", 2880),
            ElectrolyzeItem("output","kubejs:aluminum_slag",32)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(7200),
            ElectrolyzeFluidInput2("kubejs:fused_alumina", 2880),
            ElectrolyzeItem("output","kubejs:aluminum_slag",32)
        ]
    }).id("dut_create:electrolytic_cell/aluminum_slag")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 240,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(98304),
            ElectrolyzeFluidInput2("createbigcannons:molten_steel", 360),
            ElectrolyzeItem("input","iceandfire:lightning_dragon_blood",4),
            ElectrolyzeItem("output","iceandfire:dragonsteel_lightning_ingot",4)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(98304),
            ElectrolyzeFluidInput2("createbigcannons:molten_steel", 360),
            ElectrolyzeItem("input","iceandfire:lightning_dragon_blood",4),
            ElectrolyzeItem("output","iceandfire:dragonsteel_lightning_ingot",4)
        ]
    }).id("dut_create:electrolytic_cell/dragonsteel_lightning_ingot")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 240,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(7200),
            ElectrolyzeFluidInput1("kubejs:brass", 720),
            ElectrolyzeFluidInput2("kubejs:tin", 1440),
            ElectrolyzeItem("input","kubejs:granite_alloy",16),
            ElectrolyzeItem("output","kubejs:bronze_triangle",4)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(7200),
            ElectrolyzeFluidInput1("kubejs:brass", 720),
            ElectrolyzeFluidInput2("kubejs:tin", 1440),
            ElectrolyzeItem("input","kubejs:granite_alloy",16),
            ElectrolyzeItem("output","kubejs:bronze_triangle",4)
        ]
    }).id("dut_create:electrolytic_cell/bronze_triangle")
    event.custom({
        "type": "custommachinery:custom_machine",
        "machine": "dut:electrolytic_cell",
        "time": 60,
        "priority": 1,
        "error": true,
        "requirements": [
            ElectrolyzeStructure,
            ElectrolyzeSound,
            ElectrolyzeParticle,
            ElectrolyzeEnergyInput(1440),
            ElectrolyzeBiome("ad_astra:orbit"),
            ElectrolyzeItem("input","kubejs:granite_alloy",16),
            ElectrolyzeItem("output","kubejs:diorite_alloy",16),
            ElectrolyzeFluidOutput3("kubejs:nitrogen", 250)
        ],
        "jei": [
            ElectrolyzeStructure,
            ElectrolyzeEnergyInput(1440),
            ElectrolyzeBiome("ad_astra:orbit"),
            ElectrolyzeItem("input","kubejs:granite_alloy",16),
            ElectrolyzeItem("output","kubejs:diorite_alloy",16),
            ElectrolyzeFluidOutput3("kubejs:nitrogen", 250)
        ]
    }).id("dut_create:electrolytic_cell/granite_alloy")

})