CmdCalendar šŸ“† - Automatic Command Scheduler [v1.1.2]

CmdCalendar - Developed by Simon_Flash ([email protected])
Current Version: 1.1.2
Status: Active -> new features and updates are in development

GitHub | Download | CmdCalendar Wiki | Support Discord


CmdCalendar allows administrators to create, edit, and run commands through Scheduler tasks and Interval tasks. Though simple in nature, the implementation of these features has the potential to be an incredibly powerful plugin used for a multitude of server functions. The possibilities are endless, so use your creativity to bring your server to the next level!

Here are just a couple of things server owners have done with CmdCalendar:

  • Create custom announcements
  • Automatically start drop parties
  • Clear entities to reduce lag
  • Build custom animations
  • And even more!

Features:

  • Run commands on specific intervals
  • Run commands based on a schedule pattern
  • Run commands when starting, reloading, or stopping
  • Completely editable through the config file
  • Task descriptions for stronger organization
  • Verification of values before being set to run
  • Instantly view all tasks or those of a specified status
  • Command blacklist to block dangerous commands
  • Ability to conceal tasks through the config
  • Various debug commands (just in case!)

CmdCalendar also has an updated reference wiki and a support Discord for those who need additional help, both linked above.


Using CmdCalendar is very straightforward, and most commands are fully documented in the plugin (use /CmdCal to pull up a list of commands. Hovering over a command argument will display information about the command, aliases, the permission node, and any notes). Furthermore, the documentation for CmdCalendar can be viewed in the README.md file on the GitHub, linked above.

Creating a CmdCalendar Task

This section is being migrated over to the CmdCalendar Wiki

Creating a task is rather straightforward, but it can take some time to get used to. Donā€™t forget about the documentation on our GitHub (linked above) and the in-game documentation (/CmdCal) if you experience issues with commands. If those donā€™t work, feel free to send me a message or join the support Discord above!

The first task weā€™re going to make is going to be an Interval task. Interval tasks run commands at specific intervals (hence the name) and are only concerned about the time between tasks rather than the time the task runs. To create the task, weā€™ll use the following command.

/CmdCal CreateTask Announcer Interval -> Creates the task Announcer of type Interval

With our task created, we need to add in a couple variable before we can actually activate it. To do this, weā€™re going to use EditTask to set the task interval, command, and (optionally) a description.

/CmdCal EditTask Announcer Interval 300 -> Sets the interval for Announcer (seconds, changable in Config)
/CmdCal EditTask Announcer Command /broadcast Download CmdCalendar! -> Sets the command for Announcer
/CmdCal EditTask Announcer Description -> Subtly advertises CmdCalendar

With that done, weā€™re ready to start the task.

/CmdCal StartTask Announcer -> Starts the Announcer task
/CmdCal ShowTask Announcer -> Displays information about the Announcer task

If youā€™re following along on your server, the last command will display a list of information about the Announcer task, but what weā€™re particularly looking for is the green ā€œActiveā€ status. By default, this task wonā€™t activate until that first delay length has passed, so weā€™ll have 300 seconds to make our next task.

Interval tasks are simple and donā€™t take up a lot of resources, but also donā€™t offer a lot of control over the task itself. Interval tasks will reset their countdown after a server restart, and thereā€™s no way to specify any additional rules. This, however, is where Scheduler tasks come in.

A Scheduler task runs when certain time-based requirements are met. For example, letā€™s say that we want our announcer task to broadcast at the start of the minute instead of a random time, but still has the 5-minute interval. Like before, we need to start by creating a Scheduler task, and weā€™ll add in the same command and description.

/CmdCal CreateTask Announcer2 Scheduler
/CmdCal EditTask SetCommand Announcer2
/CmdCal EditTask SetDescription Announcer2

With that done, we can create the schedule for the command itself, which uses the following format and base conditions.

ā€œ##ā€: Define a specific number as a condition -> ā€œ0 28 18 14 3ā€ encodes March 14 at 6:28:00
ā€œ*ā€: Include all posibilities, effectively ignoring the condition -> ā€œ0 28 18 * *ā€ Any day at 6:28:00

Lastly, CmdCalendar currently uses one modifier, the increment.

ā€œ/##ā€: Includes times that are whole-number multiples of ## -> ā€œ0 28 /12 * *ā€ Any day at 00:28:00 or 12:28:00

