MythicDungeons

Instanced, scripted dungeon worlds. Every party gets a private copy of the map, automated with functions, triggers and conditions placed in-game β€” plus a queue, a party system, and a deep two-way integration with MythicMobs skills.

πŸ“Œ Scope note

MythicDungeons is a Paper/Spigot plugin with a free tier (see limits). It is authored primarily through an in-game editor rather than config files β€” the per-dungeon YAML config exists, but functions and triggers are placed with a tool in the world. Syntax here targets the 2.0.x line.

How it works

A dungeon is a Minecraft world that gets copied on demand. When a party enters, a fresh copy of that world β€” an instance β€” is created and the players are teleported into it. When the last player leaves, the instance is deleted.

Three concepts do all the automation work, and they map closely onto Mythic's own vocabulary:

ElementAnalogous toRole
FunctionA Mythic mechanicPerforms an action: spawn a mob, send a message, play a sound, run a command, cast a Mythic skill.
TriggerA Mythic triggerListens for something β€” a mob killed, a player entering an area, a block right-clicked/broken/placed β€” and activates the function attached to it.
ConditionA Mythic conditionGates a trigger: players nearby, a mob count, a player count, or any Mythic condition.

Instance limits and the queue. The global config.yml caps total simultaneous instances, and each dungeon's own config caps instances of itself. When all slots are full, an entering party is queued; once a slot frees up they get a title, a message, and a ready-up countdown. The same ready-up prompt appears whenever a party enters, queue or not.

Parties. A built-in party system provides a leader, private chat and a recruitment flow (/recruit) that broadcasts open-invite listings with a label, description, party size and optional password.

Free vs premium

⚠ Version differences
  • Free tier: 2 dungeons maximum. Those two may be arbitrarily complex β€” no features are locked.
  • From 2.0, procedural dungeons gain free-tier limits that did not previously exist: 1 procedural dungeon, a maximum of 15 rooms per generated dungeon, and at most 5 unique rooms. Aside from those caps, procedural dungeons have the same features on free as on premium.

Dungeon config

Each dungeon carries its own config file; maps/default-config.yml supplies the defaults for newly created dungeons. Gamerules are not in this file β€” they live on the map and are set with /gamerule while in edit mode.

plugins/MythicDungeons/maps/<dungeon>/config.yml

General:
  # Do not change! Tracks the config version across major updates.
  Version: 1

  DungeonType: CLASSIC

  # natural                        = default superflat
  # mythicdungeons:void            = classic void generator
  # mythicdungeons:block.[BLOCK]   = full-height chunks of one block
  ChunkGenerator: natural

  DisplayName: "&bA Dungeon"
  ShowTitleOnStart: false

  Lobby:
    Enabled: false

  # Where players land after the "Finish Dungeon" function. Set with /md setexit.
  ExitLocation: null
  AlwaysUseExit: false

  Gamemode: SURVIVAL

  # Deaths allowed before a player can no longer respawn. 0 = infinite.
  PlayerLives: 0
  InstantRespawnPlayers: false

  # Out-of-lives players spectate; if false they are kicked from the dungeon.
  DeadPlayersSpectate: true
  # Only works when DeadPlayersSpectate is true.
  CloseDungeonWhenAllSpectating: true

  KeepInventoryOnEnter: true

The config also covers entry requirements, reward cooldowns, and blocking out-of-bounds abuse such as ender pearls and chorus fruit.

πŸ“Œ Note

The upstream docs state the shipped default-config.yml is kept current and may contain options exclusive to dev builds, and that an in-game editor for this config is planned but not yet available. Treat the file itself as the authoritative option list for your build.

Function index

Functions are placed in the world with the function editor (the feather tool). Categories group them by what they act on.

