Compatibility
Minecraft: Java Edition
26.3
26.2
26.1.x
1.21.x
1.20.x
1.19.x
1.18.x
1.17.x
1.16.x
Platforms
Links
Creators
Details
Licensed MIT
Published last month
Updated yesterday

Dungeons from your own schematics placed right in your world. Players track them with a compass and break into loot vaults with a key, a pickaxe or a timer.
Paper 1.21.4+ Folia Java 21
How it works
- Put a schematic into the
schemfolder and run/rs spawn. - The plugin finds a flat spot in a matching biome, saves the terrain and pastes the dungeon inside a WorldGuard region.
- A player finds the dungeon with the compass and opens the shulker boxes with a key, the breaker pickaxe or a timer.
- Once the dungeon is cleared, it disappears, the terrain comes back and a new dungeon spawns in the world.
Each dungeon type is a separate file in the structures folder, so you set the schematic, biomes, placement and opening method for every type.
Features
- Dungeons on land, on water at least 3 blocks deep and in the air 30 to 60 blocks above the ground.
- Your own
.schemfiles from the WorldEdit and FastAsyncWorldEdit folders. - Biome filter: a single biome, a mask like
"*ocean*"or every biome of a datapack with"terralith:*". - Type weight: a dungeon with weight 10 spawns twice as often as one with weight 5.
- 3 ways to open a vault: a key, 12 hits with the breaker pickaxe or a 60 second countdown.
- Keys drop from 20 vanilla loot sources, from villages to the sniffer. You set the chance for each in the menu.
- The compass shows dungeon coordinates with the last 2 digits hidden. It works once every 8 hours.
- Loot for shulker boxes and barrels is set in the menu: drop an item in and set its chance from 1 to 100%.
- A WorldGuard region around each dungeon: 17 flags, 3 block padding, at least 100 blocks between dungeons.
- The plugin saves the terrain before pasting, and
/rs undorestores it block by block. - Auto removal after clearing, a countdown in the action bar and a new spawn 1 second later.
- Holograms above vaults with FancyHolograms or DecentHolograms: locked, opened, timer.
- Default texts are in Russian. Every text is editable in
messages.ymlanditems.yml. - MiniMessage, SQLite or MySQL, Folia support.
Vaults
Each dungeon type opens its own way. You set it with open-type in the dungeon file.
| Method | What the player does | Default |
|---|---|---|
key |
Opens a shulker box with a key from vanilla structure loot | The key survives with a 50% chance |
pickaxe |
Hits the shulker box until it opens | 12 hits, pickaxe durability 64 |
timer |
Clicks the shulker box and waits for the countdown | 60 seconds |
Requirements
| Server | Java | Required plugins | Optional plugins |
|---|---|---|---|
| Paper 1.21.4+ or Folia | 21 | WorldEdit or FastAsyncWorldEdit, WorldGuard | FancyHolograms or DecentHolograms |
Commands and permissions
| Command | What it does |
|---|---|
/rs help |
Shows the command list |
/rs menu |
Opens the menu: loot, key chance, dungeons, types |
/rs spawn [amount] [world] |
Spawns 1 to 20 dungeons |
/rs spawn cancel |
Cancels a running spawn |
/rs undo [id] |
Removes a dungeon and restores the terrain |
/rs give <key|compass|pickaxe> [player] [amount] |
Gives a key, a compass or a pickaxe |
/rs admin <test|remove|loot> |
Adds, removes or fills the shulker box you look at |
/rs reload |
Reloads the configs |
Alias: /rstructures. Every command requires rstructures.admin. Players need no permissions: they find dungeons and open vaults without commands.
config.yml
debug: false # detailed console messages for troubleshooting
command:
main: rstructures # main command name
aliases: [ rs ] # extra command names
# Folders where the plugin looks for schematics, besides plugins/rStructures/schem
schematic-folders:
- "WorldEdit/schematics"
- "FastAsyncWorldEdit/schematics"
containers: # default vault blocks for dungeon files
- SHULKER_BOX
# Holograms above vaults. Needs FancyHolograms or DecentHolograms
holograms:
enabled: true
height: 1.6 # height above the block
view-distance: 32 # view distance, in blocks
closed: # vault is locked
- "<red><b>!"
opened: # vault is open
- "<green><b>✔"
timer: # countdown is running. {time}: time left
- "<yellow><b>{time}"
scale: 1.3 # text size
billboard: center # how the text turns to the player
background: none # text background
text-shadow: true # text shadow
see-through: false # visible through blocks
# Sounds. An empty key turns a sound off
sounds:
shulker-open: # vault opened
key: "minecraft:block.iron_door.open" # sound ID
volume: 1.0 # from 0.0 to 1.0
pitch: 1.0 # from 0.5 to 2.0
shulker-closed: # click on a locked vault
key: "minecraft:block.chest.locked"
volume: 1.0
pitch: 1.0
key-saved: # the key did not break
key: "minecraft:entity.experience_orb.pickup"
volume: 1.0
pitch: 1.2
compass: # the compass found a dungeon
key: "minecraft:item.lodestone_compass.lock"
volume: 1.0
pitch: 1.0
menu-click: # click in the menu
key: "minecraft:ui.button.click"
volume: 0.5
pitch: 1.0
# Particles at the vault
particles:
shulker-open:
type: HAPPY_VILLAGER # particle type
count: 30 # amount
spread: 0.5 # spread, in blocks
speed: 0.05 # speed
shulker-closed:
type: SMOKE
count: 15
spread: 0.3
speed: 0.02
config-version: 1 # internal field, leave it as is
structures/<type>.yml
Each file in the structures folder is a separate dungeon type. The file name is the type ID. The plugin ships with ground.yml, water.yml and air.yml.
name: "<white>Наземный данж" # name in the menu and in the spawn message
schematic:
file: ground1.schem # schematic from plugins/rStructures/schem or schematic-folders
ignore-air: true # true: air from the schematic does not replace world blocks
offset: # schematic offset from the found spot, in blocks
x: 0
y: 1
z: 0
# What to clear before pasting. Players, pets and named entities stay untouched
clear:
items: true # dropped items
monsters: true # hostile mobs
animals: true # animals
vehicles: false # boats and minecarts
vegetation: true # grass, flowers, leaves
liquids: false # water and lava
snow: true # snow layers
spawn:
world: world # spawn world
placement: ground # ground: on land, water: on water at least 3 blocks deep, air: in the air
# plains: one biome. "*ocean*": every biome with ocean in its name. "*": every biome
biomes: [plains, sunflower_plains, meadow, snowy_plains]
weight: 10 # weight when picking a type
limit: -1 # dungeons of this type at once, -1 for no limit
flatness: 3 # allowed height difference under the dungeon
height: 0 # height offset from the surface
# Only for placement: air
# air:
# min: 30 # height above the surface, random from min to max
# max: 60
functions:
open-type: key # key, pickaxe or timer
open-time: 60s # countdown length for timer: 30s, 5m, 1h
pickaxe-hits: 12 # pickaxe hits for pickaxe
key-save-chance: 50 # chance from 0 to 100 that the key survives
containers: [SHULKER_BOX] # schematic blocks that become locked vaults
loot-containers: [BARREL] # blocks filled with loot without a lock
auto:
enabled: true # remove the dungeon after clearing
time: 10s # removal delay after clearing
lifetime: 0 # remove this long after spawning in any case, 0 for no limit
require: # what counts as cleared
opened: true # every vault is open
looted: true # every vault is empty
actionbar: true # removal countdown for players inside the dungeon
respawn:
enabled: true # spawn a new dungeon in the same world after removal
time: 1s # delay before the new spawn
need-players: false # true: spawn only if the world has players
world.yml
# Where the plugin looks for a dungeon spot
spawn:
min-x: -5000 # search area borders
max-x: 5000
min-z: -5000
max-z: 5000
flatness: 3 # default height difference for dungeon files
attempts: 36 # random points to check
radius: 32 # search radius around a point
step: 4 # check step, in blocks
chunks-per-tick: 12 # chunks checked per tick
generate-chunks: true # true: generate chunks that do not exist yet
urgent-chunks: false # true: load chunks with high priority
build:
layers-per-tick: 8 # schematic layers pasted per tick
config-version: 1 # internal field, leave it as is
region.yml
region:
padding: 3 # region padding around the schematic, in blocks
name: "struct_{id}" # WorldGuard region name. {id}: dungeon number
flags: # region flags: allow or deny
use: allow
block-break: deny
build: deny
mob-spawning: deny
pvp: allow
tnt: deny
chest-access: allow
creeper-explosion: deny
damage-animals: deny
ghast-fireball: deny
respawn-anchors: deny
destroy-vehicle: deny
enderdragon-block-damage: deny
mob-damage: deny
lava-fire: deny
lightning: deny
lighter: deny
limits:
distance: 100 # minimum blocks between dungeons
max: -1 # dungeons per world at once, -1 for no limit
avoid-regions: true # true: never place a dungeon over other regions
config-version: 1 # internal field, leave it as is
items.yml
# Key for a locked vault.
key:
material: TRIPWIRE_HOOK # item
texture: "" # base64 texture for PLAYER_HEAD
name: "<white>Ключ от данжа" # name, MiniMessage format
lore:
- ""
- " <#FEF06A>Ключ <white>открывает закрытый"
- " <white>шалкер в данже."
- ""
model-data: 0 # CustomModelData for a resource pack
glint: true # enchantment glint
flags: [] # item flags: HIDE_ATTRIBUTES and others
functions:
glow: true # glowing outline when dropped
drop-on-quit: false # true: the item drops when the player leaves the server
deny-craft: true # the item cannot be used in crafting
save-chance: 50 # chance that the key survives
# Compass that points to a dungeon. {cooldown} in lore shows the time left.
compass:
material: COMPASS
texture: ""
name: "<white>Компас данжей"
lore: []
model-data: 0
glint: false
flags: []
functions:
glow: true
drop-on-quit: false
deny-craft: true
encrypt: true # hide the last digits of the coordinates
encrypt-digits: 2 # how many digits to hide
pointer: false # true: the compass needle points to the dungeon
cooldown: 8h # delay between uses
consume: false # true: the compass disappears after use
target: random # random: a random dungeon, nearest: the closest one
# Breaker pickaxe.
pickaxe:
material: NETHERITE_PICKAXE
texture: ""
name: "<white>Кирка взломщика"
lore: []
model-data: 0
glint: false
flags: []
functions:
glow: true
drop-on-quit: false
deny-craft: true
hits: 12 # hits per vault
durability: 64 # pickaxe durability
config-version: 1 # internal field, leave it as is
database.yml
storage: sqlite # where dungeons, loot and saved terrain are stored: sqlite or mysql
# Read only with storage: mysql
mysql:
host: localhost # database server address
port: 3306 # port
database: rstructures # database name
user: "root" # user
password: "" # password
config-version: 1 # internal field, leave it as is


