PassiveSTJS exposes PST's workbench socket recipe through:
event.recipes.skilltree.workbench_item_bonus()
Use it in kubejs/server_scripts/.
Required Parts
The recipe wrapper requires:
base_item_conditionitem_bonus
If either is missing, the wrapper throws during recipe creation.
requires_passive_skill defaults to false.
Base Item Condition Helpers
You can set the base item condition with:
baseItemCondition(typeId, consumer)baseItemConditionSchema(typeId, consumer)noBaseCondition()baseEquipmentTypeCondition(equipmentType)baseItemIdCondition(itemId)baseTagCondition(tagId)basePotionCondition(potionId)baseFoodCondition()baseEnchantedCondition()
Item Bonus Helpers
You can set the produced item bonus with:
itemBonus(typeId, consumer)itemBonusSchema(typeId, consumer)skillBonusItemBonus(typeId, consumer)skillBonusItemBonusSchema(typeId, consumer)attributeItemBonus(consumer)itemBonusList(consumer)
Ingredient Helpers
Supported ingredient methods:
ingredient(inputItem, amount)ingredient(inputItem)ingredientItem(itemId, amount)ingredientItem(itemId)ingredientTag(tagId, amount)ingredientTag(tagId)
Minimal Pattern
ServerEvents.recipes(event => {event.recipes.skilltree.workbench_item_bonus().baseEquipmentTypeCondition('shield').ingredientTag('forge:ingots/copper', 2).attributeItemBonus(bonus => {bonus.attribute('minecraft:generic.armor')bonus.amount(2)bonus.modifierId('8516d3f4-373e-42c3-9138-3215993b34c4')bonus.bonusName('Workbench Upgrade')bonus.operation(0)}).requiresPassiveSkill().id('kubejs:passivestjs_showcase_shield_socket')})
This matches the checked-in sample file examples/kubejs/passivestjs/08_server_workbench_item_bonus_recipe.js.
When To Use Workbench Recipes vs Runtime Item Mutation
Use workbench recipes when:
- the bonus should be added through PST's workbench flow
- the bonus should be described as a socket or upgrade recipe
- the bonus should optionally respect
requires_passive_skill
Use PassiveSkillTreeJS.item(stack) when:
- the stack should gain or lose item bonuses outside the workbench
- the source is a custom event, command, item use, or another runtime trigger
Passive Skill Requirement Flag
.requiresPassiveSkill() sets requires_passive_skill=true.
This only gates the workbench action. It does not define how the player gains socket capacity or which skill grants the relevant bonus. That still comes from your PST content and the upstream PST systems.