Creating Quests

Last updated Sep 18, 2026

Creating Quests

Quests live in plugins/SoapsQuest/quests.yml under the top-level quests: map. Each key is a unique quest ID.

After editing, run /sq reload. Premium users can also use /sq editor [questid].


Minimal quest

quests:
  lumberjack:
    display: "<#55FF55>Lumberjack"
    tier: common
    difficulty: easy
    objectives:
      - type: break
        target: OAK_LOG
        amount: 32
    reward:
      xp: 50
      money: 25

Every quest needs at least one objective and at least one reward.


Common fields

Field Description
display Name shown on the paper (MiniMessage or & codes)
material Paper item material (default PAPER)
tier Tier ID from tiers.yml
difficulty Difficulty ID from difficulties.yml
sequential true = objectives must finish in order
milestones Progress percentages for milestone messages, e.g. [25, 50, 75]
lock-to-player true = paper binds to the first player who progresses
lore Custom lore lines (optional; default lore shows live progress)
permission Root field: gates progress after pickup (not browser lock)
objectives List of objective entries
reward Reward block (see Rewards)
conditions Start requirements (see Conditions)
timer Optional deadline (see Rewards)
fail-reward Payout when timed quest expires or finishes in overtime

Objectives

Each objective entry uses:

- type: kill
  target: ZOMBIE
  amount: 10
  • type: Objective type (see Objectives)
  • target: Entity, block, item, NPC id, region name, etc. depending on type
  • amount: Required count (or distance, minutes, level, etc. per type)

Some types use extra keys instead of target:

Type Extra fields
command command: "help"
placeholder placeholder: player_level
reachlevel level: 30
chat text: "hello"
vehicle vehicle: MINECART

Multi-target lists use YAML lists on target for break, place, and collect.


Conditions

Flat keys under conditions: gate pickup in the browser or at /sq give:

conditions:
  min-level: 10
  sigil-cost: 5
  permission: "rank.vip"
  completed-quests:
    - lumberjack

See Conditions.


Timed quests

timer:
  minutes: 15
  start-on: activate    # receive | activate
  on-expire: overtime   # fail | consolation | overtime
fail-reward:
  xp: 25

Global timer HUD options are in config.yml under quest-timer-display. See Default Configs.


Fixed quest givers can be stored in quests.yml:

citizens-npcs:
  "42":
    quest: lumberjack
    message: "<green>Take this job."

Or linked in-game: /sq npc link <npc> <quest-id> [message]

For random contracts use /sq npc broker instead (Premium). See Contract NPC Setup.


Showcase quests

Default quests.yml includes showcase_<type> entries for every objective type. They use permission: soapsquest.admin so only staff can pick them up in the browser.

/sq give <player> showcase_break

Version 1.0.5