Configuration
All settings are in plugins/CoreStatus/config.yml, with comments in English and Polish. Run /corestatus reload
after a change: it applies everything, the language and the intervals included.
Colours are written in quotes as "#rrggbb". Without the quotes YAML reads the # as a comment.
A value that cannot be used is replaced by its default, and the console (and /corestatus reload) says which key
and what to fix in one sentence. A file that is not valid YAML gives the defaults for everything. Neither stops the
plugin, and the messages never quote your file, so a webhook token does not end up in the console.
On a proxy the first start writes a different file, see Network mode.
Top level
| Key | Default | Allowed | What it does |
|---|---|---|---|
language |
en |
en, pl |
Language of the messages in Discord and of the command answers. Anything else gives en. |
footer |
true |
true, false |
The small print "Status by Corestone • corestone.dev" under every message. false hides it. |
The status message: status
One message, sent the first time and then edited in place. After a restart it keeps editing the same message. If the message was deleted in Discord, a new one is posted.
| Key | Default | Allowed | What it does |
|---|---|---|---|
status.enabled |
true |
true, false |
Turns the status message on or off. The other features keep working. |
status.webhook |
empty | a Discord webhook address | Where the status goes. Empty: nothing is sent, and the console asks you to fill it in. A value that is not a Discord webhook address (it starts with https://discord.com/api/webhooks/) is ignored with a warning. |
status.interval-seconds |
60 |
whole number, 30 or more | How often the message is refreshed. Below 30 it is raised to 30, because Discord limits faster edits. |
status.title |
empty | text | Title of the message. Empty: "📊 Server status" or "📊 Status serwera", from the messages file. |
status.description |
empty | text, up to 1000 characters | A line of your own under the title, for example a welcome or how to join. Empty: no line. A longer text is cut, with a warning in the console. |
status.color-online |
"#57F287" |
"#rrggbb" |
Colour of the message while the server is online. |
status.color-offline |
"#ED4245" |
"#rrggbb" |
Colour while it is offline. |
status.icon |
empty | an https:// address of an image |
A small picture in the corner of the message. Empty: none. Any other kind of value is ignored, with a warning in the console. |
status.show.online |
true |
true, false |
The "Online" line (with the uptime, when that is on). An offline message always says "Offline". |
status.show.players |
true |
true, false |
Players online as {players}/{max}. |
status.show.player-list |
10 |
whole number, 0 or more | List up to this many nicknames, then "+N more". 0: no list. Nicknames reach Discord whenever this is above 0, which includes the default. A very long list is shortened so that the message always fits in Discord; the "+N more" then counts every name left out. |
status.show.tps |
true |
true, false |
TPS with one decimal, behind a coloured circle. |
status.show.mspt |
true |
true, false |
Milliseconds per tick. Only Paper and Purpur measure it; on Folia and Spigot the line is left out. |
status.show.uptime |
true |
true, false |
How long the server has been running, in the online line: "Online for 2 d 3 h 14 min". It needs status.show.online. |
status.show.version |
true |
true, false |
The server software and version, like Paper 1.21.4. |
status.show.address |
empty | text, or false |
An address players can copy, for example play.example.com. Empty or false: not shown. |
The lines are grouped under three headers: Players (the count and the list), Performance (TPS and MSPT) and
Server (version and address). A header whose lines are all switched off under status.show, or that the server cannot
fill (Spigot has no MSPT, an unknown version), is left out together with them. Every status message ends with "Last
update", a time that Discord shows in the time zone of whoever reads it. Values are shown as code, headers in bold.
A message with everything on (and a status.description set) looks like this:
📊 Server status
Come on in! The status refreshes every minute.
🟢 Online for 4 h 12 min
👥 Players
» Online: 12/100
» Steve, Alex, Notch, Jeb, Dinnerbone +7 more
⚙️ Performance
» TPS: 🟢 20.0
» MSPT: 1.6 ms
🖥️ Server
» Version: Paper 1.21.4
» Address: play.example.com
Last update: 1 minute ago
When the server stops, the message turns red and says since when, with a time Discord shows in the time zone of the reader:
📊 Server status
🔴 Offline since 14:32
The server is down. This message updates by itself when it is back.
🖥️ Server
» Address: play.example.com
Last update: 3 minutes ago
The "Server" part is there only when status.show.address is set.
TPS colours
The TPS is the average of the last minute, at most 20. The circle depends on the value as shown (one decimal):
| Circle | TPS |
|---|---|
| green | 18 or more |
| yellow | 15 or more, below 18 |
| red | below 15 |
On Paper and Purpur the server tells the TPS. On Spigot, and on Folia (its global region), CoreStatus counts the ticks itself.
Start and stop: start-stop
A short message when the server starts and when it stops. When the server stops, the status is first edited to "Offline", then "Server stopped" is posted. CoreStatus waits up to 5 seconds for Discord, so a slow Discord never holds up the stop.
After a crash CoreStatus has no chance to say goodbye. On the next start it posts "Server was offline since" with the time of the last sign of life, before "Server started". It does so when the last sign of life is older than two status intervals. A clean stop never triggers it.
| Key | Default | Allowed | What it does |
|---|---|---|---|
start-stop.enabled |
true |
true, false |
Turns it on or off. |
start-stop.webhook |
empty | a Discord webhook address | Own webhook for these messages. Empty: the one from status.webhook. |
start-stop.color |
"#5865F2" |
"#rrggbb" |
Colour of the message. |
Joins and leaves: join-leave
A message when a player joins or leaves. It is off by default because it sends player nicknames to Discord. Players in vanish are not announced.
| Key | Default | Allowed | What it does |
|---|---|---|---|
join-leave.enabled |
false |
true, false |
Turns it on or off. |
join-leave.webhook |
empty | a Discord webhook address | Own webhook for these messages. Empty: the one from status.webhook. |
join-leave.max-per-minute |
20 |
whole number, 1 or more | At most this many messages a minute. The rest are counted and posted as one summary, "and N more", at the end of the minute. |
join-leave.color-join |
"#57F287" |
"#rrggbb" |
Colour of a join message. |
join-leave.color-leave |
"#99AAB5" |
"#rrggbb" |
Colour of a leave message, and of the summary. |
Low TPS: low-tps
One warning when the TPS stays below a value for some minutes. After that there is no second warning until the TPS has come back to the value or above and dropped again. With the defaults: below 15 for 5 minutes.
The TPS is checked at every status refresh, so the warning comes after the first low reading plus the minutes you set.
The check runs even when status.enabled is false.
| Key | Default | Allowed | What it does |
|---|---|---|---|
low-tps.enabled |
true |
true, false |
Turns it on or off. |
low-tps.webhook |
empty | a Discord webhook address | Own webhook for the warning. Empty: the one from status.webhook. |
low-tps.threshold |
15 |
a number above 0 | Warn when the TPS is below this value. |
low-tps.minutes |
5 |
whole number, 1 or more | ...for this many minutes in a row. |
low-tps.color |
"#FEE75C" |
"#rrggbb" |
Colour of the warning. |
More than one webhook
Each feature can post to its own channel through its own webhook. An empty webhook means the one from
status.webhook. If that is empty too, the feature sends nothing.
A public channel and a staff channel. The status and the start and stop messages are made to be read by players, so a
public channel suits them. The low-TPS warning, and the join and leave messages if you turn them on, are for the staff:
create a second webhook in a staff channel and put it in low-tps.webhook (and join-leave.webhook). While those are
empty, the messages go to the status channel, and so to the public. /corestatus test and /corestatus status list
every address that is set, once each, whether its feature is on or not.
If you change the status address, CoreStatus posts a new status message there. The old message stays where it was: delete it in Discord.
Network mode: Velocity and BungeeCord
On a proxy the first start writes plugins/CoreStatus/config.yml for the network message. It has language, status,
network and footer. The sections start-stop, join-leave and low-tps do not exist there: each server behind
the proxy announces its own events with its own CoreStatus.
On the proxy only five keys of status are used, and they style the network message:
| Key | Default | Allowed | What it does |
|---|---|---|---|
status.title |
empty | text | Title. Empty: "🌐 Network status" or "🌐 Status sieci". |
status.description |
empty | text, up to 1000 characters | A line of your own under the title. Empty: no line. |
status.color-online |
"#57F287" |
"#rrggbb" |
Colour while every listed server is online. |
status.color-offline |
"#ED4245" |
"#rrggbb" |
Colour while at least one is offline. |
status.icon |
empty | an https:// address of an image |
A small picture in the corner. |
The network message itself:
| Key | Default | Allowed | What it does |
|---|---|---|---|
network.enabled |
false |
true, false |
Turns the network message on. It is off by default: set the webhook first. |
network.webhook |
empty | a Discord webhook address | Where the message goes. Empty: nothing is sent, and the console asks you to fill it in. |
network.interval-seconds |
60 |
whole number, 30 or more | How often the message is refreshed. Below 30 it is raised to 30. |
network.total |
true |
true, false |
Show the number of players on the listed servers that are online. |
network.servers |
two examples, lobby and survival |
a list of id and label |
The servers to show, in this order. |
network:
enabled: true
webhook: "https://discord.com/api/webhooks/123/abc…"
servers:
- id: lobby
label: "Lobby"
- id: survival
label: "Survival"
idmust be the name of the server in the proxy's own config: the name under[servers]in Velocity'svelocity.toml, or underserversin BungeeCord'sconfig.yml. Write it as it is there. A name the proxy does not know is left out of the message, and the console says so once.labelis the name shown in Discord. Empty: theid.- Online or offline comes from the proxy pinging the server (it waits 10 seconds at most). The number of players is the number of players the proxy has connected to that server.
A network message looks like this:
🌐 Network status
👥 Players on the network: 19
🟢 Lobby » 12 players • TPS 🟢 20.0
🟢 Survival » 7 players • TPS —
🔴 Creative » offline
Last update: 1 minute ago
Offline servers keep their place in the list, in the order of network.servers.
TPS on the network
A proxy cannot measure TPS. Each backend server tells it:
- CoreStatus must be installed on the backend server, with the same jar. It needs no webhook for this.
- The backend sends its TPS once per
status.interval-seconds(its own interval, 60 by default), through a player who is connected to it. So at least one player must be online on that server. Without a player nothing can be sent. - The proxy shows the TPS as long as the last report is not older than two intervals of
network.interval-seconds. After that, and for a server that never reported, it shows a dash (—). To avoid a dash flickering between reports, keep the backend's interval at most twice the proxy's.
When the proxy stops, the message is edited to show every server offline.
Changing the texts
Every text CoreStatus writes comes from messages_en.yml or messages_pl.yml, according to language. They are inside
the jar. To change a text:
- Create
plugins/CoreStatus/messages_en.yml(ormessages_pl.yml). - Put in it only the keys you want to change. The others keep their built-in text.
- Run
/corestatus reload.
status:
title: "Our survival server"
event:
joined: "{player} came online"
Keep the {variables} as they are: the plugin fills them in. A key the plugin does not know is ignored.
| Keys | Variables |
|---|---|
status.online-for |
{uptime} |
status.offline-since |
{time}, a Discord timestamp (time of day) shown in the reader's time zone |
status.players |
{players}, {max} |
status.player-list |
{names}, the nicknames, ending in status.more when there are more players than the list holds |
status.more |
{count} |
status.tps |
{tps}, the value with its coloured circle, already in code |
status.mspt |
{mspt} |
status.version |
{version} |
status.address |
{address} |
status.updated |
{time}, a Discord timestamp shown in the reader's time zone |
event.joined, event.left |
{player} |
event.was-offline |
{time} |
event.and-more |
{count} |
event.low-tps |
{tps}, {threshold}, {minutes} |
network.total |
{players} |
network.server-online |
{server}, {players} (the count with its noun, from network.players), {tps} (with its circle, already in code) |
network.players.one, .other (Polish: .one, .few, .many) |
{count} |
network.server-offline |
{server} |
command.test-ok |
{name} |
command.test-failed |
{name}, {reason} |
command.status-header |
{version} |
command.status-line |
{name}, {time}, {state} |
console.config-warning |
{warning} |
The other keys (for example footer, status.title, status.online, status.offline, status.offline-note,
status.section-players, status.section-performance, status.section-server, event.started, event.stopped,
event.test, network.title, network.unknown-tps, command.usage, command.reloaded, command.admincontrol and
console.no-webhook) take no variables. Reports of failed sends in the console are always in English.
The emoji, the bold markers and the backticks around the values are part of the texts, so you can change or remove them. A value between backticks is shown by Discord as code.