With this, we can now fully construct our scheduler. We arenā€™t concerned with the month, day, or time, so we can mark those arguments with ā€œ*ā€ to ignore them. Our task will run at the start of the minute, so second should be ā€œ0ā€ (00 is also acceptable). Lastly, we want the task to run every 5 minutes, which is defined using the interval modifier, ā€œ/5ā€. This leaves us with the following schedule that does exactly what we want it to do!

0 /5 * * *

Back to commands, letā€™s set this as Announcer2ā€™s schedule and see how it works.

/CmdCal EditTask Announcer2 Schedule 0 /5 * * *
/CmdCal StartTask Announcer2
/CmdCal ShowTask Announcer2

Congratulations! If youā€™re following along, youā€™ve successfully made your first CmdCalendar task! From here, itā€™s up to you how you use CmdCalendarā€™s tasks to add a whole new dynamic into the game. The power is in your hands now!


If you have a suggestion for CmdCalendar feel free to send me a message and Iā€™ll look into adding it for the next version of CmdCalendar. Of course, if you experience an error that you believe is caused by CmdCalendar please contact me so I can ensure everthing works as intended for other users!

If you need support for CmdCalendar or another one of my plugins, feel free to join my support Discord linked above for fast assistance. Additionally, members of the Discord will be notified early about new updates and plugins right when they come out!

4 Likes

@AnDwHaT5 Hi

You are a pretty cool guy Simon

1 Like

Can we get a list of permissions? Thanks!

@tantrex
Permissions for each command can be found by hovering over the command in the help menu (/CmdCal). I will add a list of permissions to the README.md shortly.

Itā€™s also worth noting that while each command has its own permissions (bar Debug) CmdCalendar is intended to be used only by server administrators, so take caution as to who you give permissions to - CmdCalendar does not check if a player has the permission to run a command as they are run through console!

1 Like

That is fine, I use LuckPerms which makes OP pretty much obsolete. So having permission nodes is a must for anything I setup.

@Simon_Flash
Hello, thanks for the plugin,
you mention people started dropparties with your plugin.

How would one start without proper coordinates to drop the items from?
Cannot seem to find out how one would start a dropparty without adding coordinates to allow the items to drop at specific places.

Thanks in advance.

@Pixelhouse
CmdCalendar is only a scheduler of commands, and in this case itā€™s simply running the command for a pre-configured drop party using a separate plugin. The person I got that from uses CmdCalendar to run the command for it at the top of every hour so there doesnā€™t have to be a player managing it.

After a vacation, some exploration with Forge, and the start of a new plugin, itā€™s time to return to CmdCalendar for a new update! Huge amounts of bugs have been squashed, a bunch of features added, and tons of code optimized to make everything run smoother (and, yknow, not crash everything). Additionally, Iā€™ve also spent a lot of time on creating a CmdCalendar Wiki to help with the documentation of the plugin as it continues to grow, so I encourage you to take a look at that if you need help!

Want update notifications, assistance, or just to chat? Join the CmdCalendar Support Discord

  • Optimized huge sections of code for better performance
  • Removed lesser-used aliases for ease of use
  • Collapsed Debug commands into a single command
  • Implemented Concealed Tasks (Config only)
  • Stronger verification for task values
  • Config now correctly generates and saves
  • Blacklist may now successfully be changed
  • Fixed various bugs and issues
  • And so, so much more!

Any issues should be reported with the version [1.1.0]

Excluding multiple commands (hint hint), this is the largest feature request Iā€™ve received for CmdCalendar since itā€™s release. With v1.1.1, you are now able to run commands when the server starts, restarts, or stops - itā€™s as easy as one line of JSON (well three actually, as there areā€¦ nevermind).

If youā€™ve used CmdCalendar in the past, youā€™ll have to manually add in the states config section, as shown below.

config {
    (config section)
}
states {
    # Command executed when the appropriate game state event is fired #
    reload="plainbroadcast A server reload has been called!"
    started_server="plainbroadcast The server has started!"
    stopping_server="plainbroadcast goodbye :'("
}
tasks {
    (tasks section)
}
  • Added scheduled commands for server start, reload, and stop
  • Added states config node to handle state commands
  • Updated Util for better organization
  • Moved starting tasks to onServerStarting
  • Removed various debug messages - no more blacklist spam!

Any issues should be reported with the version [1.1.1]

Good job, but I canā€™t stop my task when I use /cmdcal stoptask.

Error occurred while execiting command: No value present

At lastļ¼Œhow do I edit the task each weekend to startļ¼Ÿ

