Skip to main content

Dreamvisitor

Dreamvisitor, created by Bog specifically for Wings of Fire: The New World, has a variety of features. It serves as an all-in-one utility plugin and Discord bot.

Commands

Command Description

/aradio <message>...

🛡️ 📗 Send a message to all operators.

/discord

📗 Toggle whether messages from the Discord chat bridge appear in your chat. This can also be adjusted with /dvset.

/dreamvisitor manage <key> [value]

🛡️ 📕 View or modify the Dreamvisitor configuration.

/dvset

📗 Manage your Dreamvisitor settings.

/hub [entities]

🛡️ 📗 Teleport yourself entities to the hub location. If you have an entity on a lead, the entity will teleport with you below the normal hub location.

/invswap

🛡️ 📗 Swap between two different inventories.

/itembanlist

🛡️ 📒 Open the item ban list inventory GUI.

/moonglobe remove <players>

🛡️ 📗 Remove moon globes from players.

/moonglobe create <players> <location> <max_distance>

🛡️ 📗 Give players moon globes.

/panic

🛡️ 📕 Kick all players and sets the player limit override to 0.

/parcel cancel

🛡️ 📗 Cancel your current parcel delivery.

/parcel locations add <position> <name> <weight> <home_tribe>

🛡️ 📗 Add a delivery location. name cannot contain spaces, but underscores will be replaced with spaces when displayed to players. weight determines the likelihood of the location being chosen. At 0, it will never be chosen. At 4, it is quite likely to be chosen. home_tribe determines only which names will appear on parcels to or from this location.

/parcel locations remove <name>

🛡️ 📒 Remove a delivery location.

/parcel locations list

🛡️ 📗 List all mail delivery locations.

/parcel delivery terminal <players>

🛡️ 📗 Give a player a parcel or allow players to deliver parcels to a location within 10 blocks.

/parcel delivery add <players> <start> <end>

🛡️ 📗 Create deliveries for players.

/parcel delivery remove <players>

🛡️ 📗 Cancel deliveries for players.

/parcel delivery list

🛡️ 📗 List ongoing deliveries.

/pausebypass add <players>

🛡️ 📗 Allow players to chat even when chat is paused.

/pausebypass remove <players>

🛡️ 📗 Disallow players to chat when chat is paused.

/pausebypass list

🛡️ 📗 List players allowed to chat even when chat is paused.

/pausechat

🛡️ 📕 Suppresses messages from players and the Discord chat bridge.

/playerlimit [new_limit]

🛡️ 📕 Override the server player limit.

/radio <message>...

🛡️ 📗 Send a message to all other players who can access the radio.

/sandbox <player> [on|off]

🛡️ 📒 Manage players' access to Sandbox Mode.

/setback <players> [location] [rotation] [world]

🛡️ 📗 Set a player's last EssentialsX location. If no world is specified, the current world is assumed. If no rotation is specified, none will be applied. If no location is specified, the execution position will be used.

/setmotd [new_motd]...

🛡️ 📗 Change or reset the server MOTD.

/softwhitelist add <player>

🛡️ 📗 Add a player to the soft whitelist.

/softwhitelist remove <player>

🛡️ 📗 Remove a player from the soft whitelist.

/softwhitelist list

🛡️ 📗 List all players on the soft whitelist.

/softwhitelist on

🛡️ 📗 Enable the soft whitelist.

/softwhitelist off

🛡️ 📗 Disable the soft whitelist.

/synctime [world]

🛡️ 📗 Sync time across all worlds.

/tagradio <tag> <message>

🛡️ 📗 Send a message to all players with a given tag.

/togglepvp

🛡️ 📗 Toggle whether PvP is enabled or disabled.

/tribeupdate <players>

🛡️ 📗 Update the permission groups of a player based on their tribe.

/velocity <entities> <vector> [replace]

🛡️ 📗 Apply velocity to entities.

/unwax

🛡️ 📗 Unwax the sign you are looking at.

/user <player>

🛡️ 📗 Get details of a player, online or offline.

/zoop

🛡️ 📗 Sends a fake leave message to Discord and hides you from the list command.

Auto-Whitelist

The whitelist functionality is built to handle whitelisting players completely automatically.

When a user on Discord sends a username in the whitelist channel, Dreamvisitor will first check to see whether the player is marked as banned. If so, they will not be allowed to add players to the whitelist. Dreamvisitor will then check if the username is legal. Minecraft usernames are alphanumeric (including underscores). If the message is not alphanumeric, Dreamvisitor will take no action. This also occurs if the Mojang API cannot find the provided username.

If the username is valid, Dreamvisitor will first fetch the UUID of the username and add it to accountLink.txt, which tracks which Minecraft UUIDs are connected to which Discord Snowflake IDs. A new entry will be recorded every time, unless the UUID has already been registered. This means that a Discord account can be linked to multiple Minecraft accounts, but not the other way around.

Dreamvisitor will then check whether the account is already whitelisted. If they are not, they are added to the whitelist. Either way, the user will be directed to check the FAQ for the IP.

For both Discord whitelisting and web whitelisting, any new user added to the whitelist will be recorded in the guild's system logs channel.

