[Extra] Datapack Creation

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>.json

Example:

data/stextras/st_quests/daily/novice/kill_slime.json

Weekly

data/stextras/st_quests/weekly/<rarity>/<file>.json

Repeatable

data/stextras/st_quests/repeatable/<rarity>/<file>.json

Required

data/stextras/st_quests/required/<prestige>/<rarity>/<file>.json
  • <prestige> is an integer such as 0, 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>.json

Examples:

data/stextras/st_quests/race_prestige/tensura_divine_giant.json
data/stextras/st_quests/race_prestige/stextras_divine_wisp.json

The 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

FieldTypeRequiredNotes
namestringyesDisplay name shown to the player.
creatorstringyesQuest objective type.
typestring or string arrayusuallyAccepts one id or multiple ids. Array entries use OR logic.
damage_typestring or string arraydamage onlyOptional damage type filter for creator: "damage". Accepts damage type ids such as tensura:black_flame or tags such as #tensura:is_magic_fire.
levelstringnoOptional SpiritLevel filter for creator: "spirit_contract" when type is an element id.
amountintegerusuallyClamped to >= 0. For master, this is ignored.
rewardsobjectnoNormal reward block granted to the quest owner.
subordinatestringnoOptional subordinate progress mode for creators with Sub Support set to true. Accepts "HELP" or "ONLY".
subordinate_rewardsobjectnoOptional reward block granted to the subordinate only when the subordinate causes the final completing progress increment. Supports commands and skills.
cooldownintegerrepeatable onlySeconds. -1 means no cooldown. Values below -1 are clamped to -1.
tagsstring arraynoExtra entity tag filters such as Variant:4.
stageintegernoExact block growth/stage requirement. Sets both min and max.
min_stageintegernoMinimum allowed stage.
max_stageintegernoMaximum 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 subordinate on creators where Sub Support is true in 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, type is normally one or more entity ids.
  • For block quests, type can be a block id. For mine and farm, item ids are also valid when the harvested drop is what matters.
  • For item quests, type is one or more item ids.
  • For skill quests, type is one or more skill ids.
  • For mastery type quests, type is one or more mastery type ids.
  • For plunder, type can be one or more entity ids, skill ids, or a mix of both.
  • For spirit_contract, type can be an element id such as tensura:flame or a SpiritLevel id such as tensura:greater. Use the optional level field to require a specific level for a specific element.
  • For ep_reach, omit type. The amount field 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 valueMeaning
"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.
omittedNormal 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:

CreatorExpected target kindNotesSub SupportVersion
breedentityBreed mobs.falsev2.0.0
killentityKill target entities. With Sub Support, kills made by the player's named subordinate can count.truev2.0.0
nameentityName target entities through Tensura naming.falsev2.0.0
spiritual_damageentityDeal spiritual damage to target entities. Does not use damage_type.truev2.0.0
mineblockTracks block breaks and some harvested drops.falsev2.0.0
farmblockTracks farming harvests.falsev2.0.0
cookitemFurnace/smoker result item.falsev2.0.0
tradeitemVillager trade result item.falsev2.0.0
smith_minecraftitemVanilla smithing output.falsev2.0.0
smith_tensuraitemTensura smithing output.falsev2.0.0
craftitemCrafting result item.falsev2.0.0
consumeitemConsumed item. With Sub Support, subordinate consumption can count.truev2.0.0
masterskillMaster a specific skill. Amount is ignored. With Sub Support, subordinate skill mastery can count.truev2.0.0
master_typeskill_typeSkill categories such as resistance, intrinsic, common, extra, unique, ultimate, and battlewill.truev2.0.0
master_type_magicmagic_typeMagic families such as aspectual, spiritual, summoning, and misc.falsev2.0.0
master_subtype_magicmagic_subtypeMore specific magic subtypes such as aspectual fire or spiritual lesser.falsev2.0.0
damageentityDeal damage to target entities. Use damage_type to filter the damage source/type. Amount counts damage dealt.truev2.1.0
possessentityPossess target entities.falsev2.1.0
plunderentity or skillPlunder from a target entity or match the plundered skill. type may contain entity ids, skill ids, or both.falsev2.1.0
spirit_contractelement or SpiritLevelContract or update spirits. type can be an element or level. Use optional level for element + level matching.falsev2.1.0
enchantitem_or_enchantmentEnchanted item or enchantment id. Optional item and enchantment filters can require both.falsev2.1.0
mining_stationitemCollect item output from the Tensura mining station.falsev2.1.0
woodcutitemCollect item output from the Tensura woodcutter.falsev2.1.0
spell_bindingskillBind a skill to a spell-binding item.falsev2.1.0
ep_reachnoneReach a max EP threshold. Omit type; set the threshold with amount. With Sub Support, a subordinate reaching the threshold can count.truev2.1.0
equip_evolveitemCount when gear actually evolves through Tensura's gear evolution system. type matches the gear item that evolved into the result item.truev2.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:

FieldTypeNotesSub SupportVersion
reintegerReincarnation Essence reward. Player rewards only.falsev2.0.0
xpintegerVanilla experience points. Player rewards only.falsev2.0.0
itemsarrayItems granted directly to the player's inventory.falsev2.0.0
commandsstring arrayServer commands run with suppressed output. In rewards, @s is the player. In subordinate_rewards, @s is the subordinate.truev2.0.0
skillsarrayTensura/ManasCore skills granted directly. In rewards, granted to the player. In subordinate_rewards, granted to the subordinate.truev2.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 id and optional count (default 1).
  • Skill rewards use Tensura's normal skill learning flow and are available in STExtras v2.1.0 and up.
  • subordinate_rewards supports only reward fields where Sub Support is true.

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.

FieldTypeRequiredNotes
idstringyesSkill ids, such as tensura:infinite_regeneration.
masterynumbernoOptional mastery value to set on the granted skill. If omitted, the skill uses its default mastery.
duration_ticksintegernoOptional temporary duration in ticks. If omitted, the skill is permanent.
remove_timeintegernoAlternative name for duration_ticks. If omitted, the skill is permanent.
no_magicule_costbooleannoOptional 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, and commands in normal rewards.
  • 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

FieldTypeRequiredNotes
race_idstringnoOptional explicit race id. If omitted, STExtras infers it from the filename.
lore_messageobjectnoShown when the player reaches the race and has not finished that prestige.
start_messageobjectnoShown when the prestige run starts.
completed_messageobjectnoShown when all race prestige quests are done.
soul_gradeintegernoSoul grade reward granted when the race prestige is completed.
questsarrayyesArray of quest objects.

Race Message Object

Each message object supports:

{
  "title": "",
  "subtitle": "",
  "chat": ""
}

stat_first

Race prestige quests support:

"stat_first": true

This 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:any

master_type_magic ids:

tensura:aspectual
    tensura:spiritual
    tensura:summoning
    tensura:misc
    minecraft:any

master_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_misc

master_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_unidentified

master_subtype_magic spiritual level ids:

tensura:spiritual_lesser
    tensura:spiritual_medium
    tensura:spiritual_greater
    tensura:spiritual_lord
    minecraft:any
Spirit 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:any

Level ids:

tensura:lesser
    tensura:medium
    tensura:greater
    tensura:lord
    minecraft:any

Example:

{
      "name": "Contract Greater Flame Spirit",
      "creator": "spirit_contract",
      "type": "tensura:flame",
      "level": "tensura:greater",
      "amount": 1
    }
Última actualización: 1 de jun. de 2026 3:42

¿Fue útil?

Artículos relacionados