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.
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:
| Element | Analogous to | Role |
|---|---|---|
| Function | A Mythic mechanic | Performs an action: spawn a mob, send a message, play a sound, run a command, cast a Mythic skill. |
| Trigger | A Mythic trigger | Listens for something β a mob killed, a player entering an area, a block right-clicked/broken/placed β and activates the function attached to it. |
| Condition | A Mythic condition | Gates 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
- 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.
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.
| Function | Category | Description |
|---|---|---|
Start Dungeon | Dungeon | Starts the dungeon. Required if your dungeon has a lobby! |
Finish Dungeon | Dungeon | RECOMMENDED Formally finishes the dungeon for the player or players. |
Leave Dungeon | Dungeon | Sends the player or players out of the dungeon without completing it. |
Checkpoint | Dungeon | Sets a respawn checkpoint for the player or players. |
Signal Sender | Dungeon | Broadcasts a silent, configured signal to all "Signal Receiver" triggers. |
Lives Editor | Dungeon | Modifies the player or players lives. |
Reviver | Dungeon | Allows bringing another player back from death. |
Chunk Loader | Dungeon | When triggered, forces the chunk this function is in to remain loaded. Trigger again to allow the chunk to unload. |
Dungeon Status | Dungeon | Sets the dungeons "status" to a configurable text. Similar to Mythic Mobs stances. |
Difficulty | Dungeon | Allows changing the difficulty of the dungeon on the fly. |
Message Sender | Player | Sends a configured message to the player or players. |
Teleporter | Player | Teleports the player or players to a configured location. |
Title Sender | Player | Sends a configured title message to the player or players. |
Item Dispenser | Player | Gives or drops a configured item at the function's location. |
Key Dispenser | Player | Gives 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. |
Rewards | Player | Opens a rewards inventory the player can take items from. |
Random Rewards | Player | Opens a rewards inventory that randomizes its contents. |
Loot Table Rewards | Player | Opens a rewards inventory that randomizes its contents based on a loot table. |
Mob Spawner | Location | Spawns configured mobs at the function's location. |
NPC Spawner | Location | Spawns configured NPC at the function's location. _Only available with Citizens installed. Experimental feature! Stable, but not reliable as of yet!_ |
Block Editor | Location | Places or removes a block at the function's location. |
Sound Player | Location | Plays a configured sound. |
Redstone Block | Location | Places a redstone block at the function's location. |
Door Controller | Location | Makes a door lockable and unlockable with triggers. |
Block Controller | Location | Allows placing or breaking blocks at the function's location. |
Hologram | Location | _(1.3.0+)_ Displays a text hologram at a specified location. |
Moving Block | Location | Turns the block at this location into a moving block, which can be configured to slowly move somewhere else when triggered. |
Moving Block Cluster | Location | Turns a group of blocks into a group of moving blocks. Works similarly to moving block, but allows selecting many blocks. |
Room Door Controller | Room | _(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 Skill | Meta | Executes a Mythic Skill from the function's location. |
Mythic Signal | Meta | Sends a Mythic Mobs signal to nearby mobs. (For use with the ~onSignal MM trigger.) |
Command Sender | Meta | Sends a command either from the player/players or console. |
Multi Function | Meta | Allows running multiple functions at the same location and from the same trigger. |
Function Repeater | Meta | Runs a function a configured number of times on an interval. |
Delayed Function | Meta | Runs a function after a specified number of ticks have passed. |
Instance Variable | Meta | Sets, 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 Function | Meta | Picks one of several configured functions at random and runs it. |
Function Randomizer | Meta | Randomly chooses from a list of functions provided to run. |
Function Sequencer | Meta | Runs a list of functions one at a time in order each time it's triggered. |
Dungeon Variable | Meta | Allows 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
| Trigger | Category | Activates when |
|---|---|---|
Dungeon Start | Dungeon | Activates when the dungeon begins. (Has no configurable options.) |
Signal Receiver | Dungeon | Activates when it receives a matching configured signal from a signal sender function. |
Leave Dungeon Listener | Dungeon | Activates when a player leaves the dungeon. |
Right-Click | Player | Activates when a player right-clicks the block this trigger is located at. |
Player Detector | Player | Activates when a player or count of players gets within a certain distance of it. |
Key Item Detector | Player | Activates when a player uses a configured key item. |
Chat Message | Player | Activates when a player sends a message matching a configured pattern in chat. |
Block Detector | Player | Activates 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 Counter | Player | Activates when a configured number of players have died. |
Mob Death Counter | General | Activates when a configured number of specified mobs have died. |
Redstone Receiver | General | Activates when the block at the trigger location receives a redstone signal. |
AND Gate | Meta | Activates when all of several other configured triggers are activated. |
OR Gate | Meta | Activates when one of one of several other configured triggers is activated. |
Room Door | Room | _(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
| Condition | Checks |
|---|---|
Players Within | Checks if the specified number of players are within a configured distance from the function. |
Mobs Within | Checks if the specified number of a particular mob are within a configured distance from the function. |
Player Count | Checks if the dungeon has a specific number of players in it. |
Mythic Condition | Checks if a configured condition from Mythic Mobs is true or false. (Based on the location of the function.) |
Dungeon Status | Checks if the dungeons status is set to a specific text value. |
Trigger Chance | Makes it so this trigger has a % chance of succeeding whenever it's triggered. |
Time Elapsed | Checks if at least a specific amount of seconds have passed in the dungeon. |
Dungeon Difficulty | Checks if the dungeon is set to a specific difficulty level. |
Variable Comparison | Compares 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
| Mechanic | Description | Added |
|---|---|---|
dungeonbroadcast | Send a message, title, subtitle, or action bar to every player in the instance | v2.0.1 |
dungeonsound | Play a sound for every player in the instance | v2.0.1 |
dungeoncomplete | Finish the dungeon, granting rewards and ejecting players | v2.0.1 |
dungeonkick | Remove the target, or every player, from the dungeon | v2.0.1 |
dungeonmodifytime | Add or subtract seconds from the dungeon timer | v2.0.1 |
dungeonsignal | Fire a dungeon signal to activate matching triggers | v2.0.1 |
setdungeonvariable | Set an instance scoped variable readable as <dungeon.var.X> | v2.0.1 |
dungeonteleport | Teleport the target to a room spawn point (procedural only) | v2.0.1 |
dungeonsetrespawn | Set the target's in-dungeon respawn point | v2.0.1 |
dungeongivekey | Give the target a copy of one of the dungeon's access keys | v2.0.1 |
dungeonforceenter | Force the target into a named dungeon, skipping queue and ready check | v2.0.1 |
denyjoin | Deny a player entry from inside a join skill | v2.0.1 |
roomdoor | Open, 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:.
| Condition | Description | Added |
|---|---|---|
Operator | Aliases | Meaning |
>= | — | greater than or equal (default) |
> | gt | strictly greater than |
<= | le | less than or equal |
< | lt | strictly less than |
== | eq, = | equal |
!= | ne, <> | not equal |
dungeonplayercount | Compare the total player count (including dead/spectating) | v2.0.1 |
dungeonalivecount | Compare the living (non-spectating) player count | v2.0.1 |
dungeondeadcount | Compare the dead/spectating player count | v2.0.1 |
dungeonparticipants | Compare the recorded participant count | v2.0.1 |
dungeonmobcount | Compare the number of Mythic mobs in the instance | v2.0.1 |
dungeonelapsedtime | Compare seconds elapsed since the dungeon started | v2.0.1 |
dungeontimeleft | Compare seconds remaining before the dungeon times out | v2.0.1 |
dungeonprogress | Compare elapsed-time progress as a percentage | v2.0.1 |
dungeonisstarted | True when the instance has started | v2.0.1 |
dungeonisfinished | True when the instance is marked finished | v2.0.1 |
isindungeon | True when the target is in any dungeon instance | v2.0.1 |
dungeonis | True when the target is in a named dungeon | v2.0.1 |
dungeonspectating | True when the target is spectating | v2.0.1 |
partyleader | True when the target leads their dungeon party | v2.0.1 |
sharesparty | True when target and caster share a dungeon party | v2.0.1 |
partysize | Compare the target's dungeon party size | v2.0.1 |
dungeondifficulty | Match the difficulty by location and world (case sensitive) | v1.3.1 |
dungeondifficultynamed | Match the target's difficulty by name (case insensitive) | v2.0.1 |
dungeonenvironment | Match the dungeon's configured environment | v2.0.1 |
dungeonfinished | True when the target has completed a named dungeon before | v2.0.1 |
dungeononcooldown | True when the target is on access cooldown for a dungeon | v2.0.1 |
playerlives | Compare the target's remaining lives | v2.0.1 |
completeddungeons | Compare how many dungeons the target has ever completed | v2.0.1 |
inroom | True when the target is inside a named room | v2.0.1 |
insameroom | True when target and caster share a room | v2.0.0 |
inroomtype | Match the target's room type: start, end, normal | v2.0.1 |
mobinroom | True when a named mob is alive in a room | v2.0.1 |
roomcleared | True when a room has no Mythic mobs left | v2.0.1 |
roommobcount | Compare the Mythic mob count inside a room | v2.0.1 |
roomplayers | Compare or check players inside a room | v2.0.1 |
doorisopen | True when a named door is open | v2.0.1 |
dungeondepth | Compare the target's current room depth | v2.0.1 |
dungeontotalrooms | Compare the number of generated rooms | v2.0.1 |
Dungeon targeters
| Targeter | Resolves to | Added |
|---|---|---|
dungeonplayers | Every player in the caster's instance | v2.0.1 |
dungeonalive | Every living (non-spectating) player in the instance | v2.0.1 |
dungeonspectators | Every spectating player in the instance | v2.0.1 |
dungeonparty | The dungeon party present in the instance | v2.0.1 |
dungeonmobs | Every Mythic mob in the instance | v2.0.1 |
playersinworld | Every player in the caster's world (or instance under one-world) | v2.0.1 |
room | Entities or players inside a room (procedural only) | v2.0.0 |
roomspawn | The spawn point or random points inside a room (procedural only) | v2.0.1 |
Dungeon skill triggers
| Trigger | Fires when | Added |
|---|---|---|
~onDungeonStart | The dungeon instance starts | none |
~onDungeonEnd | The dungeon instance ends | none |
~onDungeonComplete | A player finishes the dungeon | the finishing player |
~onDungeonStatusChange | The Dungeon Status string changes | none |
~onDungeonDifficultyChange | The dungeon difficulty changes | none |
~onDungeonPlayerEnter | A player enters the dungeon | the entering player |
~onDungeonLeave | A player leaves the dungeon | the leaving player |
~onDungeonPlayerDeath | A player dies in the dungeon | the dying player |
~onDungeonPlayerRespawn | A player respawns in the dungeon | the respawning player |
~onDungeonCheckpoint | A player activates a Checkpoint function | the checkpoint player |
~SpectatorInteract | A spectator right-clicks a mob | the spectating player |
~onRoomEnter | A player enters a room | the entering player |
~onRoomLeave | A player leaves a room | the leaving player |
~onRoomFirstEnter | The first player enters a room | the entering player |
~onRoomEmptied | A room empties of players | the last player |
Dungeon placeholders
| Placeholder | Resolves to | Added |
|---|---|---|
<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
| Command | Does | Permission |
|---|---|---|
/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 / /notready | Confirms 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 |
/rewards | Opens the rewards inventory. Inside a dungeon it is view-only. | β |
/recruit | Creates a party recruitment listing. Experimental. | dungeons.party.recruit |
/recruit cancel / browse | Cancels your listing / browses open parties. | dungeons.party.recruit |
/md setexit <dungeon> | Sets the dungeon's exit location. | β |
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
| Version | Notable changes |
|---|---|
| Unreleased | Cross-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.1 | Support 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.0 | Major rewrite. Introduces the procedural free-tier limits described above. |
| 1.x | The pre-2.0 line. |
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
dungeons.functioneditoris separate fromdungeons.admin.- Gamerules are stored on the map, not the config β set them in-game in edit mode.
CloseDungeonWhenAllSpectatingonly works whenDeadPlayersSpectateis true, and spectators cannot use the spectator menu to leave β they need/md leave.- Instances are deleted on exit. Anything a player leaves behind in a dungeon world is gone; persist rewards through the rewards system, not the world.
- Mythic dungeon elements no-op outside a dungeon rather than erroring β a skill that silently does nothing may simply be running in the overworld.
- Procedural free-tier caps arrived with 2.0; a free 1.x setup with a larger procedural dungeon will hit limits on upgrade.
Sources
- MythicDungeons Wiki β Home
- MythicDungeons Wiki β How it Works
- MythicDungeons Wiki β Dungeon Config
- MythicDungeons Wiki β Functions
- MythicDungeons Wiki β Triggers
- MythicDungeons Wiki β Conditions
- MythicDungeons Wiki β Mythic Mobs Integration
- MythicDungeons Wiki β Free Version Differences
- MythicDungeons Wiki β Commands and Permissions
- MythicDungeons Wiki β Changelogs