FunctionCategoryDescription
Start DungeonDungeonStarts the dungeon. Required if your dungeon has a lobby!
Finish DungeonDungeonRECOMMENDED Formally finishes the dungeon for the player or players.
Leave DungeonDungeonSends the player or players out of the dungeon without completing it.
CheckpointDungeonSets a respawn checkpoint for the player or players.
Signal SenderDungeonBroadcasts a silent, configured signal to all "Signal Receiver" triggers.
Lives EditorDungeonModifies the player or players lives.
ReviverDungeonAllows bringing another player back from death.
Chunk LoaderDungeonWhen triggered, forces the chunk this function is in to remain loaded. Trigger again to allow the chunk to unload.
Dungeon StatusDungeonSets the dungeons "status" to a configurable text. Similar to Mythic Mobs stances.
DifficultyDungeonAllows changing the difficulty of the dungeon on the fly.
Message SenderPlayerSends a configured message to the player or players.
TeleporterPlayerTeleports the player or players to a configured location.
Title SenderPlayerSends a configured title message to the player or players.
Item DispenserPlayerGives or drops a configured item at the function's location.
Key DispenserPlayerGives one player a configured key item. Defaults to a dungeon key item. Note: Similar to Item Dispenser, however it reports a key being found to the players and gives the key to the party leader if the function is set to target the party.
RewardsPlayerOpens a rewards inventory the player can take items from.
Random RewardsPlayerOpens a rewards inventory that randomizes its contents.
Loot Table RewardsPlayerOpens a rewards inventory that randomizes its contents based on a loot table.
Mob SpawnerLocationSpawns configured mobs at the function's location.
NPC SpawnerLocationSpawns configured NPC at the function's location. _Only available with Citizens installed. Experimental feature! Stable, but not reliable as of yet!_
Block EditorLocationPlaces or removes a block at the function's location.
Sound PlayerLocationPlays a configured sound.
Redstone BlockLocationPlaces a redstone block at the function's location.
Door ControllerLocationMakes a door lockable and unlockable with triggers.
Block ControllerLocationAllows placing or breaking blocks at the function's location.
HologramLocation_(1.3.0+)_ Displays a text hologram at a specified location.
Moving BlockLocationTurns the block at this location into a moving block, which can be configured to slowly move somewhere else when triggered.
Moving Block ClusterLocationTurns a group of blocks into a group of moving blocks. Works similarly to moving block, but allows selecting many blocks.
Room Door ControllerRoom_(Procedural dungeons only)_ Opens, closes, or toggles named doors in the room this function is placed in. Pairs with the Room Door trigger and the roomdoor mythic mechanic.
Mythic SkillMetaExecutes a Mythic Skill from the function's location.
Mythic SignalMetaSends a Mythic Mobs signal to nearby mobs. (For use with the ~onSignal MM trigger.)
Command SenderMetaSends a command either from the player/players or console.
Multi FunctionMetaAllows running multiple functions at the same location and from the same trigger.
Function RepeaterMetaRuns a function a configured number of times on an interval.
Delayed FunctionMetaRuns a function after a specified number of ticks have passed.
Instance VariableMetaSets, adds, or subtracts an instance-scoped variable. The variable is readable from triggers via the "Instance Variable" trigger condition and from Mythic skills via <dungeon.var.X>. See Variables.
Random FunctionMetaPicks one of several configured functions at random and runs it.
Function RandomizerMetaRandomly chooses from a list of functions provided to run.
Function SequencerMetaRuns a list of functions one at a time in order each time it's triggered.
Dungeon VariableMetaAllows setting and modifying a custom variable. Best used with the Variable Comparison condition. Variables can be used in message senders with the following format: <my_variable_here>

Trigger index

