Adding Buy or Sell Recipes (KubeJS) - AmmoniumX/AdminShop GitHub Wiki

KubeJS Helper Functions for AdminShop

Here are some helper KubeJS functions to ease adding new recipes via KubeJS. For each of these functions, "permit" is optional. All these functions should be defined inside ServerEvents.recipes

Note: AdminShop recipes can be ordered on the Shop menu by giving each recipe ID a numeric suffix (e.g mymodpack:myrecipe_1 will be listed before mymodpack:myrecipe_2). These helper functions automatically add incremental numbers to ensure proper ordering.

Sell Item Recipes

let sellCounter = 0
function sellItem(item, count, price, permit) {
    let recipe = {
        "type": "adminshop:item_selling",
        "price": price,
        "input": {
            "item": {
                "item": item,
                "count": count
            },
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:sell_${sellCounter++}`)
}

function sellItemNBT(item, count, price, nbt, permit) {
    let recipe = {
        "type": "adminshop:item_selling",
        "price": price,
        "input": {
            "item": {
                "item": item,
                "count": count,
                "nbt": nbt
            },
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:sell_${sellCounter++}`)
}

function sellTag(tag, count, price, permit) {
    let recipe = {
        "type": "adminshop:item_selling",
        "price": price,
        "input": {
            "tag": {
                "tag": tag,
                "count": count
            },
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:sell_${sellCounter++}`)
}

Example usages:

sellItem("minecraft:iron_ingot", 16, 100)
sellItem("minecraft:diamond", 8, 100, "gems")
sellItemNBT("minecraft:iron_sword", 1, 1000, "{Damage:15}", "weapons")
sellTag('minecraft:logs', 16, 800)

Sell Fluid Recipes

let sellCounter = 0
function sellFluid(fluid, amount, price, permit) {
    let recipe = {
        "type": "adminshop:fluid_selling",
        "price": price,
        "result": {
            "fluid": fluid,
            "amount": amount
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:sell_${sellCounter++}`)
}

Example usages:

sellFluid("minecraft:water", 1000, 50)
sellFluid("minecraft:lava", 500, 200, "mining")

Buy Item Recipes

let buyCounter = 0
function buyItem(item, count, price, permit) {
    let recipe = {
        "type": "adminshop:item_buying",
        "price": price,
        "result": {
            "item": item,
            "count": count
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:buy_${buyCounter++}`)
}

function buyItemNBT(item, count, price, nbt, permit) {
    let recipe = {
        "type": "adminshop:item_buying",
        "price": price,
        "result": {
            "item": item,
            "count": count,
            "nbt": nbt
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:buy_${buyCounter++}`)
}

Example usages:

buyItem("minecraft:diamond", 1, 500)
buyItem("minecraft:netherite_ingot", 1, 2000, "advanced")
buyItemNBT('immersiveengineering:blueprint', 1, 500000, '{blueprint:\"electrode\"}', "engineering")

Buy Fluid Recipes

function buyFluid(fluid, amount, price, permit) {
    let recipe = {
        "type": "adminshop:fluid_buying",
        "price": price,
        "result": {
            "fluid": fluid,
            "amount": amount
        }
    }
    if (permit !== undefined && permit !== null && permit !== "") {
        recipe["permit"] = permit
    }
    event.custom(recipe).id(`yourmodpack:buy_${buyCounter++}`)
}

Example usages:

buyFluid("minecraft:water", 1000, 100)
buyFluid("minecraft:lava", 1000, 300, "nether")

Complete Example

Here's a complete example of how to use these helper functions in your KubeJS server scripts:

// File: kubejs/server_scripts/adminshop.js

ServerEvents.recipes(event => {
    let sellCounter = 0
    let buyCounter = 0
    // Define all helper functions here...
    
    // Add your shop items
    sellItem("minecraft:iron_ingot", 16, 100)
    sellItem("minecraft:gold_ingot", 8, 200)
    sellTag("forge:gems/diamond", 4, 500, "gems")
    
    buyItem("minecraft:nether_star", 1, 10000)
    buyItemNBT('immersiveengineering:blueprint', 1, 500000, '{blueprint:\"electrode\"}', "engineering")
    
    sellFluid("minecraft:water", 1000, 50)
    buyFluid("minecraft:lava", 1000, 200, "nether")
})