onEvent('recipes', e => {
    //Soils
    function makeFarmland(input, name, categories, growthModifier) {
        e.recipes.botanypots.soil({
            input: {
                item: input
            },
            display: {
                block: input,
                properties: {
                    moisture: 7
                }
            },
            categories: categories,
            growthModifier: growthModifier
        }).id('kubejs:botany_pots/soil/' + name)
    }

    function makeSoil(input, name, categories, growthModifier) {
        e.recipes.botanypots.soil({
            input: {
                item: input
            },
            display: {
                block: input
            },
            categories: categories,
            growthModifier: growthModifier
        }).id('kubejs:botany_pots/soil/' + name)
    }

    makeFarmland('mysticalagradditions:insanium_farmland', 'insanium_farmland', ['dirt', 'farmland', 'inferium', 'prudentium', 'tertium', 'imperium', 'supremium', 'insanium'], 0.50)
    makeSoil('kubejs:magical_soil', 'magical_soil', ['dirt', 'farmland', 'inferium', 'prudentium', 'tertium', 'imperium', 'supremium', 'insanium', 'magical'], 0.75)

    //MA Crop functions
    var ma = 'mysticalagriculture:'

    function t1(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'inferium'
                ],
                growthTicks: 1200,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.05,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.01,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    function t2(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'prudentium'
                ],
                growthTicks: 1900,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.05,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.01,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    function t3(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'tertium'
                ],
                growthTicks: 2400,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.05,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.01,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    function t4(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'imperium'
                ],
                growthTicks: 3200,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.05,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.01,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    function t5(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'supremium'
                ],
                growthTicks: 4000,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.05,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.01,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    function t6(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'insanium'
                ],
                growthTicks: 5000,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.03,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.03,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    function t7(types) {
        utils.listOf(types).forEach(function(type) {
            e.remove({
                id: 'mysticalagriculture:crops/' + type
            })
            e.recipes.botanypots.crop({
                seed: {
                    item: ma + type + '_seeds'
                },
                categories: [
                    'magical'
                ],
                growthTicks: 6000,
                display: {
                    block: ma + type + '_crop',
                    properties: {
                        age: 7
                    }
                },
                results: [{
                        chance: 0.75,
                        output: {
                            item: ma + type + '_essence'
                        },
                        minRolls: 1,
                        maxRolls: 3
                    },
                    {
                        chance: 0.01,
                        output: {
                            item: ma + type + '_seeds'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    },
                    {
                        chance: 0.1,
                        output: {
                            item: 'mysticalagriculture:fertilized_essence'
                        },
                        minRolls: 1,
                        maxRolls: 1
                    }
                ]
            }).id('kubejs:botany_pots/crop/mystical_agriculture/' + type)
        })
    }

    //Tier 1 Crops
    t1([
        'inferium',
        'air',
        'earth',
        'fire',
        'water',
        'dirt',
        'wood',
        'ice',
        'stone'
    ])

    //Tier 2 Crops
    t2([
        'aluminum',
        'chicken',
        'coal',
        'copper',
        'coral',
        'cow',
        'dye',
        'fish',
        'honey',
        'iridium',
        'mystical_flower',
        'nature',
        'nether',
        'pig',
        'rubber',
        'saltpeter',
        'sheep',
        'silicon',
        'slime',
        'squid',
        'sulfur',
        'turtle',
        'sky_stone'
    ])

    //Tier 3 Crops
    t3([
        'azure_silver',
        'brass',
        'bronze',
        'certus_quartz',
        'creeper',
        'crimson_iron',
        'ender_biotite',
        'glowstone',
        'graphite',
        'iron',
        'lead',
        'manasteel',
        'nether_quartz',
        'obsidian',
        'prismarine',
        'quartz_enriched_iron',
        'rabbit',
        'redstone',
        'silver',
        'skeleton',
        'spider',
        'tin',
        'zinc',
        'zombie',
        'lumium',
        'fluorite'
    ])

    //Tier 4 Crops
    t4([
        'azure_electrum',
        'blaze',
        'chrome',
        'constantan',
        'crimson_steel',
        'electrum',
        'elementium',
        'end',
        'enderman',
        'experience',
        'fluix',
        'ghast',
        'gold',
        'invar',
        'lapis_lazuli',
        'mithril',
        'nickel',
        'oratchalcum',
        'osmium',
        'refined_glowstone',
        'refined_obsidian',
        'steel',
        'titanium',
        'tungsten',
        'enderium',
        'compressed_iron',
        'hop_graphite'
    ])

    //Tier 5 Crops
    t5([
        'diamond',
        'emerald',
        'netherite',
        'terrasteel',
        'uraninite',
        'wither_skeleton',
        'platinum',
        'uranium'
    ])

    //Tier 6 Crops
    t6([
        'dragon_egg',
        'nether_star',
        'nitro_crystal',
    ])

    //Magical Crops
    t7([
        'allthemodium',
        'vibranium',
        'unobtainium'
    ])

    //Botany Trees 
    //KubeJS code relevant to botany pots: https://github.com/KubeJS-Mods/KubeJS/blob/2dd08e1f24b9619e613f5998f46eed69a4cf964f/common/src/main/java/dev/latvian/kubejs/recipe/mod/BotanyPotsCropRecipeJS.java#L44
    const growTreeUniversal = (mod, name, raredrops, soil, log) => {
        const dropchance_log = 0.5
        const dropchance_stick = 0.1
        const dropchance_sapling = 0.05
        const dropchance_raredrops = 0.01
        if (!soil) {
            soil = 'dirt'
            //console.log(`console.log: soil is null, set to ${soil}`);
        }
        if (!log) {
            log = mod + ':' + name + '_log'
            //console.log(`console.log: log is null, set to ${log}`)
        } else {
            //console.log("console.log: log is not null");
        }

        const results = [
            Item.of(log).chance(dropchance_log),
            {
                item: Item.of('minecraft:stick').chance(dropchance_stick),
                maxRolls: 2
            },
            {
                item: Item.of(mod + ':' + name + '_sapling').chance(dropchance_sapling),
                maxRolls: 2
            }
        ]

        if (raredrops) {
            results.push({
                item: Item.of(raredrops).chance(dropchance_raredrops),
                maxRolls: 2
            })
        }

        e.recipes.botanypots.crop(results, mod + ':' + name + '_sapling').categories([soil])
    }

    /* 
     Use the function to add custom trees to the pots. 
       Parameter 1 is mod as the advanced tooltip sees it.   
       Parameter 2 is the tree name as the advanced tooltip sees it.
       Parameter 3 is for the unique drops like apple/cherry etc. If none, use 'null' without the quotes.
       Parameter 4 is for the soil to grow on, using 'modname:blockname'. If dirt, 'null' without the quotes will default to dirt.
       Parameter 5 is for specifying a different log than what would normally be modname:treename_log. 'null' defaults to modname:treename_log.
    */
    /*Replaced by Botany Trees mod, but maintaining the code in case we have to add trees or change them.
      growTreeUniversal('minecraft', 'oak', 'minecraft:apple', null, null)
      growTreeUniversal('minecraft', 'dark_oak', 'minecraft:apple', null, null)
      growTreeUniversal('minecraft', 'jungle', 'minecraft:cocoa_beans', null, null)
      growTreeUniversal('minecraft', 'acacia', '', null, null)
      growTreeUniversal('minecraft', 'birch', '', null, null)
      growTreeUniversal('minecraft', 'spruce', '', null, null)
      growTreeUniversal('silentgear', 'netherwood', 'silentgear:nether_banana', null, null)
      growTreeUniversal('forbidden_arcanus', 'cherrywood', 'forbidden_arcanus:cherry_peach', null, null)
      growTreeUniversal('forbidden_arcanus', 'mysterywood', 'minecraft:golden_apple', null, null)
      //Quark Trees
      growTreeUniversal('quark', 'blue_blossom', null, null, 'minecraft:spruce_log')
      growTreeUniversal('quark', 'lavender_blossom', null, null, 'minecraft:spruce_log')
      growTreeUniversal('quark', 'orange_blossom', null, null, 'minecraft:spruce_log')
      growTreeUniversal('quark', 'pink_blossom', null, null, 'minecraft:spruce_log')
      growTreeUniversal('quark', 'yellow_blossom', null, null, 'minecraft:spruce_log')
      //BoP Trees
      growTreeUniversal('biomesoplenty', 'dead', '', null, null)
      growTreeUniversal('biomesoplenty', 'fir', '', null, null)
      growTreeUniversal('biomesoplenty', 'hellbark', '', null, null)
      growTreeUniversal('biomesoplenty', 'jacaranda', '', null, null)
      growTreeUniversal('biomesoplenty', 'magic', '', null, null)
      growTreeUniversal('biomesoplenty', 'mahogany', '', null, null)
      growTreeUniversal('biomesoplenty', 'palm', '', null, null)
      growTreeUniversal('biomesoplenty', 'redwood', '', null, null)
      growTreeUniversal('biomesoplenty', 'umbran', '', null, null)
      growTreeUniversal('biomesoplenty', 'willow', '', null, null)
      growTreeUniversal('biomesoplenty', 'flowering_oak', null, null, 'minecraft:oak_log')
      growTreeUniversal('biomesoplenty', 'maple', null, null, 'minecraft:oak_log')
      growTreeUniversal('biomesoplenty', 'orange_autumn', null, null, 'minecraft:dark_oak_log')
      growTreeUniversal('biomesoplenty', 'origin', null, null, 'minecraft:oak_log')
      growTreeUniversal('biomesoplenty', 'pink_cherry', null, null, 'biomesoplenty:cherry_log')
      growTreeUniversal('biomesoplenty', 'rainbow_birch', null, null, 'minecraft:birch_log')
      growTreeUniversal('biomesoplenty', 'white_cherry', null, null, 'biomesoplenty:cherry_log')
      growTreeUniversal('biomesoplenty', 'yellow_autumn', null, null, 'minecraft:birch_log')
      //BYG Trees
      growTreeUniversal('byg', 'aspen', null, null, null)
      growTreeUniversal('byg', 'baobab', null, null, null)
      growTreeUniversal('byg', 'blue_enchanted', null, null, null)
      growTreeUniversal('byg', 'cika', null, null, null)
      growTreeUniversal('byg', 'cypress', null, null, null)
      growTreeUniversal('byg', 'ebony', null, null, null)
      growTreeUniversal('byg', 'fir', null, null, null)
      growTreeUniversal('byg', 'green_enchanted', null, null, null)
      growTreeUniversal('byg', 'jacaranda', null, null, null)
      growTreeUniversal('byg', 'mahogany', null, null, null)
      growTreeUniversal('byg', 'mangrove', null, null, null)
      growTreeUniversal('byg', 'maple', null, null, null)
      growTreeUniversal('byg', 'palo_verde', null, null, null)
      growTreeUniversal('byg', 'pine', null, null, null)
      growTreeUniversal('byg', 'rainbow_eucalyptus', null, null, null)
      growTreeUniversal('byg', 'redwood', null, null, null)
      growTreeUniversal('byg', 'willow', null, null, null)
      growTreeUniversal('byg', 'witch_hazel', null, null, null)
      growTreeUniversal('byg', 'zelkova', null, null, null)
      growTreeUniversal('byg', 'pink_cherry', null, null, 'byg:cherry_log')
      growTreeUniversal('byg', 'white_cherry', null, null, 'byg:cherry_log')
      growTreeUniversal('byg', 'holly', null, null, 'byg:holly_berries')
      growTreeUniversal('byg', 'indigo_jacaranda', null, null, 'byg:jacaranda_log')
      growTreeUniversal('byg', 'red_maple', null, null, 'byg:maple_log')
      growTreeUniversal('byg', 'silver_maple', null, null, 'byg:maple_log')
      growTreeUniversal('byg', 'skyris', 'byg:green_apple', null, null)
      growTreeUniversal('byg', 'blue_spruce', null, null, 'minecraft:spruce_log')
      growTreeUniversal('byg', 'brown_oak', null, null, 'minecraft:dark_oak_log')
      growTreeUniversal('byg', 'joshua', 'byg:joshua_fruit', null, 'minecraft:oak_log')
      growTreeUniversal('byg', 'orange_birch', null, null, 'minecraft:birch_log')
      growTreeUniversal('byg', 'orange_oak', 'minecraft:apple', null, 'minecraft:oak_log')
      growTreeUniversal('byg', 'orange_spruce', null, null, 'minecraft:birch_log')
      growTreeUniversal('byg', 'orchard', 'minecraft:apple', null, 'minecraft:oak_log')
      growTreeUniversal('byg', 'red_birch', null, null, 'minecraft:birch_log')
      growTreeUniversal('byg', 'red_oak', null, null, 'minecraft:dark_oak_log')
      growTreeUniversal('byg', 'red_spruce', null, null, 'minecraft:spruce_log')
      growTreeUniversal('byg', 'yellow_birch', null, null, 'minecraft:birch_log')
      growTreeUniversal('byg', 'yellow_spruce', null, null, 'minecraft:spruce_log')
    */
    //Ars Nouveau Mana Bloom
    const results = [
        Item.of('ars_nouveau:mana_bloom').chance(0.75),
        {
            item: Item.of('ars_nouveau:mana_bloom_crop').chance(0.05),
            maxRolls: 2
        }
    ]
    e.recipes.botanypots.crop(results, 'ars_nouveau:mana_bloom_crop').categories(['dirt'])
})