TriggerCategoryActivates when
Dungeon StartDungeonActivates when the dungeon begins. (Has no configurable options.)
Signal ReceiverDungeonActivates when it receives a matching configured signal from a signal sender function.
Leave Dungeon ListenerDungeonActivates when a player leaves the dungeon.
Right-ClickPlayerActivates when a player right-clicks the block this trigger is located at.
Player DetectorPlayerActivates when a player or count of players gets within a certain distance of it.
Key Item DetectorPlayerActivates when a player uses a configured key item.
Chat MessagePlayerActivates when a player sends a message matching a configured pattern in chat.
Block DetectorPlayerActivates when a player places and/or breaks a configured block type at the trigger location. (Also allows placing and/or breaking at the location.) Decorated Pots broken by player projectiles fire this trigger too. _(v2.0.1)_
Player Death CounterPlayerActivates when a configured number of players have died.
Mob Death CounterGeneralActivates when a configured number of specified mobs have died.
Redstone ReceiverGeneralActivates when the block at the trigger location receives a redstone signal.
AND GateMetaActivates when all of several other configured triggers are activated.
OR GateMetaActivates when one of one of several other configured triggers is activated.
Room DoorRoom_(Procedural dungeons only)_ Activates when a named door in the same room as the trigger opens or closes. Pairs with the Room Door Controller function.

Condition index

ConditionChecks
Players WithinChecks if the specified number of players are within a configured distance from the function.
Mobs WithinChecks if the specified number of a particular mob are within a configured distance from the function.
Player CountChecks if the dungeon has a specific number of players in it.
Mythic ConditionChecks if a configured condition from Mythic Mobs is true or false. (Based on the location of the function.)
Dungeon StatusChecks if the dungeons status is set to a specific text value.
Trigger ChanceMakes it so this trigger has a % chance of succeeding whenever it's triggered.
Time ElapsedChecks if at least a specific amount of seconds have passed in the dungeon.
Dungeon DifficultyChecks if the dungeon is set to a specific difficulty level.
Variable ComparisonCompares two values with support for variables. Variables are set using the Dungeon Variable function, and are formatted like so: <my_variable_here>

MythicMobs integration

With MythicMobs installed alongside, MythicDungeons registers a full set of dungeon-aware skill elements. These act on the dungeon instance containing the caster; outside a dungeon they simply do nothing (conditions fail, targeters resolve to nothing). Entries marked procedural-only require a generated dungeon.

This is what lets a boss's Mythic skill read and drive dungeon state β€” for example announcing to the whole instance and opening a door on death:

plugins/MythicMobs/Skills/dungeon_boss.yml

DungeonBossDeath:
  Skills:
  - dungeonbroadcast{title="<gold>The Warden Falls";subtitle="The way opens"}
  - dungeonsound{s=ui.toast.challenge_complete}
  - skill{s=OpenVault} ?dungeondifficulty{d=hard}

Dungeon mechanics

MechanicDescriptionAdded
dungeonbroadcastSend a message, title, subtitle, or action bar to every player in the instancev2.0.1
dungeonsoundPlay a sound for every player in the instancev2.0.1
dungeoncompleteFinish the dungeon, granting rewards and ejecting playersv2.0.1
dungeonkickRemove the target, or every player, from the dungeonv2.0.1
dungeonmodifytimeAdd or subtract seconds from the dungeon timerv2.0.1
dungeonsignalFire a dungeon signal to activate matching triggersv2.0.1
setdungeonvariableSet an instance scoped variable readable as <dungeon.var.X>v2.0.1
dungeonteleportTeleport the target to a room spawn point (procedural only)v2.0.1
dungeonsetrespawnSet the target's in-dungeon respawn pointv2.0.1
dungeongivekeyGive the target a copy of one of the dungeon's access keysv2.0.1
dungeonforceenterForce the target into a named dungeon, skipping queue and ready checkv2.0.1
denyjoinDeny a player entry from inside a join skillv2.0.1
roomdoorOpen, close, or toggle a room's doors (procedural only)v2.0.0

Dungeon conditions

Evaluated against the dungeon instance containing the checked entity β€” the caster in Conditions:, the target in TargetConditions:.

