Lightweight Minecraft Paper plugin for dungeon progression using WorldGuard regions and MythicMobs.
- WorldGuard Integration — Dungeon rooms = existing WorldGuard regions (direct compile-time API)
- MythicMobs Support — Kill requirements via MythicMobs API (direct compile-time API)
- Linear Progression — Complete room requirements before advancing
- Per-Player Progress — Individual tracking, no interference
- In-Game Setup — Register rooms with
/dg add <region> <kills> - Room Denial System — Title messages, sounds, chat messages when denied
- SQLite Progress Persistence — Survives server restarts/reloads (stored in
plugins/DungeonGates/progress.db) - Progress Reset — Clears on death, logout, teleport, world exit
- Knockback Denial — Players knocked back into previous room instead of teleported
- Entrance & Exit Control — Second+ rooms require previous completion on entry AND exit
- Admin Bypass —
dungeongates.bypasspermission skips all checks - Debug Mode —
/dg debugfor troubleshooting - Configurable Denial — Title, subtitle, sound, knockback strength
- Sound & Title Notifications — Clear feedback when denied entry
| Dependency | Minimum Version | Type |
|---|---|---|
| Paper | 1.21.1+ | Required |
| Java | 21 | Required |
| WorldGuard | 7.0+ | Required |
| MythicMobs | 5.6+ | Required |
- Download
DungeonGates-1.0.0.jarfrom Releases - Place in
plugins/folder - Ensure WorldGuard and MythicMobs are installed
- Start server → generates
plugins/DungeonGates/config.ymlandplugins/DungeonGates/progress.db
/rg define room1
/rg define room2
/rg define room3
/dg add room1 10
/dg add room2 15
/dg add room3 20
Syntax: /dg add <worldguard-region> <required-kills>
/mm mob spawn DUNGEON_ZOMBIE 5 <x> <y> <z>
Players kill required MythicMobs in each room to unlock the next.
| Command | Permission | Description |
|---|---|---|
/dg add <world> <region> <kills> |
dungeongates.admin |
Register a dungeon room (with world) |
/dg add <region> <kills> |
dungeongates.admin |
Register in 'world' (legacy) |
/dg remove <world> <region> |
dungeongates.admin |
Remove a room |
/dg remove <region> |
dungeongates.admin |
Remove from 'world' (legacy) |
/dg list [world] |
dungeongates.admin |
List rooms (all or specific world) |
/dg status [player] |
dungeongates.status / .others |
Check progress |
/dg reset <player> [world] [region] |
dungeongates.reset |
Reset progress |
/dg reload |
dungeongates.admin |
Reload config |
| `/dg debug [on | off]` | dungeongates.admin |
/dg info |
dungeongates.admin |
Show plugin info (version, author, repo) |
- Register rooms with
/dg add <region> <kills>(order = registration order) - Players kill MythicMobs in the WorldGuard region
- On region entry, plugin checks if previous room is complete
- On region exit, plugin checks if current room is complete
- If not complete → deny entry/exit:
- Title & Subtitle — "ROOM LOCKED! Kill X more MythicMobs to proceed."
- Sound — Configurable (default: VILLAGER_NO)
- Chat Message — "You need X more MythicMob kills to enter region!"
- Knockback — Pushes player back into the previous room
- If complete → Allow entry/exit, update last valid location
- First room — Always accessible (entry and exit)
- Next room in sequence — Requires previous room completion (entry AND exit)
- Previously completed rooms — Always accessible (free return)
- Non-sequential rooms — Blocked unless already completed
Progress is fully cleared when:
- Player dies in dungeon
- Player logs out
- Player teleports out of dungeon
- Player exits the dungeon world (via portal, world change)
After reset, player must re-complete all rooms.
plugins/DungeonGates/config.yml
denial:
action: CANCEL # CANCEL, VELOCITY, TELEPORT, KNOCKBACK (KNOCKBACK recommended)
velocity:
horizontal: 1.5
vertical: 0.4
title: "&c&lROOM LOCKED!"
subtitle: "&7Kill &e{remaining} &7more MythicMobs to proceed."
sound: "ENTITY_VILLAGER_NO"
sound-volume: 1.0
sound-pitch: 1.0
messages:
prefix: "&8[&6Dungeon Gates&8] "
requirement-not-met: "&cYou need {remaining} more MythicMob kills to enter {region}!"
progress: "&eProgress: {current}/{required} MythicMobs killed"
completed: "&aRoom &e{region} &acompleted! You may now proceed."
progress-reset-death: "&cYou died! Your dungeon progress has been reset."
progress-reset-logout: "&cYour dungeon progress has been reset (logout)."
progress-reset-teleport: "&cYour dungeon progress has been reset (teleport)."
progress-reset-world-exit: "&cYour dungeon progress has been reset (left world)."
rooms:
# region: kills (order = registration order)
# room1: 10
# room2: 15| Permission | Default | Description |
|---|---|---|
dungeongates.admin |
OP | All admin commands |
dungeongates.status |
TRUE | Check own progress |
dungeongates.status.others |
OP | Check others' progress |
dungeongates.reset |
OP | Reset progress |
dungeongates.bypass |
OP | Bypass all region checks (admin) |
Progress is stored in plugins/DungeonGates/progress.db (SQLite database):
- Survives restarts/reloads — No progress lost on server restart
- WAL mode — High concurrency, minimal locking
- Auto-saves — On kill, quit, admin commands, shutdown
- In-memory cache — Fast access for frequent operations
Schema:
CREATE TABLE dungeon_progress (
uuid TEXT NOT NULL,
room_key TEXT NOT NULL, -- "world:region"
kills INTEGER DEFAULT 0,
completed INTEGER DEFAULT 0,
last_updated INTEGER DEFAULT 0,
PRIMARY KEY (uuid, room_key)
);git clone https://github.com/evnrca/DungeonGates.git
cd DungeonGates
./gradlew shadowJar
# Output: build/libs/DungeonGates-1.0.0.jarRequires JDK 21. Dependencies: paper-api (compileOnly), worldguard-bukkit, worldedit-bukkit, Mythic-Dist (all compileOnly — not shaded), sqlite-jdbc (shaded into JAR).
MIT License
- PaperMC — Server API
- WorldGuard — Region protection
- MythicMobs — Custom mobs
- SQLite JDBC — Embedded database