Skip to content

Bench Definitions

Overview

Benches are placeable block-items that enable recipes requiring a specific bench ID. Each bench is defined as a standard item file under Assets/Server/Item/Items/Bench/, with a BlockType.Bench section describing the bench’s operational type, categories, sound events, tier system, and UI behaviour. The same item file also embeds the recipe used to craft the bench itself.

File Location

Assets/Server/Item/Items/Bench/

One JSON file per bench, e.g. Bench_WorkBench.json, Bench_Campfire.json, Bench_Furnace.json.

Schema

Item-level fields (bench-relevant subset)

FieldTypeRequiredDefaultDescription
TranslationProperties.NamestringYesLocalisation key for the bench display name.
BlockTypeobjectYesBlock behaviour definition. See below.
RecipeobjectNoInline recipe to craft this bench. Uses the standard recipe schema.
Tags.Typestring[]NoShould include "Bench" for all bench items.
MaxStacknumberNoAlmost always 1 for benches.

BlockType fields

FieldTypeRequiredDefaultDescription
MaterialstringYesPhysical material class (e.g. "Solid").
DrawTypestringYesRender type (e.g. "Model").
CustomModelstringYesPath to the .blockymodel file.
BenchBenchConfigYesCore bench configuration. See below.
StateobjectNoVisual state definitions (idle, crafting, processing states).
Gathering.Breaking.GatherTypestringNoGather type on block break (e.g. "Benches").
VariantRotationstringNoRotation variants (e.g. "NESW").

BenchConfig

FieldTypeRequiredDefaultDescription
Type"Crafting" | "Processing"YesDetermines whether the bench shows a crafting queue or a processing pipeline.
IdstringYesUnique bench identifier referenced in BenchRequirement.Id on recipes.
CategoriesCategoryEntry[]NoCrafting benches only. Named category tabs shown in the UI.
TierLevelsTierLevel[]NoUpgrade tier definitions. Each entry describes upgrade costs and bonuses.
LocalOpenSoundEventIdstringNoSound played locally when the bench UI opens.
LocalCloseSoundEventIdstringNoSound played locally when the bench UI closes.
CompletedSoundEventIdstringNoSound played when a craft completes.
FailedSoundEventIdstringNoSound played when a craft fails.
AllowNoInputProcessingbooleanNofalseProcessing benches only. Allows processing to start without a full input set.
FuelFuelSlot[]NoProcessing benches only. Defines fuel input slots.
OutputSlotsCountnumberNoProcessing benches only. Number of output slots.

TierLevel

FieldTypeRequiredDefaultDescription
UpgradeRequirementobjectNoMaterials and time needed to reach this tier.
UpgradeRequirement.MaterialOutputEntry[]NoItems consumed on upgrade.
UpgradeRequirement.TimeSecondsnumberNoTime in seconds to complete the upgrade.
CraftingTimeReductionModifiernumberNo0Fractional reduction applied to all recipe TimeSeconds at this tier (e.g. 0.15 = 15% faster).

Example

Crafting bench (Assets/Server/Item/Items/Bench/Bench_WorkBench.json, condensed):

{
"TranslationProperties": {
"Name": "server.items.Bench_WorkBench.name"
},
"Recipe": {
"Input": [
{ "Quantity": 4, "ResourceTypeId": "Wood_Trunk" },
{ "Quantity": 3, "ResourceTypeId": "Rock" }
],
"BenchRequirement": [
{ "Type": "Crafting", "Categories": ["Tools"], "Id": "Fieldcraft" }
]
},
"BlockType": {
"Bench": {
"Type": "Crafting",
"Id": "Workbench",
"Categories": [
{ "Id": "Workbench_Survival", "Icon": "Icons/CraftingCategories/Workbench/WeaponsCrude.png", "Name": "server.benchCategories.workbench.survival" },
{ "Id": "Workbench_Tools", "Icon": "Icons/CraftingCategories/Workbench/Tools.png", "Name": "server.benchCategories.workbench.tools" }
],
"TierLevels": [
{
"CraftingTimeReductionModifier": 0.0,
"UpgradeRequirement": {
"Material": [
{ "ItemId": "Ingredient_Bar_Copper", "Quantity": 30 },
{ "ItemId": "Ingredient_Bar_Iron", "Quantity": 20 }
],
"TimeSeconds": 5.0
}
},
{
"CraftingTimeReductionModifier": 0.15,
"UpgradeRequirement": {
"Material": [
{ "ItemId": "Ingredient_Bar_Thorium", "Quantity": 30 }
],
"TimeSeconds": 10.0
}
},
{ "CraftingTimeReductionModifier": 0.3 }
],
"LocalOpenSoundEventId": "SFX_Workbench_Open",
"CompletedSoundEventId": "SFX_Workbench_Craft"
}
},
"Tags": { "Type": ["Bench"] },
"MaxStack": 1
}

Processing bench (Assets/Server/Item/Items/Bench/Bench_Campfire.json, condensed):

{
"BlockType": {
"Bench": {
"Type": "Processing",
"Id": "Campfire",
"AllowNoInputProcessing": true,
"Fuel": [
{ "ResourceTypeId": "Fuel", "Icon": "Icons/Processing/FuelSlotIcon.png" }
],
"OutputSlotsCount": 4
}
}
}
  • Recipes — recipe format and bench requirement field
  • Salvage — the Salvage bench and its recipe format