ConditionDescriptionAdded
OperatorAliasesMeaning
>=greater than or equal (default)
>gtstrictly greater than
<=leless than or equal
<ltstrictly less than
==eq, =equal
!=ne, <>not equal
dungeonplayercountCompare the total player count (including dead/spectating)v2.0.1
dungeonalivecountCompare the living (non-spectating) player countv2.0.1
dungeondeadcountCompare the dead/spectating player countv2.0.1
dungeonparticipantsCompare the recorded participant countv2.0.1
dungeonmobcountCompare the number of Mythic mobs in the instancev2.0.1
dungeonelapsedtimeCompare seconds elapsed since the dungeon startedv2.0.1
dungeontimeleftCompare seconds remaining before the dungeon times outv2.0.1
dungeonprogressCompare elapsed-time progress as a percentagev2.0.1
dungeonisstartedTrue when the instance has startedv2.0.1
dungeonisfinishedTrue when the instance is marked finishedv2.0.1
isindungeonTrue when the target is in any dungeon instancev2.0.1
dungeonisTrue when the target is in a named dungeonv2.0.1
dungeonspectatingTrue when the target is spectatingv2.0.1
partyleaderTrue when the target leads their dungeon partyv2.0.1
sharespartyTrue when target and caster share a dungeon partyv2.0.1
partysizeCompare the target's dungeon party sizev2.0.1
dungeondifficultyMatch the difficulty by location and world (case sensitive)v1.3.1
dungeondifficultynamedMatch the target's difficulty by name (case insensitive)v2.0.1
dungeonenvironmentMatch the dungeon's configured environmentv2.0.1
dungeonfinishedTrue when the target has completed a named dungeon beforev2.0.1
dungeononcooldownTrue when the target is on access cooldown for a dungeonv2.0.1
playerlivesCompare the target's remaining livesv2.0.1
completeddungeonsCompare how many dungeons the target has ever completedv2.0.1
inroomTrue when the target is inside a named roomv2.0.1
insameroomTrue when target and caster share a roomv2.0.0
inroomtypeMatch the target's room type: start, end, normalv2.0.1
mobinroomTrue when a named mob is alive in a roomv2.0.1
roomclearedTrue when a room has no Mythic mobs leftv2.0.1
roommobcountCompare the Mythic mob count inside a roomv2.0.1
roomplayersCompare or check players inside a roomv2.0.1
doorisopenTrue when a named door is openv2.0.1
dungeondepthCompare the target's current room depthv2.0.1
dungeontotalroomsCompare the number of generated roomsv2.0.1

Dungeon targeters

TargeterResolves toAdded
dungeonplayersEvery player in the caster's instancev2.0.1
dungeonaliveEvery living (non-spectating) player in the instancev2.0.1
dungeonspectatorsEvery spectating player in the instancev2.0.1
dungeonpartyThe dungeon party present in the instancev2.0.1
dungeonmobsEvery Mythic mob in the instancev2.0.1
playersinworldEvery player in the caster's world (or instance under one-world)v2.0.1
roomEntities or players inside a room (procedural only)v2.0.0
roomspawnThe spawn point or random points inside a room (procedural only)v2.0.1

Dungeon skill triggers

TriggerFires whenAdded
~onDungeonStartThe dungeon instance startsnone
~onDungeonEndThe dungeon instance endsnone
~onDungeonCompleteA player finishes the dungeonthe finishing player
~onDungeonStatusChangeThe Dungeon Status string changesnone
~onDungeonDifficultyChangeThe dungeon difficulty changesnone
~onDungeonPlayerEnterA player enters the dungeonthe entering player
~onDungeonLeaveA player leaves the dungeonthe leaving player
~onDungeonPlayerDeathA player dies in the dungeonthe dying player
~onDungeonPlayerRespawnA player respawns in the dungeonthe respawning player
~onDungeonCheckpointA player activates a Checkpoint functionthe checkpoint player
~SpectatorInteractA spectator right-clicks a mobthe spectating player
~onRoomEnterA player enters a roomthe entering player
~onRoomLeaveA player leaves a roomthe leaving player
~onRoomFirstEnterThe first player enters a roomthe entering player
~onRoomEmptiedA room empties of playersthe last player