Item Banlist

/itembanlist will open a chest-like inventory. Items placed in this container will be saved in their place and players with matching items will have them automatically removed from non-operator player inventories. This removal is permanent. Be cautious of items you add. Items are only removed if the data is an exact match. If you put a potato into the blacklist GUI, potatoes that have been renamed or enchanted will not be removed.

A demonstration of the item blacklist.

Soft Whitelist

The soft whitelist acts as a secondary whitelist that works much like Minecraft's built-in whitelist feature. This allows reducing the allowed players to a specified group while not modifying the main whitelist. Players with the dreamvisitor.nowhitelist permission will always bypass the soft whitelist. Operators will always bypass the soft whitelist.

The soft whitelist persists through restarts.

Sandbox Mode

Sandbox Mode is a feature that allows administrators to safely allow players to use Creative Mode. When a player is put into Sandbox Mode, their inventory is swapped, and they are put into Creative Mode with the following restrictions:

  • They cannot access containers.
  • They cannot drop items.
  • They cannot use spawn eggs.
  • They cannot teleport.

A player with the dreamvisitor.sandbox permission — usually an admin — must be online for Sandbox Mode to remain active. If all admins leave, all players in Sandbox Mode will have it removed, restoring their inventories. If players leave the game while in Sandbox Mode, they will remain in Sandbox Mode when they rejoin unless there are no admins. When a Sandboxed player joins, admins will be notified.

demo.GIF

Pause Chat

The /pausechat command will stop all incoming chat messages from being broadcasted. It will also block messages from /me and Discord pass-through. You can allow certain players to bypass this with /pausebypass. Players with the dreamvisitor.nopause permission will always bypass chat pause. Operators will always bypass chat pause.

Chat pause will persist through restarts.

Moon Globes

Moon Globes can be created with the moonglobe command.

A player may only have one moon globe at a time. Each moon globe has an origin and a maximum distance. By default, the maximum distance is 256 blocks. If a moon globe (not the player) moves beyond that distance, it will be removed. It will also be removed if the player moves to a different dimension. It will not be removed if the player disconnects, though it will disappear until the player reconnects. Moon globes are not saved, so they will be deleted upon a server shutdown.

Mail System

Players can earn money by delivering mail. Players may interact with a mail terminal to receive a parcel. They will be assigned a location to deliver it to, and they must interact with the terminal at that location without teleportation to get a reward based on the distance.

When a player interacts with a terminal (a command block with the command /parcel terminal @p), Dreamvisitor will choose a random end location with each location weighted by an inherent, preset weight, and the distance from the start location, weighing closer locations higher than further ones. The distance weight can be multiplied using the mailDeliveryLocationSelectionDistanceWeightMultiplier option in config.yml.

The player will be given an enchanted book that they must keep with them until they complete the delivery. The book will be addressed to a random name. There is a 45% chance that the name will be of the tribe associated with the start location, a 45% chance that the name will be of the tribe associated with the end location, and a 10% chance that the name will be of a random tribe. A random lore string will also be chosen from a preset pool. If the player does not have the parcel when they reach the destination location, they delivery will not be completed and they must re-obtain the parcel or cancel the delivery. If a player cancels their deliver while they still have the parcel, they will keep the parcel.

When a player completes a delivery, the parcel will be removed from them, and they will be given a reward based on the distance between the start and end location, multiplied by mailDistanceToRewardMultiplier in config.yml.

Command Scheduler

The Dreamvisitor Command Scheduler is a powerful system for automating server tasks at specific times or intervals. It supports running individual commands or sequences of commands with configurable delays between them.

Key Features

  • Multiple schedule types: Run commands at intervals, daily at specific times, or using cron patterns
  • Command sequences: Execute multiple commands in order from a single schedule
  • Configurable delays: Add pauses between commands in a sequence
  • User-friendly commands: Simple interface for managing schedules

Getting Started

Prerequisites

The command scheduler is included in the Dreamvisitor plugin. Make sure you have the appropriate permission:

dreamvisitor.schedule

Schedule Types

The scheduler supports three types of scheduling patterns:

Interval-based Schedules

Runs every X minutes.

Example:

/schedule interval backup 120 save-all

This runs the save-all command every 2 hours (120 minutes).

Daily Schedules

Runs once per day at a specific time.

Example:

/schedule daily restart 03:00:00 restart

This runs the restart command every day at 3:00 AM.

Cron-style Schedules

Uses cron patterns for more advanced scheduling.

Example:

/schedule cron resource-reset "0 0 * * 0" world reset resource

This reloads the resource world at midnight every Sunday.

Cron Pattern Format

The pattern follows the standard cron format: minute hour day-of-month month day-of-week

  • minute: 0-59
  • hour: 0-23
  • day-of-month: 1-31
  • month: 1-12
  • day-of-week: 0-6 (Sunday to Saturday)
Special characters:
  • *: any value
  • ,: value list separator
  • -: range of values
  • /: step values
Examples:
  • 0 0 * * *: Every day at midnight
  • 0 */2 * * *: Every 2 hours
  • 0 0 * * 1-5: Every weekday at midnight
  • */10 * * * *: Every 10 minutes

