Code (YAML):
# Available command actions:
# [MESSAGE] or [TEXT] -> this will send a direct message to the player.
# [PLAYER] -> a command will be sent by the player.
# [CONSOLE] or none -> a command will be sent by the console.
# [TITLE] -> will show a title to a player. A more detailed usage below.
# [SOUND] -> this will play a sound to the player.
# [LOG <logname>] -> this will log a message to a log file.
# [LOG] -> this will send a log message to the console.
# ---
#- <ALL>[PLAYER] will be executed by every online player EXCEPT the player who dispatched the event.
#- <ALL>[CONSOLE] will be executed by console for every online player. Placeholders will apply to the player.
#- will be executed once via the server console.
# ---
# "<ALL+>" in Event-Job will be executed by every online player INCLUDING the player who dispatched the event.
# Use {placeholder} to apply a placeholder to the player who dispatched the event.
# ---
# Detailed explanation:
# This will play a sound to the player.
# The first argument is the sound, the second is the volume and the third is the pitch.
# You can find a list of sounds here: https://www.digminecraft.com/lists/sound_list_pc.php
# - '[SOUND] ENTITY.PLAYER.LEVELUP, 1.0, 1.0'
# This will show a title to the player.
# The first argument is the title, the second is the subtitle.
# The last three are: fade-in, stay and fade-out times.
# - '[TITLE] This is a title, This is a subtitle, 20, 60, 20'
# Alternatively you can use opt out the subtitle or the times, or just the subtitle.
# - '[TITLE] This is a title'
# - '[TITLE] This is a title, 20, 60, 20'
# ---
# You can also filter out the players using placeholders.
# - '[PLAYER (%vault_eco_balance% > 1000)] This will only be executed by the player if he has more than 1000 balance.'
# Same applies to all the other actions, title, message, sound, etc., ex:
# '[TITLE (%vault_eco_balance% > 1000)] You have more than 1000 balance!'
# This will send a title to all the players that have more than 1000 balance.
# ---
# Available operators:
# - X less than Y: <
# - X is greater than Y: >
# - X less or equal to Y: <=
# - X is greater or equal to Y: >=
# - X is equals to Y: ==
# - X is not equals to Y: !=
# ---
# This works best for placeholders that return numeric values.
# Operators might work for values that return yes or true, ex.:
# - '[PLAYER (%player_is_op%)] shout Yay, I'm an OP when this job was executed.'
# ---
# You can also check if player has a permission, ex.:
# - '[PLAYER (PERMISSION:some.permission)] shout You have the permission!'
jobs:
save:
time
: every 1 hour
commands
:
- say Saving world!
- save-
all
- say Save Complete!
restart:
time
: every 1 day of week at 6:00
commands
:
- say Server restart in 10 seconds!
- timer 10 stop
tps:
time
: every 30 minutes
commands
:
- tps
# If you do not want to use any event jobs, use:
# event-jobs: { }
event-jobs:
join-event:
welcome:
time
: 1
commands
:
- tell
{player_name
} Hello!
- <ALL>
[CHAT
] Hello
{player_name
}!
quit-event:
bye:
time
: 5
commands
:
- say
{player_name
} left the game few seconds ago.
player-gamemode-change-event:
whisper:
time
: 0
commands
:
-
"<ALL> [TEXT (PERM:staff.notify.gamemode)] Player {player_name} changed his gamemode from {from_gamemode} to {to_gamemode}"
startup:
commands
:
- say Server was started!
- timer 60 say Server is online for 1 minute!
- save-
all
- '
[LOG <server_startup.log>
] Server has been started.'
schedule
:
# Controls numeric weekdays in expressions like: every day of week in 1,5 at 12:00
# Supported: monday-first (default, ISO), sunday-first (legacy), iso, legacy
weekday-numbering
: monday-first
debug
: false
silent-start
: false
notify-update
: true
log-to-file
: true
locale
: 'en'
Syntax:
Code (Text):
# named weekdays
time: every wednesday at 00:00
time: every monday,friday at 18:30
# list/range support
time: every day of week in 1,3,5 at 12:00
time: every day of week in 2..6 at 07:45
time: every day of month in 1..5 at 09:00
# plain intervals
time: every 30 seconds
time: every 5 minutes
time: every 1 hour
time: every 2 days
# multiple times per day
time: every day at 08:00,12:00,18:00
# time windows
time: every 15 minutes from 09:00 to 17:00
time: every 20 minutes from 23:00 to 03:00
# nth / last weekday in month
time: every 2nd monday of month at 10:00
time: every last friday of month at 22:00
# relative calendar keywords
time: every weekday at 09:00
time: every weekend at 11:00
time: every month on last-day at 23:55
# month-name schedules
time: every january,march day 1 at 08:00
# start/end constraints
time: every 1 hour between 2026-06-01 and 2026-09-01
# per-job timezone and jitter
# options order is: ... [between ...] [jitter ...] [timezone ...]
time: every day at 09:00 timezone Europe/Berlin
time: every 5 minutes jitter 30s
time: every 10 minutes jitter 2m timezone Europe/Berlin
# one-shot execution
time: at 2026-06-10 14:30
# classic cron expression (opt-in)
time: cron: 0 0 * * 3
time: cron: */15 9-17 * * mon-fri