@le10077
Iā€™ve updated CmdCalendar to version 1.1.2 to address the StopTask issue and ensure it registers arguments correctly, so you should not experience that issue with the latest version.

CmdCalendar does not currently have a way to specifically target weekends, but there are some other ways you can accomplish this as well (such as an interval task set for 1 weekā€™s time). If this is something youā€™d be interested in, feel free to let me know and Iā€™ll see what I can do for a future update.

Hotfix Update: v1.1.2 fixes StopTask arguments.

Thankt youļ¼I think I need a delay after a command is run and then run the next commandļ¼ļ¼

Hey,
I wanted to say this plugin is one of my top three!
With this awesome plugin I can make world autosaves every ten minutes :smiley:! And many more things! Itā€™s so useful :slight_smile:
Thanks and keep up the great work!

Thanks! Youā€™ll be excited to hear about this, then: https://github.com/NucleusPowered/Magnetar

Wow!
You are just going overboard! Such hard work put into Sponge and plugins from you, itā€™s very credible!

One more question: So I have my server and I need it to back-up every 10 minutes and there is not really a plugin to do that.
So I thought maybe you can try to create it. What I planned that it could feature is:

  • A backup of the server every 10 minutes (configurable) that sends a message to all players that a backup was made (configurable message.)
  • A Backup folder where all backups would be present.

If there is already a similar plugin, please leave the link here :slight_smile:
Thatā€™s just a suggestion on another useful plugin that many people ask for.
Thank you!
~Differentiation

1 Like

Thanks, that means a lot to me!

As for server backups, the best place to put that would be in plugin requests. IO is one of the things I least understand (even next to reflection!), so I donā€™t think Iā€™d even be capable of it. You can probably find an existing plugin like that with search, but beyond I wouldnā€™t know.

Aww, thanks for the help.
I found a WIP backup plugin in the WIP Plugins section, so Iā€™m hoping for the best. :slight_smile:
Best regards.
~Differentiation

In the wiki ā€¦ ā€œFor more information on what denotes an acceptable schedule, see Scheduler Tasks.ā€

I canā€™t seem to find any section named that. I dunno, but that seems like the most important section.

how do I format tasks to occur in on a specific day, month, year, week, date, time, seconds, etc?


Okayā€¦ this plugin is quite difficult to figure out but I think I finally got it working. The last bit of weirdness is that it seems to load scheduled tasks in a random manner. I have no clue how it arrived at this order.

[05:58:40] [Server thread/INFO]: 80: AS02-021 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 81: AS02-020 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 82: AS08-012 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 83: AS14-003 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 84: AS14-002 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 85: AS08-013 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 86: AS14-005 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 87: AS14-004 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 88: AS14-007 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 89: AS14-006 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 90: AS08-000 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 91: AS08-001 [Scheduler] -> Active
[05:58:40] [Server thread/INFO]: 92: AS08-002 [Scheduler] -> Active

Auto Shutdown by Dale Mahalko / Plawerth
for this scheduler:

