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")
})