Skip to content

§4. Server admins

Arno Dölinger edited this page Aug 10, 2026 · 7 revisions

4.1. Configuration

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.

4.1.1. Language

[language]
# The plugin's default language.
# Available language files live in the DreamDisplays/lang/ directory.
default_language = "en"

4.1.2. Proxy

[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

4.1.3. Display

[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

4.1.4. Custom media

[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

4.1.5. Fullscreen

[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

4.1.6. Reports

[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

4.1.7. Storage

[storage]
type = "SQLITE" # SQLITE or MYSQL
host = "localhost"
port = "3306"
database = "database"
username = "username"
password = "password"
table_prefix = "" # Optional
use_ssl = false

4.1.8. Applying changes

Run /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.

4.2. Permissions

[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: op

4.3. Proxy

Why 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

Clone this wiki locally