-
Notifications
You must be signed in to change notification settings - Fork 18
§4. Server admins
Arno Dölinger edited this page Aug 10, 2026
·
7 revisions
If you're a server owner and want to configure the plugin, this section walks through every option in config.toml, section by section. Permission nodes are covered in 4.2.
[language]
# The plugin's default language.
# Available language files live in the DreamDisplays/lang/ directory.
default_language = "en"[proxy]
# Set this up if you run a BungeeCord / Velocity network and want
# fullscreen broadcasts (server <name> flag) or cross-server
# clock sync to work.
enabled = false
clock_sync_interval = 5 # Seconds between clock-offset checks against the proxy[display]
# It's recommended to keep these at their defaults unless you have a reason to change them.
selection_material = "minecraft:diamond_axe" # Item used to select the area for a new display
base_material = "minecraft:black_concrete" # Block used as the display surface
# Display size limits, measured in blocks.
# Render distance beyond 96 blocks is not recommended — you may see visual artifacts.
max_render_distance = 96.0
min_width = 1
min_height = 1
max_width = 32
max_height = 24
# Particle effects shown while selecting an area (not supported on Folia).
particles = true
particles_color = "#00FFFF"
# Ask players without the mod installed to install it.
mod_detection_enabled = true
# Notify admins in-game about plugin updates.
updates = true
# Default volume (%) for players who haven't changed it yet.
default_volume = 50
# Cap how many displays a single player can own. 0 = unlimited.
# Players with the create.bypass permission ignore this limit.
max_displays_per_player = 0[custom_media]
# Governs direct / non-platform video links (anything that isn't YouTube,
# Twitch, Vimeo, or Kick — those are always allowed and ignore this section).
enabled = true
allowed_hosts = [] # Empty = every host allowed; subdomains of an allowed host are covered automatically
blocked_hosts = [] # Of course, checked before allowed_hosts[fullscreen]
# Defaults and limits for /display fullscreen.
default_mode = "STANDARD" # STANDARD or IMMERSIVE, used when "mode" isn't passed
allow_forced = true # Allow the "forced" flag (players can't close the broadcast)
quality_cap = 1080 # Max height, in pixels, for a fullscreen broadcast[reports]
# webhook_url — a Discord webhook URL for receiving player reports.
# cooldown — seconds a player must wait between reports.
webhook_url = "" # Empty = reporting is disabled
cooldown = 30[storage]
type = "SQLITE" # SQLITE or MYSQL
host = "localhost"
port = "3306"
database = "database"
username = "username"
password = "password"
table_prefix = "" # Optional
use_ssl = falseRun /display reload to pick up changes without restarting the server, or just restart it. See Troubleshooting if a reload doesn't seem to take effect.
[permissions]
create = "dreamdisplays.create" # Create a display. Default: everyone
video = "dreamdisplays.video" # Set a video with /display video. Default: everyone
info = "dreamdisplays.info" # /display info. Default: everyone
help = "dreamdisplays.help" # /display help. Default: everyone
local = "dreamdisplays.local" # Use Local sync mode. Default: everyone
synced = "dreamdisplays.synced" # Use Synced mode. Default: everyone
broadcast = "dreamdisplays.broadcast" # Use Broadcast mode. Default: op
watchparty = "dreamdisplays.watchparty" # Start a watch party. Default: everyone
custom = "dreamdisplays.custom" # Use direct/custom video links. Default: everyone
lock = "dreamdisplays.lock" # Lock a display. Default: owner
delete = "dreamdisplays.delete" # Delete your own display. Default: everyone
name = "dreamdisplays.name" # Name a display. Default: everyone
schedule = "dreamdisplays.schedule" # Schedule a display. Default: everyone
name_others = "dreamdisplays.name.others" # Name anyone's display. Default: op
schedule_others = "dreamdisplays.schedule.others" # Schedule anyone's display. Default: op
delete_others = "dreamdisplays.delete.others" # Delete anyone's display. Default: op
list = "dreamdisplays.list" # /display list. Default: op
stats = "dreamdisplays.stats" # /display stats. Default: op
premium = "dreamdisplays.premium" # Place displays at 1080p+ resolutions. Default: op
reload = "dreamdisplays.reload" # Reload the plugin. Default: op
updates = "dreamdisplays.updates" # Receive plugin update notices (not mod updates). Default: op
toggle_others = "dreamdisplays.toggle.others" # /display on|off <player>. Default: op
create_bypass = "dreamdisplays.create.bypass" # Ignore max_displays_per_player. Default: op
fullscreen_start = "dreamdisplays.fullscreen.start" # /display fullscreen start. Default: op
fullscreen_stop = "dreamdisplays.fullscreen.stop" # /display fullscreen stop. Default: op
fullscreen_list = "dreamdisplays.fullscreen.list" # /display fullscreen list. Default: op
fullscreen_network = "dreamdisplays.fullscreen.network" # The server flag (network-wide). Default: op
remote = "dreamdisplays.remote" # Target a far display by id instead of "this" (looked-at). Default: opWhy would I need this? Short answer: you don't — unless you run several servers behind Velocity / BungeeCord and want Dream Displays to treat them as one network.
Without it, every backend is an "island". Displays, broadcasts and clocks are per-server, which is perfectly fine — everything else in this wiki works without a proxy. The proxy only adds the network-wide half:
| Without the proxy | With the proxy | |
|---|---|---|
/display fullscreen ... server <name|global> |
Refused; only for one server | Reaches players on the other backends |
| Starting a network broadcast | — | All backends start from one shared timeline anchor, so a slower server doesn't begin visibly behind |
| Clocks | Each backend trusts its own | Backends measure their offset against the proxy, so synced playback lines up network-wide |
| Naming a display in a broadcast | Only displays on the server you're standing on | The proxy asks every backend, so you can broadcast a display that lives on another server |
| A player switching servers mid-broadcast | The broadcast is gone | The new backend replays the sessions that still apply — and remembers which ones the player had minimized |