Dungeon placeholders

PlaceholderResolves toAdded
<dungeon.name>The dungeon's world/folder name.(v2.0.1)
<dungeon.displayname>The colored display name from the dungeon's config.(v2.0.1)
<dungeon.uuid>The UUID of the current dungeon instance.(v2.0.1)
<dungeon.difficulty>The difficulty namespace currently applied.(v2.0.1)
<dungeon.difficulty.display>The colored display name of the current difficulty.(v2.0.1)
<dungeon.environment>The dungeon's configured environment (NORMAL, NETHER, or THE_END).(v2.0.1)
<dungeon.players>Total number of players in the instance.(v2.0.1)
<dungeon.players.alive>Number of non-spectating players in the instance.(v2.0.1)
<dungeon.dead>Number of players currently dead or spectating in the instance.(v2.0.1)
<dungeon.spectators>Number of the original participants who are no longer active players in the instance.(v2.0.1)
<dungeon.maxplayers>The configured maximum party size (Requirements.MaxPartySize, default 4).(v2.0.1)
<dungeon.mobs>Number of Mythic mobs alive in the instance world.(v2.0.1)
<dungeon.mobs.MOB_NAME>Number of Mythic mobs of the given internal name alive in the instance.(v2.0.1)
<dungeon.elapsed>Seconds elapsed since the dungeon started.(v2.0.1)
<dungeon.elapsed.formatted>mm:ss formatted elapsed time.(v2.0.1)
<dungeon.timeleft>Seconds remaining before the dungeon times out (when General.TimeLimit > 0).(v2.0.1)
<dungeon.timelimit>The effective time limit, in seconds, for the current difficulty.(v2.0.1)
<dungeon.timelimit.formatted>The time limit formatted as HH:mm:ss or mm:ss.(v2.0.1)
<dungeon.progress>Elapsed-time progress as a whole-number percentage from 0 to 100.(v2.0.1)
<dungeon.progress.fraction>Elapsed-time progress as a fraction from 0.00 to 1.00.(v2.0.1)
<dungeon.status>The current "Dungeon Status" string set by the Dungeon Status function. Empty when no status is set.(v2.0.1)
<dungeon.lives.left>Lives remaining for the player the skill is running against. 0 when no player can be resolved.(v2.0.1)
<dungeon.lives.max>The configured PlayerLives for the active difficulty (respects per-difficulty overrides).(v2.0.1)
<dungeon.party.size>Member count of the resolved player's dungeon party. Returns 1 when the player is solo.(v2.0.1)
<dungeon.party.leader>Name of the dungeon-party leader. Empty when the resolved player is solo.(v2.0.1)
<dungeon.room.name>The namespace of the room the caster is currently in. Procedural dungeons only.(v2.0.1)
<dungeon.room.depth>The depth (distance from start) of the caster's current room. Procedural dungeons only.(v2.0.1)
<dungeon.room.rotation>The rotation applied to the caster's current room. Procedural dungeons only.(v2.0.1)
<dungeon.room.id>The UUID of the caster's current room. Procedural dungeons only.(v2.0.1)
<dungeon.room.dungeon>The world name of the dungeon the room belongs to. Procedural dungeons only.(v2.0.1)
<dungeon.room.players>Current number of players in the caster's room (alias playercount). Procedural dungeons only.(v2.0.1)
<dungeon.room.prevplayers>Player count in the room before the last transition (alias previousplayers). Procedural dungeons only.(v2.0.1)
<dungeon.room.lastplayer>Name of the last player associated with the room, or empty. Procedural dungeons only.(v2.0.1)
<dungeon.room.lastplayeruuid>UUID of the last player associated with the room, or empty. Procedural dungeons only.(v2.0.1)
<dungeon.room.emptycause>Why the room last emptied, or empty. Procedural dungeons only.(v2.0.1)
<dungeon.roommobs>Number of Mythic mobs in the caster's current room. Procedural dungeons only.(v2.0.1)
<dungeon.roommobs.MOB_NAME>Same, restricted to a single internal mob name. Procedural dungeons only.(v2.0.1)
<dungeon.rooms>Total number of generated rooms. Procedural dungeons only.(v2.0.1)
<dungeon.rooms.cleared>Number of rooms with no Mythic mobs left. Procedural dungeons only.(v2.0.1)
<dungeon.rooms.remaining>Number of rooms that still contain Mythic mobs. Procedural dungeons only.(v2.0.1)
<dungeon.roombounds>The center of the caster's current room as x,y,z. Procedural dungeons only.(v2.0.1)
<dungeon.roombounds.min>The minimum corner of the caster's current room as x,y,z. Procedural dungeons only.(v2.0.1)
<dungeon.roombounds.max>The maximum corner of the caster's current room as x,y,z. Procedural dungeons only.(v2.0.1)
<dungeon.door.NAME.open>Whether the door named NAME in the caster's current room is open (true/false; state works as an alias for open). Procedural dungeons only.(v2.0.1)
<dungeon.var.X>The value of the instance-scoped variable named X. See Dungeon Variables.(v2.0.1)

