Skip to main content

Changelog

1.2​

  • Dungeon Mob Spawn: lootTable, spawnParticle, scaling with the number of players (perExtraPlayer, maxCount, playerCountSource), maxSimultaneous, waves, and the triggers onWaveCleared and onCleared.
  • New Dungeon Loot Table: one loot table shared by chests and mobs.
  • Dungeon Loot Chest: lootTableRef, and additionalLocations to place several chests from one entry (ignored in a generated dungeon).
  • Loot Chest Trigger: particleEffect, with separate X, Y and Z axes and a centre. The four triggerParticle fields are legacy: they apply only when particleEffect names no particle.
  • New event On Dungeon Mobs Cleared.
  • New Dungeon Restrictions entry, set with restrictions on a Dungeon Instance or a Dungeon Room: no elytra, boat or minecart, ender pearl, chorus fruit or riptide, blocked commands, a refusal message and a bypass permission.
  • Requires GUI (OmniGUI) 0.20. The new Dungeon Leaderboard Source uses the leaderboard source contract of GUI 0.20: with an older GUI the dungeon leaderboard does not load. Update GUI first.
  • API break for addons: DungeonArtifactData, DungeonStats and PlayerDungeonStats moved to the package btcrenaud.dungeons.core, and DungeonArtifactEntry.getPlayerStats and DungeonArtifactEntry.update changed signature. An addon compiled against Dungeon 1.1.x must be recompiled. Dungeons built in the web panel are not affected.
  • Statistics: 22 statistics per player (damage dealt and taken, mob kills, deaths, time played, rooms and waves cleared, records, solo and flawless completions...). They are counted during the run and paid out once per member, by artifact, with a total across artifacts. Damage is the damage that really took health, capped at the health of the target.
  • Dungeon Instance: statsMobScope chooses which mobs count in the statistics, MARKED_ONLY (default, the mobs made by the run) or ANY_MOB_IN_RUN_WORLD.
  • New fact Player Dungeon Statistic, and the placeholders dungeon_stat_<key> (with _raw for the bare number), dungeon_total_<key> and dungeon_inst_<id>_<key>. The snippets content.dungeon_stats.duration_format and content.dungeon_stats.missing_value word them.
  • New entry Dungeon Leaderboard Source, to plug into the source field of a GUI leaderboard (GUI 0.20): artifacts, scope (LIFETIME or CURRENT_RUN), rankBy, values, durationFormat, decimals, missingValue and unknownName. Row tokens: {value_<key>}, {value_<key>_raw} and {score_raw}.
  • Dungeon Instance: reconnectGrace (2 minutes by default). A member who disconnects keeps their place for that delay and, back in time, resumes with their sidebar, hidden slots and game mode. Afterwards they leave the run and return to their entry point when they reconnect. See Disconnections.
  • Dungeon Restrictions: gameMode (optional, for example ADVENTURE; the player's own mode comes back on exit; CREATIVE and SPECTATOR switch the combat statistics off), limitInteractions with allowedInteractions (CHEST, TRAPPED_CHEST and BARREL by default) and protectedEntities (item frames, armor stands, paintings), and messageRepeatDelay (2 seconds). limitInteractions also refuses placing blocks, buckets, vehicles, spawn eggs, fire, bone meal and tools used on blocks.
  • Dungeon Restrictions: riptide and chorus fruit are now refused at the click, not only their effect. Only the bypass permission exempts a player: an operator has it unless the node is explicitly set to false.
  • Dungeon Category: the slot fields unlockedLore and lockedLore are now unlockLore and lockLore. Pages saved with the old names still read; if both are present, the new one wins.
  • MMOProfiles: once the player has chosen a profile, the return to the entry point and the original game mode are applied again.
  • Fixes: runs_left no longer counts a death that takes the player out of the run (it stays in deaths); waves_cleared counts only the groups that define waves; %typewriter_dungeon_stat_current_health% shows the live health during a run; the statistics writer no longer stops saving after an error; a run closed at a reload because none of its members is online counts the time played for its absent members.
  • Nothing changes for an existing dungeon until it uses one of these fields. For a chest that appears when every mob is defeated, see Entities in dungeons.

1.1.1​

  • Paper 26.x: a WORLD_PER_RUN run could fail with The server did not create world 'dungeon_classic_...'. The copy of the template kept the template's world ID (data/paper/metadata.dat), so the server refused it as a duplicate. The copy now gets its own ID.

1.1​

  • Public release of the rework below. Fix since the 1.0 build: WORLD_PER_RUN now copies a template world stored the Paper 26.x way (dimensions/minecraft/<name>).

1.0​

This is a rework of the extension, built around a run model. See the migration note before updating a server that used 0.10.

Runs and worlds​

  • A run now has its own state machine, registry and journal. Starting a run is all-or-nothing: if a step fails, nothing is kept and the entry cost is refunded.
  • Three isolation modes, set per dungeon with isolation: SLIME_CLONE, WORLD_PER_RUN, SHARED_WORLD_SLOTS, and AUTO (default). A mode that cannot run refuses the run. See Runs and world isolation.
  • Worlds stored the Paper 26.x way (dimensions/minecraft/<name>) are found for SHARED_WORLD_SLOTS and copied for WORLD_PER_RUN; a world setup problem is logged on one line instead of a full stack trace.
  • A typewriter reload or a Publish adopts the running runs again. A server restart ends them cleanly.
  • cooldownSeconds is a real time limit: 0 or empty means no limit.
  • Orphaned run worlds are purged at start-up with guards (name, marker file, never a loaded world).
  • Statistics are written: attempts, completions and best time, per dungeon and per player.
  • damageMultiplier and the dungeon criteria are applied.

Generated dungeons​

Rooms, events and facts​

  • Menus refresh live (autoRefreshTicks) and when any lobby changes.
  • The waiting scoreboard works. DUNGEON_LOBBY_SLOT markers place lobbies. The slot criteria are evaluated for each player.
  • A party menu can name its dungeon (dungeonInstance); an empty one serves every dungeon no other menu names.
  • Parties of MMOCore, Parties and the Typewriter party extension are read only.

Chests​

  • One roll per player and chest, visibility (AUTO, PER_PLAYER, SHARED), onDisappear, lootSelection and weightedPicks, chest animation, facing from the yaw, CraftEngine and Nexo blocks, chests restored after a reload.

Entities in dungeons​

Player texts and new fields​

  • The texts of the menus, lobbies, run sidebar, loot chests and launch refusals are snippets (content.dungeon_menu., content.dungeon_lobby., content.dungeon_run.sidebar., content.dungeon_chest., content.dungeon_launch.). Defaults are unchanged. The replies of the /typewriter dungeon ... commands are snippets too (content.dungeon_command.).
  • New field lobbyIdleKickSeconds on the Dungeon Instance (default 120).
  • New fields on Loot Chest Trigger: triggerSoundVolume, triggerSoundPitch, triggerParticleCount, triggerParticleSpread, triggerParticleSpeed. broadcastMessage accepts colour codes.

Commands​

  • Removed the start sub-command, which never worked. Commands are documented in the index.

Known limits​

  • Paper only. Folia is not supported right now.
  • Generated dungeons use WORLD_PER_RUN only.

0.10​

The standalone build. Room triggers, the two "in dungeon" facts, the NPC instance and the statistics were declared but not active.