# CmdCalendar - Developed by Simon_Flash
config {
    # Active tasks are automatically activated when server starts #
    "activate_on_startup"=true
    # Command to be blacklisted (Currently supports only the base command) #
    "command_blacklist"=[
        cc,
        cmdcal,
        cmdcalendar
    ]
    # Use the command blacklist #
    "command_blacklist_check"=true
    # Interval tasks wait the delay length before first running #
    "interval_delay_start"=true
}
tasks {
AS02-000 {
    command="broadcast Restart schedule by Dale Mahalko / Plawerth."
    description="Autoshutdown alerter"
    schedule="58 44 02 * *"
    status=Active
    type=Scheduler
}
AS02-001 {
    command="say Server will restart in 15 minutes."
    description="Autoshutdown alerter"
    schedule="00 45 02 * *"
    status=Active
    type=Scheduler
}
AS02-002 {
    command="broadcast Server will restart in 10 minutes."
    description="Autoshutdown alerter"
    schedule="00 50 02 * *"
    status=Active
    type=Scheduler
}
AS02-003 {
    command="broadcast Server will restart in 5 minutes."
    description="Autoshutdown alerter"
    schedule="00 55 02 * *"
    status=Active
    type=Scheduler
}
AS02-004 {
    command="broadcast Server will restart in 4 minutes."
    description="Autoshutdown alerter"
    schedule="00 56 02 * *"
    status=Active
    type=Scheduler
}
AS02-005 {
    command="broadcast Server will restart in 3 minutes."
    description="Autoshutdown alerter"
    schedule="00 57 02 * *"
    status=Active
    type=Scheduler
}
AS02-006 {
    command="broadcast Server will restart in 2 minutes."
    description="Autoshutdown alerter"
    schedule="00 58 02 * *"
    status=Active
    type=Scheduler
}
AS02-007 {
    command="broadcast Server will restart in 1 minutes."
    description="Autoshutdown alerter"
    schedule="00 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-008 {
    command="broadcast Server will restart in 45 seconds."
    description="Autoshutdown alerter"
    schedule="15 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-009 {
    command="broadcast Server will restart in 30 seconds."
    description="Autoshutdown alerter"
    schedule="30 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-010 {
    command="say Server will restart in 15 seconds."
    description="Autoshutdown alerter"
    schedule="45 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-011 {
    command="broadcast Server will restart in 10 seconds."
    description="Autoshutdown alerter"
    schedule="50 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-012 {
    command="broadcast Server will restart in 9 seconds."
    description="Autoshutdown alerter"
    schedule="51 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-013 {
    command="broadcast Server will restart in 8 seconds."
    description="Autoshutdown alerter"
    schedule="52 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-014 {
    command="broadcast Server will restart in 7 seconds."
    description="Autoshutdown alerter"
    schedule="53 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-015 {
    command="broadcast Server will restart in 6 seconds."
    description="Autoshutdown alerter"
    schedule="54 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-016 {
    command="broadcast Server will restart in 5 seconds."
    description="Autoshutdown alerter"
    schedule="55 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-017 {
    command="broadcast Server will restart in 4 seconds."
    description="Autoshutdown alerter"
    schedule="56 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-018 {
    command="broadcast Server will restart in 3 seconds."
    description="Autoshutdown alerter"
    schedule="57 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-019 {
    command="broadcast Server will restart in 2 seconds."
    description="Autoshutdown alerter"
    schedule="58 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-020 {
    command="broadcast Server will restart in 1 second."
    description="Autoshutdown alerter"
    schedule="59 59 02 * *"
    status=Active
    type=Scheduler
}
AS02-021 {
    command="kickall Server rebooting!"
    description="Autoshutdown alerter"
    schedule="00 00 03 * *"
    status=Active
    type=Scheduler
}
AS02-022 {
    command="stop We will be right back."
    description="Autoshutdown alerter"
    schedule="05 00 03 * *"
    status=Active
    type=Scheduler
}
AS08-000 {
    command="broadcast Restart schedule by Dale Mahalko / Plawerth."
    description="Autoshutdown alerter"
    schedule="58 44 08 * *"
    status=Active
    type=Scheduler
}
AS08-001 {
    command="say Server will restart in 15 minutes."
    description="Autoshutdown alerter"
    schedule="00 45 08 * *"
    status=Active
    type=Scheduler
}
AS08-002 {
    command="broadcast Server will restart in 10 minutes."
    description="Autoshutdown alerter"
    schedule="00 50 08 * *"
    status=Active
    type=Scheduler
}
AS08-003 {
    command="broadcast Server will restart in 5 minutes."
    description="Autoshutdown alerter"
    schedule="00 55 08 * *"
    status=Active
    type=Scheduler
}
AS08-004 {
    command="broadcast Server will restart in 4 minutes."
    description="Autoshutdown alerter"
    schedule="00 56 08 * *"
    status=Active
    type=Scheduler
}
AS08-005 {
    command="broadcast Server will restart in 3 minutes."
    description="Autoshutdown alerter"
    schedule="00 57 08 * *"
    status=Active
    type=Scheduler
}
AS08-006 {
    command="broadcast Server will restart in 2 minutes."
    description="Autoshutdown alerter"
    schedule="00 58 08 * *"
    status=Active
    type=Scheduler
}
AS08-007 {
    command="broadcast Server will restart in 1 minutes."
    description="Autoshutdown alerter"
    schedule="00 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-008 {
    command="broadcast Server will restart in 45 seconds."
    description="Autoshutdown alerter"
    schedule="15 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-009 {
    command="broadcast Server will restart in 30 seconds."
    description="Autoshutdown alerter"
    schedule="30 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-010 {
    command="say Server will restart in 15 seconds."
    description="Autoshutdown alerter"
    schedule="45 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-011 {
    command="broadcast Server will restart in 10 seconds."
    description="Autoshutdown alerter"
    schedule="50 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-012 {
    command="broadcast Server will restart in 9 seconds."
    description="Autoshutdown alerter"
    schedule="51 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-013 {
    command="broadcast Server will restart in 8 seconds."
    description="Autoshutdown alerter"
    schedule="52 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-014 {
    command="broadcast Server will restart in 7 seconds."
    description="Autoshutdown alerter"
    schedule="53 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-015 {
    command="broadcast Server will restart in 6 seconds."
    description="Autoshutdown alerter"
    schedule="54 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-016 {
    command="broadcast Server will restart in 5 seconds."
    description="Autoshutdown alerter"
    schedule="55 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-017 {
    command="broadcast Server will restart in 4 seconds."
    description="Autoshutdown alerter"
    schedule="56 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-018 {
    command="broadcast Server will restart in 3 seconds."
    description="Autoshutdown alerter"
    schedule="57 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-019 {
    command="broadcast Server will restart in 2 seconds."
    description="Autoshutdown alerter"
    schedule="58 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-020 {
    command="broadcast Server will restart in 1 second."
    description="Autoshutdown alerter"
    schedule="59 59 08 * *"
    status=Active
    type=Scheduler
}
AS08-021 {
    command="kickall Server rebooting!"
    description="Autoshutdown alerter"
    schedule="00 00 09 * *"
    status=Active
    type=Scheduler
}
AS08-022 {
    command="stop We will be right back."
    description="Autoshutdown alerter"
    schedule="05 00 09 * *"
    status=Active
    type=Scheduler
}
AS14-000 {
    command="broadcast Restart schedule by Dale Mahalko / Plawerth."
    description="Autoshutdown alerter"
    schedule="58 44 14 * *"
    status=Active
    type=Scheduler
}
AS14-001 {
    command="say Server will restart in 15 minutes."
    description="Autoshutdown alerter"
    schedule="00 45 14 * *"
    status=Active
    type=Scheduler
}
AS14-002 {
    command="broadcast Server will restart in 10 minutes."
    description="Autoshutdown alerter"
    schedule="00 50 14 * *"
    status=Active
    type=Scheduler
}
AS14-003 {
    command="broadcast Server will restart in 5 minutes."
    description="Autoshutdown alerter"
    schedule="00 55 14 * *"
    status=Active
    type=Scheduler
}
AS14-004 {
    command="broadcast Server will restart in 4 minutes."
    description="Autoshutdown alerter"
    schedule="00 56 14 * *"
    status=Active
    type=Scheduler
}
AS14-005 {
    command="broadcast Server will restart in 3 minutes."
    description="Autoshutdown alerter"
    schedule="00 57 14 * *"
    status=Active
    type=Scheduler
}
AS14-006 {
    command="broadcast Server will restart in 2 minutes."
    description="Autoshutdown alerter"
    schedule="00 58 14 * *"
    status=Active
    type=Scheduler
}
AS14-007 {
    command="broadcast Server will restart in 1 minutes."
    description="Autoshutdown alerter"
    schedule="00 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-008 {
    command="broadcast Server will restart in 45 seconds."
    description="Autoshutdown alerter"
    schedule="15 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-009 {
    command="broadcast Server will restart in 30 seconds."
    description="Autoshutdown alerter"
    schedule="30 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-010 {
    command="say Server will restart in 15 seconds."
    description="Autoshutdown alerter"
    schedule="45 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-011 {
    command="broadcast Server will restart in 10 seconds."
    description="Autoshutdown alerter"
    schedule="50 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-012 {
    command="broadcast Server will restart in 9 seconds."
    description="Autoshutdown alerter"
    schedule="51 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-013 {
    command="broadcast Server will restart in 8 seconds."
    description="Autoshutdown alerter"
    schedule="52 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-014 {
    command="broadcast Server will restart in 7 seconds."
    description="Autoshutdown alerter"
    schedule="53 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-015 {
    command="broadcast Server will restart in 6 seconds."
    description="Autoshutdown alerter"
    schedule="54 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-016 {
    command="broadcast Server will restart in 5 seconds."
    description="Autoshutdown alerter"
    schedule="55 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-017 {
    command="broadcast Server will restart in 4 seconds."
    description="Autoshutdown alerter"
    schedule="56 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-018 {
    command="broadcast Server will restart in 3 seconds."
    description="Autoshutdown alerter"
    schedule="57 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-019 {
    command="broadcast Server will restart in 2 seconds."
    description="Autoshutdown alerter"
    schedule="58 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-020 {
    command="broadcast Server will restart in 1 second."
    description="Autoshutdown alerter"
    schedule="59 59 14 * *"
    status=Active
    type=Scheduler
}
AS14-021 {
    command="kickall Server rebooting!"
    description="Autoshutdown alerter"
    schedule="00 00 15 * *"
    status=Active
    type=Scheduler
}
AS14-022 {
    command="stop We will be right back."
    description="Autoshutdown alerter"
    schedule="05 00 15 * *"
    status=Active
    type=Scheduler
}
AS20-000 {
    command="broadcast Restart schedule by Dale Mahalko / Plawerth."
    description="Autoshutdown alerter"
    schedule="58 44 20 * *"
    status=Active
    type=Scheduler
}
AS20-001 {
    command="say Server will restart in 15 minutes."
    description="Autoshutdown alerter"
    schedule="00 45 20 * *"
    status=Active
    type=Scheduler
}
AS20-002 {
    command="broadcast Server will restart in 10 minutes."
    description="Autoshutdown alerter"
    schedule="00 50 20 * *"
    status=Active
    type=Scheduler
}
AS20-003 {
    command="broadcast Server will restart in 5 minutes."
    description="Autoshutdown alerter"
    schedule="00 55 20 * *"
    status=Active
    type=Scheduler
}
AS20-004 {
    command="broadcast Server will restart in 4 minutes."
    description="Autoshutdown alerter"
    schedule="00 56 20 * *"
    status=Active
    type=Scheduler
}
AS20-005 {
    command="broadcast Server will restart in 3 minutes."
    description="Autoshutdown alerter"
    schedule="00 57 20 * *"
    status=Active
    type=Scheduler
}
AS20-006 {
    command="broadcast Server will restart in 2 minutes."
    description="Autoshutdown alerter"
    schedule="00 58 20 * *"
    status=Active
    type=Scheduler
}
AS20-007 {
    command="broadcast Server will restart in 1 minutes."
    description="Autoshutdown alerter"
    schedule="00 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-008 {
    command="broadcast Server will restart in 45 seconds."
    description="Autoshutdown alerter"
    schedule="15 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-009 {
    command="broadcast Server will restart in 30 seconds."
    description="Autoshutdown alerter"
    schedule="30 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-010 {
    command="say Server will restart in 15 seconds."
    description="Autoshutdown alerter"
    schedule="45 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-011 {
    command="broadcast Server will restart in 10 seconds."
    description="Autoshutdown alerter"
    schedule="50 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-012 {
    command="broadcast Server will restart in 9 seconds."
    description="Autoshutdown alerter"
    schedule="51 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-013 {
    command="broadcast Server will restart in 8 seconds."
    description="Autoshutdown alerter"
    schedule="52 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-014 {
    command="broadcast Server will restart in 7 seconds."
    description="Autoshutdown alerter"
    schedule="53 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-015 {
    command="broadcast Server will restart in 6 seconds."
    description="Autoshutdown alerter"
    schedule="54 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-016 {
    command="broadcast Server will restart in 5 seconds."
    description="Autoshutdown alerter"
    schedule="55 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-017 {
    command="broadcast Server will restart in 4 seconds."
    description="Autoshutdown alerter"
    schedule="56 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-018 {
    command="broadcast Server will restart in 3 seconds."
    description="Autoshutdown alerter"
    schedule="57 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-019 {
    command="broadcast Server will restart in 2 seconds."
    description="Autoshutdown alerter"
    schedule="58 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-020 {
    command="broadcast Server will restart in 1 second."
    description="Autoshutdown alerter"
    schedule="59 59 20 * *"
    status=Active
    type=Scheduler
}
AS20-021 {
    command="kickall Server rebooting!"
    description="Autoshutdown alerter"
    schedule="00 00 21 * *"
    status=Active
    type=Scheduler
}
AS20-022 {
    command="stop We will be right back."
    description="Autoshutdown alerter"
    schedule="05 00 21 * *"
    status=Active
    type=Scheduler
}
}

The explanation is not on the wiki but is instead within the README. In relation to the printout order, all that is is the iteration of a HashMap which has no consistent order.

Additionally, note that very little in this plugin is optimised (especially for 90-something tasks). If it were me, Iā€™d find a different system to handle auto shutdowns.