Beyond Mythic, MythicDungeons also exposes PlaceholderAPI placeholders and a BetonQuest integration.

Commands

CommandDoesPermission
/md (/dungeon)Base command for most subcommands.β€”
/md play <dungeon> [player]Starts or joins a dungeon.β€”
/leave (/md leave)Leaves the current dungeon. In edit mode with nobody else editing, saves and unloads it.β€”
/ready / /notreadyConfirms or cancels the queue ready-up for the party.β€”
/stuck (/md stuck)Returns you to the last checkpoint or respawn point. Can be configured to kill instead.dungeons.stuck
/rewardsOpens the rewards inventory. Inside a dungeon it is view-only.β€”
/recruitCreates a party recruitment listing. Experimental.dungeons.party.recruit
/recruit cancel / browseCancels your listing / browses open parties.dungeons.party.recruit
/md setexit <dungeon>Sets the dungeon's exit location.β€”
⚠ Gotcha β€” the function editor permission

To use the function editor (the feather tool) you must hold dungeons.functioneditor even if you already have dungeons.admin. Admin does not imply it. This is the most common "why can't I edit my dungeon" answer.

Version history

VersionNotable changes
UnreleasedCross-dungeon room references β€” procedural rooms reusable across dungeons via dungeon:room syntax in room whitelists, Mythic skills and dungeon functions, with a whitelist-editor picker listing other dungeons' rooms. Hierarchical tileset foundation β€” early groundwork for a tile-based generator nesting maps, compounds, structures, rooms, decor and items; not yet usable from the editor.
2.0.1Support for Paper 1.21.1–1.21.4; 1.21.5 experimental. Fixes: player-name check on party invite, party-invite click event, colour codes leaking into GUIs, party join chat feedback, custom Mythic conditions/mechanics/targeters, tab completion for the generator in md create, MultiverseInventories NPE, AvnGUI startup exception, assorted 1.21+ errors. Improved teleporting so it no longer interferes with third-party plugins, and stopped console spam when an instance teleport fails or is blocked.
2.0Major rewrite. Introduces the procedural free-tier limits described above.
1.xThe pre-2.0 line.
πŸ“Œ Note

The wiki's changelog carries an Unreleased section and then jumps to 2.0.1; it does not enumerate 1.x releases. The version markers in the integration tables above (v2.0.1) are the most precise per-feature version data the project publishes.

Gotchas

Sources