Command Reference

Creating Schedules

  • Interval Schedules

    /schedule interval <name> <minutes> <command>
  • Daily Schedules

    /schedule daily <name> <time> <command>

    Time format must be HH:MM:SS (24-hour format)

  • Cron Schedules

    /schedule cron <name> <pattern> <command>

    Pattern must follow cron format (see above)

Managing Schedules

  • List All Schedules

    /schedule list

    Shows all schedules with their next run times

  • Remove a Schedule

    /schedule remove <name>

    Deletes a schedule completely

  • Run a Schedule Immediately

    /schedule run <name>

    Executes a schedule now

Managing Commands in a Schedule

  • Add a Command

    /schedule add-command <name> <command>

    Adds a new command to an existing schedule

  • Remove a Command

    /schedule remove-command <name> <index>

    Removes a command from a schedule by its index

Command indexes start at 1 (not 0).

Managing Delays

  • Add a Delay

    /schedule add-delay <name> <index> <seconds>

    Adds a delay before executing the specified command

  • Remove a Delay

    /schedule remove-delay <name> <index>

    Removes a delay from the specified command

Command Sequences

You can create sequences of commands that run in order by separating commands with semicolons (;).

Example:

/schedule daily server-restart 04:00:00 broadcast Server restart in 10 minutes!;broadcast Server restart in 1 minute!;broadcast Server restarting NOW!;restart

This will:

  • Broadcast "Server restart in 10 minutes!"
  • Broadcast "Server restart in 1 minute!"
  • Broadcast "Server restarting NOW!"
  • Restart the server

All at 4:00 AM each day.

You can also add commands to an existing schedule:

/schedule add-command server-restart broadcast The server is restarting for daily maintenance

Delays Between Commands

For more precise control, you can add delays between specific commands in a sequence:

/schedule add-delay server-restart 1 540
/schedule add-delay server-restart 2 50
/schedule add-delay server-restart 3 10

This would modify our example to:

  • Broadcast "Server restart in 10 minutes!"
  • Wait 540 seconds (9 minutes)
  • Broadcast "Server restart in 1 minute!"
  • Wait 50 seconds
  • Broadcast "Server restarting NOW!"
  • Wait 10 seconds
  • Restart the server

The delay is applied before the command at the specified index runs. Indexes start at 1 for the first command.

Common Use Cases

Resource World Reset

Reset resource worlds automatically every Sunday at midnight:

/schedule cron resource-reset "0 0 * * 0" broadcast Resource world will reset in 5 minutes!;world reset resource

Add a longer delay:

/schedule add-delay resource-reset 2 300

Daily Backups

Create a daily backup schedule:

/schedule daily backup 02:00:00 broadcast Starting daily backup...;save-all;backup start

Server Restart

Schedule a restart when the server is quiet:

/schedule daily restart 04:00:00 restart

Technical Reference

Storage Location

All schedules are saved in the schedules.yml file in the Dreamvisitor plugin folder.

Format of schedules.yml

The schedules.yml file uses a structured format to store all scheduled tasks. Here's the basic structure:

schedules:
  schedule-name:
    type: [interval|daily|cron]
    # For interval schedules:
    interval-minutes: 120
    # For daily schedules:
    time: "04:00:00" # HH:MM:SS
    # For cron schedules:
    pattern: "0 0 * * 0" # minute hour day month weekday
    commands:
      - "command1"
      - "command2"
    delays:
      2: 30 # 30 second delay before command at index 2
    last-run: 1234567890 # Unix timestamp

Each schedule must have:

  • A unique name identifier
  • A type (interval, daily, or cron)
  • Type-specific configuration (interval-minutes, time, or pattern)
  • A list of commands to execute
  • Optional delays between specific commands
  • A last-run timestamp to track when it last executed

The CommandScheduler loads this configuration at startup and whenever schedules are modified through commands.

Troubleshooting

Schedule Not Running

  • Check if the schedule has been created with /schedule list
  • Verify the server has permission to run the commands (check console for permission errors)
  • For daily schedules, ensure time format is correct (HH:MM:SS)
  • For cron schedules, validate the cron pattern is correct
  • Check the server log for any errors related to the CommandScheduler
  • Verify the system time on your server is accurate
  • Check that schedules.yml hasn't been manually edited with invalid syntax

Commands in Sequence Not Running

  • Check if there are syntax errors in any command
  • Ensure delays aren't too long
  • Verify command permissions
  • Look for error messages in the console when the schedule runs
  • Make sure commands that require a player don't use @p in a server context
  • For commands with selectors, ensure they have the appropriate permissions

Invalid Cron Pattern

Common cron pattern mistakes:

  • Not having exactly 5 parts
  • Using values outside the valid ranges (e.g., minutes > 59)
  • Incorrect format for ranges or steps
  • Missing required fields or using incorrect special characters

Use these valid pattern examples for reference:

  • 0 4 * * * - Every day at 4:00 AM
  • */15 * * * * - Every 15 minutes
  • 0 0 * * 0 - Every Sunday at midnight
  • 0 0,12 * * * - Every day at midnight and noon