Appearance
Configuration
Each half of the plugin has its own config.yml:
| Half | Where the file is |
|---|---|
| The proxy (Velocity) | plugins/appeltools/config.yml |
| The backend (Paper) | plugins/AppelToolsPaper/config.yml |
The file is written on the first start, with every key and its default. From then on the plugin reads your file and writes it back on every start. Your own values are never overwritten.
What happens to a key that is missing
A key that is not in your file is written into it, with the default that is built into the plugin. The plugin rewrites the whole file on every start: your own values are never overwritten, and every key that the plugin knows is in the file afterwards.
That is what makes a file that was made before a key existed grow. The discord.channels keys of a file that predates the channels show up on the next start — empty, ready to be filled in.
The three sections that the plugin manages itself — modules, server and two-factor — are written back from the running plugin, so a value that the plugin changed itself (a module that was switched off) is in the file too.
WARNING
A key that the plugin does not know is dropped the next time the file is written. A typo in a key name does not sit there unnoticed: the key is gone after the next start.
TIP
A key that you delete on purpose comes back with its default on the next start. Delete the value — set it to false, 0 or "" — if you want it to be off.
The same goes for messages.yml: the sections that the plugin manages are completed on every start, so a message that a newer version added shows up with its default. A key that you delete on purpose stays deleted.
How the keys are named
The keys are in lower kebab case, whatever the name of the setting is in the code:
| In the code | In config.yml |
|---|---|
Config.Teleport.COOLDOWN_SECONDS | teleport.cooldown-seconds |
CommonConfig.ServerInfo.RECORD_PLAYER_IPS | server.record-player-ips |
Config.Modules.Punishment.IP_BAN | modules.punishment-system.ip-ban |
Reading it again
/atp reload and /atv reload read the file again without restarting the server. The messages file is read again as well.
The proxy: config.yml
discord
The Discord bot. It is off until you fill in a token.
| Key | Default | What it does |
|---|---|---|
discord.token | "" | The token of the bot. Empty means the bot is not started. |
discord.activity | play.example.com | The text the bot shows as its activity. |
discord.staff-roles | [] | The roles that are mentioned in the messages of the bot. |
discord.admin-roles | [] | The roles that may run the slash commands of the bot. Empty means nobody may. |
discord.channels.staff-notifications | "" | The joins, the leaves, the switches and the vanishments of the staff. |
discord.channels.reports | "" | The reports of the players and the notes of the staff. |
discord.channels.punishments | "" | The punishments that were given. |
discord.channels.log | "" | Missing plugins, the maintenance mode, the restarts, the crashes and the servers that stopped answering. |
A channel with an empty id is switched off: nothing is sent into it.
TIP
A file that was made before the channels and the roles existed gets them added on the next start — see what happens to a key that is missing. Fill in the ids of your channels and restart the proxy.
See the Discord page for the whole picture.
chat-filter
| Key | Default | What it does |
|---|---|---|
chat-filter.enabled | true | The filter runs at all. |
chat-filter.curse-words | [] | The words that are not allowed in chat. |
chat-filter.block-advertising | true | Blocks the messages that look like an advertisement. |
announcements
| Key | Default | What it does |
|---|---|---|
announcements.enabled | true | Not read by the plugin — the interval below is what decides. |
announcements.interval | 120s | The time between two announcements. 30s, 5m, 1h — all of those work. An interval of 0 switches the announcements off. |
modules
Every feature sits behind a toggle. Switch a module off and its commands and its listeners disappear; the rest of the plugin keeps working.
| Key | Default | What it turns off |
|---|---|---|
modules.appeltools.enabled | true | The plugin itself. |
modules.appeltools.chat-modifier | true | The chat modifier of the proxy. |
modules.broadcast.enabled | true | /broadcast. |
modules.maintenance.enabled | true | The maintenance mode. |
modules.maintenance.icon | true | The icon of the maintenance mode in the server list. |
modules.maintenance.motd | true | The maintenance text in the server list. |
modules.maintenance.player-list-hover | true | The maintenance text when you hover a player in the list. |
modules.maintenance.version | true | The maintenance text in the version line. |
modules.message-system.enabled | true | The private messages. |
modules.message-system.ignore | true | /ignore and /unignore. |
modules.message-system.spy | true | /staffspytoggle. |
modules.punishment-system.enabled | true | All the punishments. |
modules.punishment-system.ban | true | /ban. |
modules.punishment-system.tempban | true | /tempban. |
modules.punishment-system.unban | true | /unban. |
modules.punishment-system.kick | true | /kick. |
modules.punishment-system.ipkick | true | /ipkick. |
modules.punishment-system.mute | true | /mute. |
modules.punishment-system.tempmute | true | /tempmute. |
modules.punishment-system.unmute | true | /unmute. |
modules.punishment-system.ipmute | true | /ipmute. |
modules.punishment-system.tempipmute | true | /tempipmute. |
modules.punishment-system.ipunmute | true | /ipunmute. |
modules.punishment-system.ipban | true | /ipban. |
modules.punishment-system.tempipban | true | /tempipban. |
modules.punishment-system.ipunban | true | /ipunban. |
modules.report.enabled | true | The reports. |
modules.restart-server.enabled | true | /restartserver. |
modules.rules.enabled | true | /rules. |
modules.server-info.enabled | true | The server information in the server list. |
modules.server-info.icon | true | The icon of the server in the server list. |
modules.server-info.motd | true | The text of the server in the server list. |
modules.server-info.player-list-hover | true | The text when you hover a player in the list. |
modules.server-info.version | true | The text in the version line. |
modules.staff.enabled | true | The staff features of the proxy. |
modules.staff.chat | true | The staff chat. |
modules.staff.list | true | /stafflist. |
modules.staff.version-list | true | /versionlist. |
modules.staff.mode | true | The staff mode. |
modules.staff.notifications | true | The staff notifications. |
modules.party.enabled | true | The parties. |
modules.friends.enabled | true | The friends. |
modules.plugin-updater.enabled | false | Not read by the plugin — the updater commands are always there. |
modules.servers.enabled | true | /servers. |
required-plugins
A list of plugin names. When one of them is missing, the proxy refuses to start. It is empty by default.
server
| Key | Default | What it does |
|---|---|---|
server.name | Example | The name of the server, shown in the messages. |
server.ip | play.example.com | The address of the network, used in the messages and in the restart. |
server.locale | nl | The language: en or nl. It decides the words of the durations and the words of "on" and "off". A locale that the plugin does not know falls back to Dutch. It needs a restart. |
server.join-message | "" | The message that is broadcast when a player joins. Empty means nothing is said. {SERVER_NAME} and {PLAYER} are filled in. |
server.record-player-ips | true | Remembers the address every player joins with. Those addresses are what /alts and /geoip work with. |
server.record-private-ips | false | Also remembers the addresses that cannot be attributed to a player. Off by default: behind a proxy every player joins with the address of the proxy, and recording it would make every account of the network an alt of every other one. Turn it on for a server that only serves a local network. |
database
| Key | Default | What it does |
|---|---|---|
database.host | 0.0.0.0 | The host of the MySQL server. |
database.port | 3306 | The port. |
database.name | database | The name of the database. |
database.username | username | The user. |
database.password | password | The password. |
database.ssl | false | Whether the connection is encrypted. |
database.debug | false | Not read by the plugin. |
The proxy and every backend point at the same database — that is what makes a ban on one server count on the others.
two-factor
| Key | Default | What it does |
|---|---|---|
two-factor.enabled | true | The two-factor is switched on. |
two-factor.server-key | "" | The key the secrets of the staff are encrypted with. A dump of the database does not reveal a secret without it. Leave it empty and the proxy writes a random key into the file. |
two-factor.trusted-ip-days | 3 | How many days an address stays trusted. A trusted address is not asked for a code again as long as it stays the same. |
See the two-factor page.
plugins
The plugins that the plugin updater watches. It is empty by default and the module is off. See the plugin updater page for the keys each provider needs.
The backend: config.yml
economy
| Key | Default | What it does |
|---|---|---|
economy.start-balance | 0.0 | The balance a new account starts with. |
economy.transaction-history-days | 0 | How long the log of the balance changes is kept, in days. Zero keeps it for ever. |
modules
| Key | Default | What it turns off |
|---|---|---|
modules.root.enabled | true | The plugin itself. |
modules.economy.enabled | true | The economy. |
modules.staff.enabled | true | The staff tools of the backend. |
modules.gamemode.enabled | true | The gamemodes. |
modules.chat-modifier.enabled | true | The chat modifier of the backend. |
modules.speed.enabled | true | The speed commands. |
modules.teleport.enabled | true | The teleport commands. |
modules.home.enabled | true | The homes. |
required-plugins
A list of plugin names. When one of them is missing, the backend refuses to start. It is empty by default.
teleport
| Key | Default | What it does |
|---|---|---|
teleport.cooldown-seconds | 3 | The time between two teleports. A player with appeltools.command.teleport.bypasscooldown skips it. |
teleport.request-timeout-seconds | 60 | How long a teleport request stays open before it expires. |
server
| Key | Default | What it does |
|---|---|---|
server.name | Example | The name of the server, shown in the messages. |
server.ip | play.example.com | The address of the network. |
server.locale | nl | The language: en or nl. It decides the words of the durations and the words of "on" and "off". It needs a restart. |
server.record-player-ips | true | Remembers the address every player joins with. |
server.record-private-ips | false | Also remembers the addresses that cannot be attributed to a player. |
server.ipinfo-token | "" | The token of the ipinfo.io account that /geoip uses. Empty means the request is made without a token: the service answers anyway, but the country is then shown as its two-letter code and the rate limit is lower. |
database
The same keys as on the proxy, and the same database. See above.
two-factor
| Key | Default | What it does |
|---|---|---|
two-factor.enabled | true | The backend enforces the two-factor. The proxy owns the state of it. |
two-factor.trusted-ip-days | 3 | How many days an address stays trusted. |
The backend has no server-key: the key lives on the proxy, because that is where the secrets are.
plugins
The plugins that the plugin updater watches on this backend. See the plugin updater page.