Configuration
On this page(2)
SnTimedTopper ships two YAML files. Keep config-version as it is: it is used to detect outdated files after an update.
config.yml
# ============================================================
# SnTimedTopper
# Configuration File
# Version: 1.0.0
# ============================================================
# Timed leaderboards (daily / weekly / monthly / custom-cron) for Topper.
#
# How it works: each "holder" below reads a numeric value per player through a
# PlaceholderAPI placeholder, snapshots it at the start of a period, and ranks
# players by how much they GAINED during the period (diff = current - initial).
# When the cron schedule fires, the top players receive rewards and the period
# resets. Values are normally read from a Topper board, but ANY placeholder works.
# ============================================================
# Config version - DO NOT MODIFY (used for auto-update detection)
config-version: 1
# Enable verbose debug logging in console.
debug: false
# ============================================================
# STORAGE SETTINGS
# ============================================================
storage:
# Backend for tracked data: sqlite (default), mysql, or yaml.
type: sqlite
# MySQL settings (only used when type is mysql).
mysql:
host: localhost
port: 3306
database: minecraft
username: root
password: ""
# Append extra JDBC URL flags (e.g. SSL). Leave default if unsure.
properties: "?useSSL=false&allowPublicKeyRetrieval=true"
# HikariCP connection pool settings.
pool:
maximum-pool-size: 6
minimum-idle: 2
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
# ============================================================
# GENERAL SETTINGS
# ============================================================
settings:
# Timezone used to evaluate cron schedules. Empty = server/system default.
# Examples: "UTC", "America/Argentina/Buenos_Aires", "Europe/Madrid".
timezone: ""
# Restart behaviour when the server was offline past a period's end time:
# last - pay out ONE reset for the most recent missed boundary, then silently fast-forward (recommended)
# all - pay out a reset (rewards + event) for EVERY missed boundary; may spam rewards after long downtime
catch-up: last
# If true, negative gains (current < initial, e.g. a balance was spent) are treated
# as 0 for display and reward eligibility. The real stored value is unchanged.
clamp-negative-diff: false
# How many tracked players get their current value refreshed per cycle, and how
# often a cycle runs (in server ticks; 20 ticks = 1 second). Keep these modest:
# placeholder reads happen on the main thread, so large batches cost TPS.
refresh:
entry-per-tick: 10
interval-ticks: 100
# Reward dispatch safety cap. The "?" default reward tier (see holders) is only
# applied to ranks up to this number, preventing a command storm on huge boards.
max-reward-rank: 100
# How many entries are shown per page by /tt top.
top-page-size: 10
# ============================================================
# HOLDERS
# ============================================================
# Each entry is one timed leaderboard. The key (e.g. "jump_daily") is the holder
# name used in commands, placeholders and the API.
#
# top - the Topper board/stat name; substituted into {top} below.
# value-placeholder - PlaceholderAPI string read per player. {top} is replaced
# with the "top" value above. Default reads a Topper board's
# raw per-player value. Override for non-Topper sources, e.g.
# "%statistic_jump%" or "%vault_eco_balance%".
# display-name - friendly name for chat/placeholders (HEX + & colors).
# cron - DAILY, WEEKLY, MONTHLY, HOURLY, or a 5-field cron expression
# ("min hour day-of-month month day-of-week"). Examples:
# "0 0 * * *" -> every day at 00:00
# "0 */6 * * *" -> every 6 hours
# "0 0 * * 1" -> every Monday at 00:00
# rewards - commands run from console for each finishing rank. Use {name}
# for the player name. Numeric keys target that exact rank; the
# "?" key is the fallback for any other ranked player.
# ============================================================
holders:
jump_daily:
top: jump
value-placeholder: "%topper_{top};value_raw%"
display-name: "&#FFD700Daily Jumps"
cron: DAILY
rewards:
"1":
- "give {name} diamond 3"
- "broadcast &6{name} &7won the daily jump leaderboard!"
"2":
- "give {name} iron_ingot 5"
"3":
- "give {name} gold_ingot 5"
"?":
- "give {name} stone 1"
blocks_weekly:
top: blocks_mined
value-placeholder: "%topper_{top};value_raw%"
display-name: "7FFFFWeekly Blocks Mined"
cron: WEEKLY
rewards:
"1":
- "give {name} netherite_ingot 1"
"2":
- "give {name} diamond 5"
"3":
- "give {name} diamond 2"messages.yml
# ============================================================
# SnTimedTopper
# Messages File
# Version: 1.0.0
# ============================================================
# Supports HEX colors: &#RRGGBB
# Supports PlaceholderAPI: %player_name% (when a player context exists)
# Supports internal placeholders: {placeholder}
# Supports centering: [center] at the start of a line
# ============================================================
# Config version - DO NOT MODIFY (used for auto-update detection)
config-version: 1
# ============================================================
# PREFIX
# ============================================================
prefix: "7FF55&lTimedTopper &8| &7"
# ============================================================
# ERROR MESSAGES
# ============================================================
errors:
no-permission: "{prefix}&cYou don't have permission to do this."
unknown-subcommand: "{prefix}&cUnknown subcommand: &f{command}"
holder-not-found: "{prefix}&cNo leaderboard named &f{holder}&c."
specify-holder: "{prefix}&cPlease specify a leaderboard name."
no-holders: "{prefix}&cNo leaderboards are configured."
# ============================================================
# COMMAND MESSAGES
# ============================================================
commands:
reload-success: "{prefix}&aConfiguration reloaded successfully."
reload-failed: "{prefix}&cFailed to reload configuration. Check console."
reset-success: "{prefix}&aLeaderboard &f{holder} &awas reset and rewards were dispatched."
# Usage hints (admin)
usage-reset: "{prefix}&cUsage: &f/tt reset <holder>"
usage-top: "{prefix}&cUsage: &f/tt top <holder> [page]"
usage-info: "{prefix}&cUsage: &f/tt info <holder>"
# ----------------------------------------------------------
# HELP COMMAND
# ----------------------------------------------------------
help-header: "[center]&8&m─────────────&r 7FF55&lTimedTopper &8&m─────────────"
help-command-list: "7FF55/tt list &8- &7List all leaderboards"
help-command-top: "7FF55/tt top <holder> [page] &8- &7View a leaderboard"
help-command-info: "7FF55/tt info <holder> &8- &7View a leaderboard's timer & settings"
help-admin-header: "[center]&8&m──────────&r &#FF5555&lAdmin &8&m──────────"
help-reload: "&#FF5555/tt reload &8- &7Reload configuration"
help-reset: "&#FF5555/tt reset <holder> &8- &7Force a period reset (pays rewards)"
# ============================================================
# LIST DISPLAY
# ============================================================
list:
header: "[center]&8&m─────&r 7FF55&lLeaderboards &8&m─────"
line: "&7- &f{holder} &8(&7{display}&8) &8| &7{remaining}"
footer: ""
# ============================================================
# TOP DISPLAY
# ============================================================
top:
header: "[center]&8&m───&r 7FF55&l{display} &8&m───"
subheader: "&7Resets in &f{remaining}&7. Page &f{page}&7/&f{pages}&7."
# {rank} {name} {value} {diff}
line: "&8#&7{rank} &f{name} &8- &a{diff} &8(&7total: {value}&8)"
empty: "&7No one has earned points this period yet."
footer: "&8&m──────────────────────────"
# ============================================================
# INFO DISPLAY
# ============================================================
info:
header: "[center]&8&m───&r 7FF55&l{display} &8&m───"
source: "&7Source: &f{source}"
cron: "&7Schedule: &f{cron}"
period: "&7Period: &f{start} &7→ &f{end}"
remaining: "&7Resets in: &f{remaining}"
tracked: "&7Tracked players: &f{count}"
# ============================================================
# TIME / DURATION
# ============================================================
# Suffixes used when formatting a remaining duration (e.g. "2d 3h 4m").
time:
day: "d"
hour: "h"
minute: "m"
second: "s"
now: "now"
never: "never"
# Java date pattern used by /tt info for period start/end (evaluated in the configured timezone).
date-format: "yyyy-MM-dd HH:mm"
# ============================================================
# PLACEHOLDERS
# ============================================================
# Fallback values returned by %sntimedtopper_...% placeholders.
placeholders:
none: "---"
zero: "0"
loading: "..."