STExtras Datapack Documentation
This file documents the current server-data format used by STExtras quests.
All quest JSON is loaded from:
data/stextras/st_quests/Quest File Layout
Daily
data/stextras/st_quests/daily/<rarity>/<file>.jsonExample:
data/stextras/st_quests/daily/novice/kill_slime.jsonWeekly
data/stextras/st_quests/weekly/<rarity>/<file>.jsonRepeatable
data/stextras/st_quests/repeatable/<rarity>/<file>.jsonRequired
data/stextras/st_quests/required/<prestige>/<rarity>/<file>.json<prestige>is an integer such as0,1,12,17, etc.- If there is no exact required pool for a prestige, STExtras falls back to the nearest available required prestige pool.
Race Prestige
data/stextras/st_quests/race_prestige/<namespace>_<race>.jsonExamples:
data/stextras/st_quests/race_prestige/tensura_divine_giant.json
data/stextras/st_quests/race_prestige/stextras_divine_wisp.jsonThe filename is normally used to infer the race id. You can also override this with a top-level "race_id": "namespace:path" field.
Standard Quest JSON
Standard quest files use a single quest object.
Example:
{
"name": "Kill Slime",
"creator": "kill",
"type": "tensura:slime",
"amount": 4,
"rewards": {
"re": 11
}
}Root Fields
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | Display name shown to the player. |
creator | string | yes | Quest objective type. |
type | string or string array | usually | Accepts one id or multiple ids. Array entries use OR logic. |
damage_type | string or string array | damage only | Optional damage type filter for creator: "damage". Accepts damage type ids such as tensura:black_flame or tags such as #tensura:is_magic_fire. |
level | string | no | Optional SpiritLevel filter for creator: "spirit_contract" when type is an element id. |
amount | integer | usually | Clamped to >= 0. For master, this is ignored. |
rewards | object | no | Normal reward block granted to the quest owner. |
subordinate | string | no | Optional subordinate progress mode for creators with Sub Support set to true. Accepts "HELP" or "ONLY". |
subordinate_rewards | object | no | Optional reward block granted to the subordinate only when the subordinate causes the final completing progress increment. Supports commands and skills. |
cooldown | integer | repeatable only | Seconds. -1 means no cooldown. Values below -1 are clamped to -1. |
tags | string array | no | Extra entity tag filters such as Variant:4. |
stage | integer | no | Exact block growth/stage requirement. Sets both min and max. |
min_stage | integer | no | Minimum allowed stage. |
max_stage | integer | no | Maximum allowed stage. |
Notes:
- Category, rarity, and required prestige are derived from the file path, not from JSON fields.
- STExtras generates the internal quest id automatically from the file path.
- Only use
subordinateon creators where Sub Support istruein the Creator Reference table.
The type Field
type accepts either:
- one string
- an array of strings
Example:
{
"name": "Kill Giant Creatures",
"creator": "kill",
"type": [
"tensura:giant_ant",
"tensura:giant_bear",
"tensura:giant_salmon"
],
"amount": 50
}How type is interpreted
The meaning depends on the creator.
- For entity quests,
typeis normally one or more entity ids. - For block quests,
typecan be a block id. Formineandfarm, item ids are also valid when the harvested drop is what matters. - For item quests,
typeis one or more item ids. - For skill quests,
typeis one or more skill ids. - For mastery type quests,
typeis one or more mastery type ids. - For
plunder,typecan be one or more entity ids, skill ids, or a mix of both. - For
spirit_contract,typecan be an element id such astensura:flameor a SpiritLevel id such astensura:greater. Use the optionallevelfield to require a specific level for a specific element. - For
ep_reach, omittype. Theamountfield is the required max EP threshold.
Wildcard support
"minecraft:any" is accepted for:
- entity
- block
- item
- skill
- magic type
- magic subtype
- skill type
- entity-or-skill creators such as
plunder - spirit contract element or level targets
Mob category support
For entity creators, a plain string without : can be interpreted as a vanilla mob category if it matches a valid MobCategory, for example:
{
"name": "Kill Monsters",
"creator": "kill",
"type": "monster",
"amount": 20
}Subordinate Support
Some creators can also count progress made by the player's subordinates. Use "subordinate" only when the creator has Sub Support set to true in the Creator Reference table.
| Field value | Meaning |
|---|---|
"subordinate": "HELP" | Player and subordinate progress both count toward the player's quest. |
"subordinate": "ONLY" | Only subordinate progress counts. Player progress is ignored for that quest. |
| omitted | Normal player-only progress. |
Example subordinate-only quest:
{
"name": "Subordinate-Only Magic Fire",
"creator": "damage",
"type": "monster",
"damage_type": "#tensura:is_magic_fire",
"amount": 250,
"subordinate": "ONLY",
"subordinate_rewards": {
"commands": [
"effect give @s minecraft:strength 30 0"
],
"skills": [
{
"id": "tensura:magic_sense",
"duration_ticks": 12000
}
]
}
}Example helper quest where either the player or their subordinate can progress:
{
"name": "Hunt With Your Subordinate",
"creator": "kill",
"type": "monster",
"amount": 50,
"subordinate": "HELP",
"rewards": {
"re": 100
}
}Creator Reference
Current quest creators:
| Creator | Expected target kind | Notes | Sub Support | Version |
|---|---|---|---|---|
breed | entity | Breed mobs. | false | v2.0.0 |
kill | entity | Kill target entities. With Sub Support, kills made by the player's named subordinate can count. | true | v2.0.0 |
name | entity | Name target entities through Tensura naming. | false | v2.0.0 |
spiritual_damage | entity | Deal spiritual damage to target entities. Does not use damage_type. | true | v2.0.0 |
mine | block | Tracks block breaks and some harvested drops. | false | v2.0.0 |
farm | block | Tracks farming harvests. | false | v2.0.0 |
cook | item | Furnace/smoker result item. | false | v2.0.0 |
trade | item | Villager trade result item. | false | v2.0.0 |
smith_minecraft | item | Vanilla smithing output. | false | v2.0.0 |
smith_tensura | item | Tensura smithing output. | false | v2.0.0 |
craft | item | Crafting result item. | false | v2.0.0 |
consume | item | Consumed item. With Sub Support, subordinate consumption can count. | true | v2.0.0 |
master | skill | Master a specific skill. Amount is ignored. With Sub Support, subordinate skill mastery can count. | true | v2.0.0 |
master_type | skill_type | Skill categories such as resistance, intrinsic, common, extra, unique, ultimate, and battlewill. | true | v2.0.0 |
master_type_magic | magic_type | Magic families such as aspectual, spiritual, summoning, and misc. | false | v2.0.0 |
master_subtype_magic | magic_subtype | More specific magic subtypes such as aspectual fire or spiritual lesser. | false | v2.0.0 |
damage | entity | Deal damage to target entities. Use damage_type to filter the damage source/type. Amount counts damage dealt. | true | v2.1.0 |
possess | entity | Possess target entities. | false | v2.1.0 |
plunder | entity or skill | Plunder from a target entity or match the plundered skill. type may contain entity ids, skill ids, or both. | false | v2.1.0 |
spirit_contract | element or SpiritLevel | Contract or update spirits. type can be an element or level. Use optional level for element + level matching. | false | v2.1.0 |
enchant | item_or_enchantment | Enchanted item or enchantment id. Optional item and enchantment filters can require both. | false | v2.1.0 |
mining_station | item | Collect item output from the Tensura mining station. | false | v2.1.0 |
woodcut | item | Collect item output from the Tensura woodcutter. | false | v2.1.0 |
spell_binding | skill | Bind a skill to a spell-binding item. | false | v2.1.0 |
ep_reach | none | Reach a max EP threshold. Omit type; set the threshold with amount. With Sub Support, a subordinate reaching the threshold can count. | true | v2.1.0 |
equip_evolve | item | Count when gear actually evolves through Tensura's gear evolution system. type matches the gear item that evolved into the result item. | true | v2.1.0 |
General Creator Example
Most quest creators follow this basic shape. Check the Creator Reference table for the expected target kind before choosing the type value.
{
"name": "<Name>",
"creator": "<Creator>",
"type": "<Expected target kind id>",
"amount": <Amount>
}Some creators use extra fields, such as damage_type, level, enchantment, min_level, stage, min_stage, or max_stage. Some creators, such as ep_reach, do not need type.
Creator Examples
The examples below are grouped into one hidden dropdown so the page stays cleaner. Open it to view all creator examples.
Show all creator examples
breed example
{
"name": "Breed Cows",
"creator": "breed",
"type": "minecraft:cow",
"amount": 10
}kill example
{
"name": "Kill Slimes",
"creator": "kill",
"type": "tensura:slime",
"amount": 25
}name example
{
"name": "Name a Slime",
"creator": "name",
"type": "tensura:slime",
"amount": 1
}spiritual_damage example
{
"name": "Deal Spiritual Damage",
"creator": "spiritual_damage",
"type": "monster",
"amount": 1500,
"subordinate": "HELP"
}mine example
{
"name": "Mine Silver Ore",
"creator": "mine",
"type": [
"tensura:silver_ore",
"tensura:deepslate_silver_ore"
],
"amount": 16
}farm example
{
"name": "Harvest Mature Wheat",
"creator": "farm",
"type": "minecraft:wheat",
"min_stage": 7,
"amount": 32
}cook example
{
"name": "Cook Beef",
"creator": "cook",
"type": "minecraft:cooked_beef",
"amount": 24
}trade example
{
"name": "Trade for Emeralds",
"creator": "trade",
"type": "minecraft:emerald",
"amount": 12
}smith_minecraft example
{
"name": "Smith a Netherite Sword",
"creator": "smith_minecraft",
"type": "minecraft:netherite_sword",
"amount": 1
}smith_tensura example
{
"name": "Smith Character Reset Scroll",
"creator": "smith_tensura",
"type": "tensura:character_reset_scroll",
"amount": 1
}craft example
{
"name": "Craft Empty Element Core",
"creator": "craft",
"type": "tensura:element_core_empty",
"amount": 3
}consume example
{
"name": "Drink Full Potion",
"creator": "consume",
"type": "tensura:full_potion",
"amount": 5,
"subordinate": "HELP"
}master example
{
"name": "Master Magic Sense",
"creator": "master",
"type": "tensura:magic_sense",
"subordinate": "HELP"
}master_type example
{
"name": "Master an Extra Skill",
"creator": "master_type",
"type": "tensura:extra",
"amount": 1,
"subordinate": "ONLY"
}master_type_magic example
{
"name": "Master Aspectual Magic",
"creator": "master_type_magic",
"type": "tensura:aspectual",
"amount": 1
}master_subtype_magic example
{
"name": "Master Aspectual Fire Magic",
"creator": "master_subtype_magic",
"type": "tensura:aspectual_fire",
"amount": 1
}damage example
{
"name": "Burn Hostile Targets",
"creator": "damage",
"type": "monster",
"damage_type": "tensura:black_flame",
"amount": 100,
"subordinate": "HELP"
}possess example
{
"name": "Possess an Orc",
"creator": "possess",
"type": "tensura:orc",
"amount": 1
}plunder example
{
"name": "Successful Plunder",
"creator": "plunder",
"type": [
"tensura:orc_disaster",
"tensura:predator"
],
"amount": 1
}spirit_contract example
{
"name": "Contract Greater Flame Spirit",
"creator": "spirit_contract",
"type": "tensura:flame",
"level": "tensura:greater",
"amount": 1
}enchant example
{
"name": "Sharpen a Diamond Sword",
"creator": "enchant",
"type": "minecraft:diamond_sword",
"enchantment": "minecraft:sharpness",
"min_level": 3,
"amount": 1
}mining_station example
{
"name": "Collect Mining Station Iron",
"creator": "mining_station",
"type": "minecraft:iron_ingot",
"amount": 64
}woodcut example
{
"name": "Collect Cut Oak Slabs",
"creator": "woodcut",
"type": "minecraft:oak_slab",
"amount": 64
}spell_binding example
{
"name": "Bind Acid Rain",
"creator": "spell_binding",
"type": "tensura:acid_rain",
"amount": 1
}ep_reach example
{
"name": "Reach 250000 EP",
"creator": "ep_reach",
"amount": 250000,
"subordinate": "HELP"
}equip_evolve example
{
"name": "Evolve Magisteel Sword",
"creator": "equip_evolve",
"type": "tensura:high_magisteel_sword",
"amount": 1,
"subordinate": "HELP"
}Damage Quests
creator: "damage" counts damage dealt to a target entity. The quest type filters the damaged entity, and damage_type filters the damage source.
STExtras only increments this creator when the damage source has a living source entity that resolves to the player or to the player's subordinate. Player weapons, player-fired projectiles, player-cast skills, and subordinate attacks can count. Pure environmental damage like normal lava, fall damage, drowning, or after the fact fire ticks usually has no player source and won't count.
damage_type accepts one id, one tag, or an array. Tags start with #.
{
"name": "Elemental",
"creator": "damage",
"type": "monster",
"damage_type": [
"tensura:fire_elemental",
"tensura:lightning_elemental",
"#tensura:is_magic_fire"
],
"amount": 500,
"subordinate": "HELP"
}Rewards
Rewards are optional.
Normal quest rewards go inside rewards and are granted to the player. Subordinate rewards go inside subordinate_rewards and are only granted to the subordinate when the subordinate causes the final completing progress increment.
Current reward fields:
| Field | Type | Notes | Sub Support | Version |
|---|---|---|---|---|
re | integer | Reincarnation Essence reward. Player rewards only. | false | v2.0.0 |
xp | integer | Vanilla experience points. Player rewards only. | false | v2.0.0 |
items | array | Items granted directly to the player's inventory. | false | v2.0.0 |
commands | string array | Server commands run with suppressed output. In rewards, @s is the player. In subordinate_rewards, @s is the subordinate. | true | v2.0.0 |
skills | array | Tensura/ManasCore skills granted directly. In rewards, granted to the player. In subordinate_rewards, granted to the subordinate. | true | v2.1.0 |
Normal player reward example:
{
"rewards": {
"re": 250,
"xp": 100,
"items": [
{
"id": "minecraft:diamond",
"count": 2
}
],
"commands": [
"say Quest complete",
"give @s minecraft:emerald 4"
],
"skills": [
{
"id": "tensura:magic_sense"
}
]
}
}Subordinate reward example:
{
"subordinate_rewards": {
"commands": [
"effect give @s minecraft:strength 30 0"
],
"skills": [
{
"id": "tensura:infinite_regeneration",
"duration_ticks": 12000
}
]
}
}Notes:
- Item rewards use
idand optionalcount(default1). - Skill rewards use Tensura's normal skill learning flow and are available in
STExtras v2.1.0 and up. subordinate_rewardssupports only reward fields where Sub Support istrue.
Skill Rewards
Skill rewards allow a quest to grant specific skills directly to the player.
The skills field is an array inside the normal rewards object or inside subordinate_rewards.
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | Skill ids, such as tensura:infinite_regeneration. |
mastery | number | no | Optional mastery value to set on the granted skill. If omitted, the skill uses its default mastery. |
duration_ticks | integer | no | Optional temporary duration in ticks. If omitted, the skill is permanent. |
remove_time | integer | no | Alternative name for duration_ticks. If omitted, the skill is permanent. |
no_magicule_cost | boolean | no | Optional flag that marks the granted skill with Tensura's NoMagiculeCost tag. |
Skill reward with no magicule cost:
{
"rewards": {
"skills": [
{
"id": "tensura:black_flame",
"mastery": 100,
"no_magicule_cost": true
}
]
}
}Temporary subordinate skill reward:
{
"subordinate_rewards": {
"skills": [
{
"id": "tensura:magic_sense",
"duration_ticks": 12000
}
]
}
}Notes:
- Skill ids must exist in the Tensura/ManasCore skill registry.
- Unknown skill ids are skipped and logged as warnings.
- Skill rewards can be combined with
re,xp,items, andcommandsin normalrewards. - Inside
subordinate_rewards, skill rewards are granted to the subordinate, not the player.
Stage Based Block Quests
stage, min_stage, and max_stage are supported for block quests.
Exact-stage example:
{
"name": "Harvest Hipokute Flower",
"creator": "mine",
"type": "tensura:hipokute_flower",
"stage": 3,
"amount": 12
}Range example:
{
"name": "Harvest Mature Crop",
"creator": "farm",
"type": "minecraft:wheat",
"min_stage": 6,
"max_stage": 7,
"amount": 16
}Tag-Filtered Entity Quests
tags can be used to narrow entity matches.
Example:
{
"name": "Kill 100 Royal Orcs",
"creator": "kill",
"type": "tensura:orc",
"tags": [
"Variant:4"
],
"amount": 100
}Race Prestige Packs
Race prestige uses one file per race pack, with top-level metadata and a quests array.
Example structure:
{
"race_id": "tensura:divine_giant",
"lore_message": {
"title": "",
"subtitle": "",
"chat": "..."
},
"start_message": {
"title": "",
"subtitle": "",
"chat": "..."
},
"completed_message": {
"title": "",
"subtitle": "",
"chat": "..."
},
"soul_grade": 4,
"quests": [
{
"name": "No Giants Only Me",
"creator": "kill",
"type": [
"tensura:giant_ant",
"tensura:giant_bat",
"tensura:giant_bear"
],
"amount": 500
},
{
"name": "Giantification Mastery",
"creator": "master",
"type": "tensura:giantification"
}
]
}Race Prestige Top-Level Fields
| Field | Type | Required | Notes |
|---|---|---|---|
race_id | string | no | Optional explicit race id. If omitted, STExtras infers it from the filename. |
lore_message | object | no | Shown when the player reaches the race and has not finished that prestige. |
start_message | object | no | Shown when the prestige run starts. |
completed_message | object | no | Shown when all race prestige quests are done. |
soul_grade | integer | no | Soul grade reward granted when the race prestige is completed. |
quests | array | yes | Array of quest objects. |
Race Message Object
Each message object supports:
{
"title": "",
"subtitle": "",
"chat": ""
}stat_first
Race prestige quests support:
"stat_first": trueThis is mainly useful for kill quests. When enabled, the quest can seed initial progress from the player's existing kill stats instead of always starting from zero.
Reference IDs
The lists below are hidden by default so the page stays easier to read. Open a section when you need the ids for a specific creator.
Mastery Type IDs
Use these in type for mastery-type creators.
master uses a specific skill id such as tensura:magic_sense.
master_type ids:
tensura:resistance
tensura:intrinsic
tensura:common
tensura:extra
tensura:unique
tensura:ultimate
tensura:battlewill
minecraft:anymaster_type_magic ids:
tensura:aspectual
tensura:spiritual
tensura:summoning
tensura:misc
minecraft:anymaster_subtype_magic aspectual ids:
tensura:aspectual_barrier
tensura:aspectual_earth
tensura:aspectual_enhancement
tensura:aspectual_explosion
tensura:aspectual_fire
tensura:aspectual_gravity
tensura:aspectual_ice
tensura:aspectual_illusion
tensura:aspectual_lightning
tensura:aspectual_mental
tensura:aspectual_recovery
tensura:aspectual_space
tensura:aspectual_water
tensura:aspectual_wind
tensura:aspectual_miscmaster_subtype_magic spiritual element ids:
tensura:spiritual_darkness
tensura:spiritual_earth
tensura:spiritual_flame
tensura:spiritual_light
tensura:spiritual_space
tensura:spiritual_water
tensura:spiritual_wind
tensura:spiritual_holy
tensura:spiritual_unidentifiedmaster_subtype_magic spiritual level ids:
tensura:spiritual_lesser
tensura:spiritual_medium
tensura:spiritual_greater
tensura:spiritual_lord
minecraft:anySpirit Contract IDs
spirit_contract uses element ids or SpiritLevel ids. If no namespace is provided in JSON, STExtras treats the id as a Tensura id.
Element ids:
tensura:darkness
tensura:earth
tensura:flame
tensura:light
tensura:space
tensura:water
tensura:wind
tensura:holy
tensura:unidentified
minecraft:anyLevel ids:
tensura:lesser
tensura:medium
tensura:greater
tensura:lord
minecraft:anyExample:
{
"name": "Contract Greater Flame Spirit",
"creator": "spirit_contract",
"type": "tensura:flame",
"level": "tensura:greater",
"amount": 1
}