Dungeon
Overview
Dungeon lets a party play a private copy of a dungeon. Each play-through is a run: it has its own world (or its own slot of a shared world), its own members, its own time limit, its own chests, NPCs and mobs, and it ends cleanly, sending everybody back to where they came from.
A dungeon is described by one Dungeon Instance entry. Players pick it in a global menu (a browser of dungeons grouped in a category), join a lobby in the party menu, mark themselves ready, and are teleported in when the countdown ends. Staff and quests can also send a player straight in with the Dungeon Enter action or a command.
There are two kinds of dungeon:
- Fixed: you build the dungeon once in a template world. Rooms are zones you draw in game, and everything happens at the places you set. This is the classic dungeon.
- Generated: you build room templates (small structures with doors and markers) and a generator assembles a new layout for each run, from start room to boss room. The same seed always gives the same dungeon. See Generated dungeons.
Both kinds share the same runs, menus, chests, NPCs, mobs, events and facts.
Dungeon targets Paper. It is not supported on Folia: the official Typewriter plugin does not run there.
Features
- Runs and groups: one run per group, several runs of the same dungeon at the same time (
maxSimultaneousInstances), a time limit, entry costs, run end on completion, time out, empty run or admin close. See Runs and world isolation. - Three isolation modes:
SLIME_CLONE,WORLD_PER_RUNandSHARED_WORLD_SLOTS, chosen per dungeon with theisolationfield. - Fixed dungeons: rooms with
onEnter/onLeavetriggers, modifiers, criteria and priority. - Generated dungeons: room templates, connector types, room pools, a generator, affixes, and an in-game editor to capture rooms and place doors and markers.
- Global menu and party menu: layouts of the GUI extension, refreshed live while players join and leave lobbies.
- Loot chests: block chests or NPC-anchored chests, real or client-side, one inventory per player or shared, weighted or independent loot.
- Per-run NPCs: an NPC shown only to the members of one run, from any Typewriter entity definition. See Entities in dungeons.
- Combat mobs: real vanilla mobs that appear once per run, with equipment, attributes, drop rules and triggers on death, bounded by a cap.
- Events, facts and actions: start, complete, room enter, room leave and mob death events; facts for "is in a dungeon" and "mobs alive"; actions to complete a run, clear a room and spawn a wave.
- Statistics: 22 statistics per player (runs, best time, mob kills, damage dealt and taken, deaths, waves cleared...), readable with placeholders and a fact and ranked in a GUI leaderboard. See Statistics.
- Reload safe: a
typewriter reloador a Publish keeps the runs going. A server restart ends them. - Parties of other plugins: reads the party of MMOCore, Parties or the Typewriter party extension so friends enter together.
Installation
- Install the GUI extension from its page. Both Dungeon menus use its layouts.
- Make sure the TypeWriter Quest extension is installed.
- Prepare what your isolation mode needs (see Runs and world isolation):
- Fixed dungeon: a template world, as a folder in your server root (next to
world), for exampledungeon_temple. The name may use letters, digits,_and-, up to 64 characters. - Generated dungeon: no template world. The extension creates an empty world for each run.
- Slime clone: Advanced Slime Paper with the template as a loaded slime world.
- Fixed dungeon: a template world, as a folder in your server root (next to
- Download Dungeon from the stores (see the buttons in the panel above) and put the JAR in
plugins/Typewriter/extensions/. - Restart the server.
- Optional: install MMOCore or Parties for external party support, and PlaceholderAPI for the placeholders.
Upgrading from 0.10? Read the migration note first.
Getting started
This walkthrough builds one fixed dungeon with a lobby menu and a chest. For a generated dungeon, start with Generated dungeons.
- In the web panel, open a manifest page and add a Dungeon Room Config. Stand where players should arrive, click the
spawnPointcontent editor, and confirm. The world, coordinates and view direction are captured. - Add a Dungeon Instance. Set
templateWorldto the world folder name, add the room config toroomConfigurations, and setminPartySizeandmaxPartySize. - Add a Dungeon Artifact (statistics) and an Active Dungeon Instance Artifact (state of the runs), and link them in
artifactandruntimeArtifact. Without the second one, runs are kept in aruns.jsonfile of the extension and a warning is logged at load. ThepartyLobbyArtifactfield is no longer used: leave it empty. - Add a Dungeon Category. In
instances, add a slot, setdungeonInstance, and choose the unlocked and locked items. - On a sequence page, add a Dungeon Global Menu and a Dungeon Party Menu. Design both layouts as described in Menus.
- Fire the global menu from an NPC dialogue, a command event or any other trigger. Publish.
- Add a Dungeon Loot Chest for the instance. Stand where the chest should be, capture
location, and filllootTable. - Add a Dungeon Complete action where the dungeon should end (for example at the end of a dialogue after the last chest).
- Test: open the menu, click the dungeon, click the lobby, press the ready button.
To skip menus and send one player straight in, use Dungeon Enter or /typewriter dungeon enter <instance>. It skips the lobby but not the rules: the group size (one player must be allowed by minPartySize), the criteria, the entry cost and the number of simultaneous runs are all checked.
How it works
A run starts when a lobby launches or when a Dungeon Enter action runs. The extension checks the criteria and the group size of every player, reserves a place (a double click makes one run), prepares the world, takes the entry cost (all or nothing), teleports the players, then fires onStart and applies modifiers for each member. If anything fails on the way, nothing is kept: the players stay where they were, the cost is refunded and the world is thrown away.
A run ends when Dungeon Complete runs, when the time limit reaches zero, when Dungeon Close or /typewriter dungeon close runs, or when the last player leaves, changes world or disconnects. onEnd fires for each member, the chests, NPCs and mobs of the run are removed, players are teleported to the exit point (or to where they came from), and the world is released.
Only one end wins when several happen at once, so you never get two onEnd or a double refund.
Reloads and restarts
A typewriter reload or a Publish does not lose the runs: they are adopted again with their members, world, deadline, room state (a once room stays spent), opened chests and the mobs already spawned. onStart, modifiers and chests are not replayed. A generated dungeon is rebuilt in memory from its seed.
A server restart ends the runs: the worlds of the runs are gone, players are sent home at their next join and the leftover world folders are purged. Lobbies are not restored by either.
Disconnections
A member who disconnects from a running dungeon keeps their place for the reconnectGrace of the Dungeon Instance (2 minutes by default). Meanwhile the run does not close and the statistics of that member are not paid out. A member who comes back in time reappears where they were, with their sidebar, their hidden slots and their game mode as before. When the delay runs out they leave the run, and at their next join they are sent back to where they entered from. The time limit of the run keeps counting.
A member who is waited for is still a member: if the run ends meanwhile, they get its outcome like the others, a completion and its best time included, while the onEnd triggers only run for the members who are online. 0 means no grace: a disconnection removes the player at once. A typewriter reload during the delay ends it for the players waited for.
With MMOProfiles installed, the return is checked again once the player has chosen a profile. A player who is in no run and whom the profile puts in a dungeon world is sent back to where they entered from, and the game mode that a dungeon had changed is given back, whatever mode the profile restored. A player who is in their run (in grace) simply resumes. Without MMOProfiles nothing changes.
Menus
Dungeon has two menus. Both are actions with a GUI layoutPool and a mainLayoutId. Items in the layouts work like any GUI item. The items whose buttonType is one of the values below are filled in by Dungeon: your item (material, name, lore) is kept and a click behaviour is added. Write buttonType in capitals, exactly as listed. Leave buttonPrefix empty.
Both menus repaint every autoRefreshTicks (20 by default, kept between 10 and 1200) and at once, for every player who has them open, whenever a lobby of the dungeons they show changes. A player sees another player join without clicking.
For the layout types, item fields (x, y, count, direction, gap, repeatY) and click actions, read the GUI guide. A step-by-step build is in Designing the menus.
Global menu
The Dungeon Global Menu shows the dungeons of one category. It opens when the action is triggered, or with /typewriter dungeon global-menu <category>.
buttonType | Behaviour |
|---|---|
DUNGEON_INSTANCE_SLOT | Marks where a dungeon appears. Place one per dungeon, or use count, direction, gap and repeatY to mark a row or a block. Each marker is replaced by the next dungeon of the category. Extra markers stay empty. |
DUNGEON_FIND_PARTY | Left click joins the first non-empty lobby that still has room, among the unlocked dungeons of the category, and opens the party menu. If the player is already in a lobby of the category, it leaves it instead. |
DUNGEON_INFO | Display only. Use it for a help item. |
How dungeons are drawn:
- Dungeons are ordered by their
categoryPriority(lowest first), then by entry id. - A slot is shown with
unlockedItem,unlockedNameandunlockLorewhen itscriteriamatch the player (an empty list always matches). Clicking it opens the party menu for that dungeon. - A slot whose
criteriado not match is shown with the locked look and cannot be opened. The criteria are evaluated for each player who opens the menu, and again when the player clicks. - Names and lore can use
{dungeon_name},{players}and{max}, plus PlaceholderAPI placeholders.{players}is the size of the first lobby of the dungeon. - Put the
DUNGEON_INSTANCE_SLOTmarkers insimple,paginatedorscrollablelayouts. If the base layout is scrollable, dungeons scroll with it. - Without any
DUNGEON_INSTANCE_SLOTmarker, no dungeon is displayed.
Party menu
The Dungeon Party Menu is the lobby. It opens when a player clicks a dungeon in the global menu, and with /typewriter dungeon instance-menu <instance>. Triggering the action itself does nothing except print a hint, so do not wire it to an NPC.
Which menu serves which dungeon. A party menu whose dungeonInstance names the dungeon serves it. A party menu with an empty dungeonInstance serves every dungeon no other menu names. A menu written for another dungeon is never opened instead: when none fits, the player is told and the server log says No dungeon_party_menu serves '<instance>'. So you can have one menu per dungeon, one shared menu, or both.
A dungeon has as many lobbies as its maxSimultaneousInstances. Each lobby is an item: lobbyItem named with lobbyName and described with lobbyLore. Where the lobbies are drawn:
- With
DUNGEON_LOBBY_SLOTmarkers in asimplelayout (the same way asDUNGEON_INSTANCE_SLOT, usecount,directionandgapto mark several), each marker is replaced by the next lobby. - Without any marker, lobby
nis placed at columnlobbyOffsetX + (n mod 9)and rowlobbyOffsetY + (n div 9), counting from 0.
Clicking a lobby joins it.
Placeholder in lobbyName and lobbyLore | Value |
|---|---|
{index} | Lobby number, from 1. |
{players}, {max} | Players in the lobby, and maxPartySize. |
{player_names} | Names of the members, wrapped in the ready or not-ready prefix and suffix. Lore only. |
{ready_players}, {not_ready_players} | Counts. Lore only. |
readyPlayerPrefix, readyPlayerSuffix, notReadyPlayerPrefix and notReadyPlayerSuffix colour the names in {player_names}.
buttonType | Behaviour |
|---|---|
DUNGEON_LOBBY_SLOT | Marks where a lobby appears. |
DUNGEON_READY | Toggles ready. If the player lacks the entry cost, nobody is marked ready and the lobby gets the missingItemsMessage of the dungeon. |
DUNGEON_LEAVE | Leaves the lobby and returns to the global menu the player came from. |
DUNGEON_AUTO_FILL | Joins the first non-empty lobby with a free place. |
When the run starts:
- Everyone in the lobby must be ready and the lobby must hold at least
minPartySizeplayers. - A countdown of
startCooldownSecondsruns. It stops if anyone un-readies. With0, the run starts at once. - The criteria are checked for every player, then the entry costs. With
entryCostModeLEADER, the first player of the lobby pays. WithGROUP, everyone pays. Items are taken only if nobody is missing anything. - The run is created and the players are teleported to the spawn point.
A lobby that is waiting without a countdown for lobbyIdleKickSeconds (120 seconds by default) is emptied. An admin can start a lobby by hand with /typewriter dungeon force-start <instance>, which waives the minimum group size and the criteria.
While players wait, the party menu can show a waiting scoreboard (enableWaitingScoreboard, scoreboardTitle, scoreboardWaiting with {missing}, scoreboardCountdown with {time}).
Parties of other plugins. If MMOCore (using its own party module), Parties or the Typewriter party extension is installed, Dungeon reads its parties and never creates, merges or changes them. When a player joins a lobby, the whole party of that player joins with them if the lobby has room for all of it. MMOCore is used alone when it is present.
Commands used by the buttons
The buttons do not use a server command: they call an internal handler of the menu system, so players need no permission and there is nothing to type by hand.
Configuration
The extension has no config file. Most settings live on entries. The messages of the action entries (Enter, Leave, Close, Complete) and of the dungeon instance (missingItemsMessage) are fields. The idle delay of a lobby is the lobbyIdleKickSeconds field of the dungeon instance (default 120, 2 minutes).
Every other text a player reads is a Typewriter snippet, so nothing is fixed in the code: change or translate them in the web panel (snippets). Values are MiniMessage, and {...} placeholders are replaced as listed. Keep the defaults and nothing changes.
| Family | Keys (after the prefix) |
|---|---|
content.dungeon_menu. | invalid_action, action_failed, in_instance, party_in_instance, global_in_instance, locked, lobby_unavailable, left_lobby, not_in_lobby, no_lobby_available, left_party, no_party_found, no_party_menu ({dungeon}), no_category, party_needs_dungeon |
content.dungeon_lobby. | idle_kick ({seconds}, {minutes}), party_sync, missing_items_fallback ({PlayerName}, {MissingQuantity}, {ItemName}; used when missingItemsMessage is empty), scoreboard_syncing |
content.dungeon_run.sidebar. | time_left ({seconds}), quest ({number}). A sidebar line is plain text: MiniMessage tags are removed. |
content.dungeon_chest. | default_title (title of a chest whose containerTitle is empty), trigger_chest_missing, trigger_not_manual |
content.dungeon_launch. | prefix (put before every text of the family), no_online_member, already_in_run ({player}), no_room_configuration, group_size ({size}, {min}, {max}), criteria_not_met ({player}), missing_cost and missing_cost_leader ({player}, {amount}, {item}), max_runs_reached, isolation_unavailable, generation_failed ({text}), failed |
content.dungeon_stats. | How the statistic placeholders read: duration_format (tokens {h}, {m}, {mm}, {ss}, {SSS}; default {mm}:{ss}) and missing_value (what is written for a value that does not exist yet; default -). |
content.dungeon_command. | The replies of the /typewriter dungeon ... commands: only_players.close, only_players.enter, only_players.leave, only_players.menu, only_players.force_start, only_players.edit_room (sent to the console), not_in_run, close.done, close.already_closing, enter.done ({dungeon}), leave.done ({dungeon}), instance_menu.join_failed, instance_menu.joined ({dungeon}), global_menu.not_configured ({category}), force_start.not_in_lobby, force_start.done ({dungeon}), room.invalid_index ({index}) |
content.dungeon_room., content.dungeon_room_template., content.dungeon_generated. | Room editors and generated-dungeon refusals. |
The replies of the /typewriter dungeon ... commands are snippets too, even though the commands are for staff only. The replies of the room editor (addnode, removenode, save...) are in content.dungeon_room., and the text of a refused enter is a content.dungeon_launch. snippet.
The artifacts store data under plugins/Typewriter/:
| Artifact | Content |
|---|---|
| Dungeon Artifact | Per-dungeon and per-player statistics (artifactId default dungeon_data). |
| Active Dungeon Instance Artifact | State of the runs in progress, so that a reload does not lose them. |
| Dungeon Room Template | The saved structure of one room of a generated dungeon. |
| Dungeon Party Lobby Artifact | Inert. Kept so that old pages still load. |
Commands
All Dungeon commands live under /typewriter dungeon (/tw dungeon). Each one requires the permission typewriter.dungeon.admin and must be run by a player.
| Command | Description |
|---|---|
/typewriter dungeon enter <instance> | Create a run for you alone and teleport to it. The group size, criteria, entry cost and run limit still apply. |
/typewriter dungeon leave <instance> | Remove yourself from your run of that dungeon and go back to where you came from. |
/typewriter dungeon close <instance> | End your own run of that dungeon (admin close). |
/typewriter dungeon global-menu <category> | Open the global menu configured for the category. |
/typewriter dungeon instance-menu <instance> | Join the first lobby with room for your group and open the party menu. |
/typewriter dungeon force-start <instance> | Start the lobby you are in without waiting for ready, the countdown, the minimum group size or the criteria. |
/typewriter dungeon room <room> edit | Open the in-game room editor for a Dungeon Room. |
/typewriter dungeon room <room> addnode | Add a node at your feet. |
/typewriter dungeon room <room> removenode | Remove the last node. |
/typewriter dungeon room <room> removenodeat <index> | Remove a node by its number, from 1. |
/typewriter dungeon room <room> save | Save the room. |
/typewriter dungeon room <room> cancel | Discard the edit. |
leave and close need you to be in a run of the dungeon you name, otherwise they answer "You are not in a run of this dungeon" (the content.dungeon_command.not_in_run snippet). The old start sub-command no longer exists: use enter.
Room templates of generated dungeons are edited from the web panel (the content editor of the artifactId field), not with a command. See Generated dungeons.
Room editor (fixed dungeons)
edit opens an editor with a toolbar in your hotbar: the blaze rod in slot 1 adds a node (at the block you look at, or at your feet when sneaking), the redstone in slot 2 removes the last node, and the lime dye in slot 8 saves and exits. Double-tap sneak exits without saving. Nodes are shown as blocks with a particle outline; sneak and click a node to delete it. One node makes a point room (radius 0.5 block), two make a line, three or more a polygon. The vertical extent comes from the lowest and highest node, plus verticalMargin.
Permissions
| Permission | Grants |
|---|---|
typewriter.dungeon.admin | Every /typewriter dungeon command, including the room editor. |
Players need no permission to use the menus.
Statistics
Dungeon counts what each player does during a run and keeps it, for each Dungeon Artifact, as 22 statistics. The counts of a run are held while it lasts and each member is paid once, when they leave the run or when it ends; nothing is written to disk hit by hit, and a typewriter reload keeps the counts of the runs in progress. A dungeon that shares its artifact with another adds to the same statistics.
| Key | Unit | What it holds |
|---|---|---|
runs_started | count | Runs begun, counted at the start even if the run is lost. |
runs_completed | count | Runs finished with the player still in. |
best_time | duration | Shortest time of a completed run (a record: no value before the first completion). |
runs_timed_out | count | Runs whose time limit ran out with the player still in. |
runs_left | count | Runs the player left on their own, or whose reconnection delay ran out. A death that takes the player out of the run is not counted here (it stays in deaths). |
mob_kills | count | Mobs killed. |
damage_dealt | health | Damage dealt to mobs, as it really took health: a hit of 100 on a target that had 2 health counts 2. |
damage_taken | health | Damage taken, with the same limit (the health and absorption the player had). |
deaths | count | Deaths. |
time_played | duration | Time spent in runs. |
completion_rate | rate | runs_completed over runs_started, computed when read and written as a percentage. |
current_health | health | Health of the player now. Only has a value during a run: it is never stored. |
best_run_kills | count | Most mobs killed in a single run (a record). |
best_run_damage | health | Most damage dealt in a single run (a record). |
flawless_completions | count | Completed runs without a death. |
solo_completions | count | Completed runs that began with one member. |
best_time_solo | duration | Shortest time of a completed solo run. |
health_regained | health | Health really regained, never more than what was missing. |
rooms_entered | count | Rooms entered; a room entered twice in a run counts once. |
rooms_cleared | count | Rooms cleared with Dungeon Clear Room, for the members standing in the room. |
chests_opened | count | Loot chests opened, once per chest for the player who made its loot. |
waves_cleared | count | Waves cleared. Only real waves count: the groups of a Dungeon Mob Spawn that define waves. |
Units: a health is in health points (a heart is two), a duration is written as mm:ss unless the snippets say otherwise, and a rate is written as a percentage.
What counts:
- Only the members of an active run, inside the world of their run, in
SURVIVALorADVENTURE. A player inCREATIVEorSPECTATORcounts for nothing, so an admin watching a run cannot top a board. - The mobs that count are set by
statsMobScopeon the Dungeon Instance.MARKED_ONLY(default): only the mobs made by the run (markeddungeon_mob_run); the pieces of a split slime never count as kills.ANY_MOB_IN_RUN_WORLD: also the other mobs of the world of the run, such as a boss placed by another plugin. It is refused withSHARED_WORLD_SLOTS, whose world holds other runs:MARKED_ONLYis used there and a warning is logged at load. - Statistics are counted for each artifact. Over several artifacts, the totals add the counters and keep the best record; two artifacts with the same
artifactIdare one file and count once.
Read them with the placeholders, with the Player Dungeon Statistic fact, or rank them in a GUI leaderboard with a Dungeon Leaderboard Source (GUI 0.20 or later).
Placeholders
PlaceholderAPI placeholders use the %typewriter_dungeon_…% prefix. Placeholders about the current run return 0 or an empty value when the player is not in a run. Exception: %typewriter_dungeon_stat_KEY% and its _raw form only resolve during a run; outside a run they stay displayed as written. Only dungeon_total_KEY and dungeon_inst_ID_KEY work outside a run.
| Placeholder | Returns |
|---|---|
%typewriter_dungeon_remaining% | Seconds left in the player's run. |
%typewriter_dungeon_remaining_formatted% | Time left as mm:ss. |
%typewriter_dungeon_players% | Players in the player's run. |
%typewriter_dungeon_max% | maxPartySize of the player's dungeon. |
%typewriter_dungeon_list% | Names of the players in the run, separated by commas. |
%typewriter_dungeon_player_N_name% | Name of the Nth player of the run (from 1). |
%typewriter_dungeon_player_N_health%, …_maxhealth%, …_healthpercent% | Health, maximum health and percentage of the Nth player. |
%typewriter_dungeon_player_health_N% | Name: health/max of the Nth player. |
%typewriter_dungeon_lobby_time% | Seconds left on the countdown of the player's lobby. Add _formatted for mm:ss. |
%typewriter_dungeon_attempts%, %typewriter_dungeon_completions%, %typewriter_dungeon_best% | Runs, completions and best time of the player for the dungeon they are in. |
%typewriter_dungeon_total_attempts%, …_total_completions%, …_total_ratio% | Totals across all dungeons, and the completion percentage. |
%typewriter_dungeon_inst_ID_attempts%, …_completions%, …_best% | The same statistics for the dungeon whose entry id is ID. The id must not contain an underscore. |
%typewriter_dungeon_stat_KEY%, …_stat_KEY_raw% | Any statistic of the player, in the artifact of the dungeon they are in. KEY is the key of the table, for example %typewriter_dungeon_stat_mob_kills%. _raw gives the bare number of the unit (milliseconds, health points, parts per thousand), 0 when there is no value. |
%typewriter_dungeon_total_KEY%, …_total_KEY_raw% | The same statistic over all the dungeons. |
%typewriter_dungeon_inst_ID_KEY%, …_inst_ID_KEY_raw% | The same statistic for the dungeon whose entry id is ID. |
current_health only has a value in dungeon_stat_current_health, during a run. A duration is written with the snippet content.dungeon_stats.duration_format and a missing value with content.dungeon_stats.missing_value.
The statistics come from the Dungeon Artifact linked in the artifact field of the dungeon. Dungeon writes them itself (attempts when a run starts, completions and best time when a run completes). A player's best time is kept once per artifact, over every dungeon that shares it: give each dungeon its own artifact when each needs its own best time. Statistics are kept per MMOProfiles profile when that plugin is installed, and per player otherwise. There is nothing to configure.
Entries
39 entries, generated from the extension source.
Actions9
- Dungeon Clear RoomDungeon Clear Room
- Dungeon CloseDungeon Close
- Dungeon CompleteDungeon Complete
- Dungeon EnterDungeon Enter
- Dungeon Global MenuDungeon Global Menu
- Dungeon LeaveDungeon Leave
- Dungeon Party MenuDungeon Party Menu
- Dungeon Spawn MobsDungeon Spawn Mobs
- Loot Chest TriggerLoot Chest Trigger
Events6
- On Dungeon CompleteWhen a dungeon run is completed
- On Dungeon Mob DeathWhen a dungeon mob dies
- On Dungeon Mobs ClearedWhen dungeon mobs are cleared
- On Dungeon Room EnterWhen a player enters a dungeon room
- On Dungeon Room LeaveWhen a player leaves a dungeon room
- On Dungeon StartWhen a dungeon run starts
Facts4
- Dungeon Mobs AliveDungeon Mobs Alive
- Dungeon StatPlayer Dungeon Statistic
- IndungeonPlayer Inside Dungeon
- Indungeon InstancePlayer Inside Specific Dungeon
Audiences1
- Dungeon Run AudiencePlayers in a dungeon run
Entities1
- Dungeon NPC InstanceDungeon NPC Instance
Groups1
- Dungeon Run GroupPlayers of a dungeon run
Artifacts4
- Active Dungeon Instance ArtifactActive Dungeon Instance Artifact
- Dungeon ArtifactUnified Dungeon Data Artifact
- Dungeon Party Lobby ArtifactDungeon Party Lobby Artifact
- Dungeon Room TemplateDungeon Room Template
Manifests13
- Dungeon AffixDungeon Affix
- Dungeon CategoryDungeon Category
- Dungeon Connector TypeDungeon Connector Type
- Dungeon GeneratorDungeon Generator
- Dungeon InstanceDungeon Instance
- Dungeon Leaderboard SourceDungeon Leaderboard Source
- Dungeon Loot ChestDungeon Loot Chest
- Dungeon Loot TableDungeon Loot Table
- Dungeon Mob SpawnDungeon Mob Spawn
- Dungeon RestrictionsDungeon Restrictions
- Dungeon RoomDungeon Room
- Dungeon Room ConfigDungeon Room Config
- Dungeon Room PoolDungeon Room Pool
Troubleshooting
The menu does not open. The GUI extension is missing, or mainLayoutId does not match the id of a layout in layoutPool. Install GUI, then check the id.
Dungeons do not appear in the global menu. The layout has no item with buttonType set to DUNGEON_INSTANCE_SLOT, or the markers are in a layout type other than simple, paginated or scrollable.
A button does nothing or does not look like a button. buttonType is case-sensitive and must be one of DUNGEON_FIND_PARTY, DUNGEON_INFO, DUNGEON_INSTANCE_SLOT, DUNGEON_LOBBY_SLOT, DUNGEON_READY, DUNGEON_LEAVE or DUNGEON_AUTO_FILL. A global button in the party menu, or the reverse, is ignored.
A dungeon is shown as Locked. The criteria of its slot in the category do not match this player. Check them with the player's facts, or empty the list.
Clicking a dungeon prints nothing and no menu opens. No party menu serves the dungeon. Check the server log for No dungeon_party_menu serves, then create one with an empty dungeonInstance or one naming the dungeon.
"The dungeon cannot be started on this server." The isolation mode of the dungeon cannot run here (for example SLIME_CLONE without Advanced Slime Paper), or it cannot hold a generated dungeon. There is no fallback to another mode. See Runs and world isolation.
"The group has N player(s): this dungeon needs X to Y." The lobby or the enter command was used with a group outside minPartySize to maxPartySize. An admin can use force-start from a lobby.
"All the runs of this dungeon are taken." maxSimultaneousInstances runs are already active.
Players arrive in an empty new world. templateWorld does not match a world folder in the server root. The log says Cannot teleport player … world '…' not found when the world cannot be loaded at all.
Players keep being thrown out of the run. Leaving the world of the run, even through a command, removes the player from it. The last player leaving ends the run.
A loot chest triggered by Loot Chest Trigger never comes back. The default triggerMode ONCE is once per run. Use REPEATABLE to trigger it several times in the same run. The next run starts clean.
An NPC never shows. In a generated dungeon the NPC appears only through an NPC marker of a room of the run. In a fixed dungeon check allowedDungeonIds and spawnLocation. See Entities in dungeons.
A room is empty of mobs even though no mob is alive. The cap maxAliveMobs may have held some back, and a reload makes the extension count again. Do not use Dungeon Mobs Alive to decide that a room is cleared: use the mob death event.
Related extensions
- FakeBlock: its
INSTANCE_DIMENSIONposition mode is meant for Dungeon runs. - GUI: layouts of the global and party menus.
- MMOCore: party source for lobbies.
- Changelog and Migration from 0.10.