Configuration
What lives in each configuration file, and what to tune in config.yml.
On this page
File layout
lang/
messages.yml # every regular player-facing message
deathmessages.yml # death message pools, by killer/cause — see below
menus/
players/settings.yml, ignore.yml, payment-confirm.yml, warps.yml # player menus
staff/inventory.yml, enderchest.yml, confirm.yml # /invsee, /invedit GUIs
config.yml # main config — features, every subsystem's settings, permission remaps
punishments.yml # ban/mute/warn/jail message templates + kick screens (config+text combined)
economy.yml # currency settings + economy messages (config+text combined)
announcements.yml # auto-broadcast message pool + interval
maintenance-state.yml # runtime — on/off + whitelist, not a template you edit
socialspy-state.yml # runtime — per-player explicit toggle overrides
chat-preferences.yml # runtime — each player's /settings choices and ignore list
admin-audit.log # runtime — inventory changes made by staff, if enabled
alphasystem.db # sqlite database file (if database.type: sqlite)
config.yml layers the jar's bundled defaults underneath what's on disk, so a simple missing scalar key still falls back correctly. lang/messages.yml, punishments.yml, economy.yml, and announcements.yml have no such layering — every key you want to change must actually exist in the on-disk file. And nested sections in config.yml (like warn.escalation.rules) must be written out in full on disk too — a Bukkit quirk where getConfigurationSection() on a path that only exists in the bundled jar returns an empty section instead of falling back.Features
A single top-level toggle map — set any entry to false to fully disable that subsystem (command included). Requires /as reload or a restart.
features:
settings: true
ignore: true
paytoggle: true
payconfirm: true
chat: true
flyspeed: true
gamemode: true
heal: true
feed: true
god: true
fly: true
kill: true
ping: true
vanish: true
invsee: true
invedit: true
enderchest: true
tphere: true
skull: true
punish: true
warps: true
announcements: true
chat-filter: true
economy: true
time: true
alts: true
hat: true
tpsbar: true
nv: true
back: true
freeze: true
crafting: true
anvil: true
weather: true
fixitem: true
death-messages: true
Chat
chat:
format-normal: true # false if another plugin (TAB, etc.) handles normal chat format
delete-button:
enabled: true
icon: "&#FF0000[x] "
hover: "󅒐ᴄʟɪᴄᴋ ᴛᴏ ᴅᴇʟᴇᴛᴇ ᴛʜɪꜱ ᴍᴇꜱꜱᴀɢᴇ"
replacement: "C826B<italic>ᴛʜɪꜱ ᴍᴇꜱꜱᴀɢᴇ ᴡᴀꜱ ᴅᴇʟᴇᴛᴇᴅ.</italic>"
remembered-messages: 200
fallback-clear-lines: 100
remembered-messages caps how many recent messages (across chat, /sc, /mc, announcements, and private messages) stay eligible for deletion. fallback-clear-lines only matters when PacketEvents isn't installed — see Integrations → Chat deletion for what it actually does.
chat:. They have their own join-quit: section, covered on Server systems. Set join-quit.enabled: false if another plugin already formats them.Chat filter
chat-filter:
words:
- "badword1"
- "badword2"
warn-reason: "Used a prohibited word in chat"
staff-alert: "{prefix}&#FF0000{player} 󅒐ᴜꜱᴇᴅ ᴀ ꜰɪʟᴛᴇʀᴇᴅ ᴡᴏʀᴅ ᴀɴᴅ ᴡᴀꜱ ᴀᴜᴛᴏ-ᴡᴀʀɴᴇᴅ򇨣. 󅒐(&#C8A96E{server}󅒐)"
Case-insensitive substring match against the word list. A match deletes the message before it ever reaches chat, auto-issues a /warn (which can itself trigger warn escalation), and alerts staff holding permissions.chat-filter-alert — network-wide if database.type: mysql.
Database
database:
type: sqlite # sqlite | h2 | mysql
sqlite-file: alphasystem.db
h2-file: alphasystem_h2
mysql:
host: localhost
port: 3306
database: alphasystem
username: root
password: ""
use-ssl: false
| Type | When to use it |
|---|---|
| sqlite | Default. Zero-config, local file, single server. |
| h2 | Embedded, pure-Java, no native libraries — a SQLite alternative on hosts that block native code. Still single-server only. |
| mysql | Required for cross-server punishment sync, network-wide maintenance mode, and shared alt-detection across a network. See Integrations → Network sync. |
Economy
economy.yml holds both the settings and every economy message. Alpha-system registers as the Vault economy provider when Vault is installed, and works on its own without it.
starting-balance: 100.0
decimal-places: 2 # only used when short-format is false
currency:
symbol: "$"
name-singular: "dollar"
name-plural: "dollars"
short-format: true # 1000 -> 1k, 1500000 -> 1.5m
format: "�FF12{amount}"
top-players-count: 5
transaction-history:
enabled: true
retention-days: 90 # 0 = keep forever
page-size: 8
transaction-safety:
maximum-transaction: 1000000000000.0
maximum-balance: 1000000000000000.0
pay-cooldown-millis: 750
| Section | What it does |
|---|---|
transaction-history | Records /pay, staff balance changes, Vault deposits and withdrawals, and built-in charges, each with an id you can reverse with /moneyrollback. Old records are deleted after retention-days. |
transaction-safety | Rejects NaN, infinite and negative amounts, balance overflow, paying yourself, and rapid duplicate /pay requests. Balance changes and their audit entry are written together. |
baltop-format | The layout of /baltop: {header}, {lines}, and blank lines for spacing. |
Payment confirmation and the ignore limits are in config.yml, and are covered on Player settings.
Other config.yml sections
These sections each have a full explanation on Server systems:
| Section | Controls |
|---|---|
combat | Combat tag, its blocked commands and logout penalty. |
teleport-safety | Safe teleport search distances. |
warps, spawn, back | Warmup length, style and message. |
respawn | Respawn priority, custom location and safety. |
nameplates | Multi-line labels above players. |
join-quit, vanish | Join and quit visibility and the vanish reminder. |
admin-audit | Inventory audit log, console and Discord output. |
ignore, payments | Ignore and payment confirmation. |
bossbarmsg, titlemsg, actionbarmsg, announcements.permanent | Defaults for the broadcast commands. |
time | animate and animate-seconds make the sun or moon glide to the target time instead of snapping. 3 seconds by default. |
weather.extra-lightning | Extra lightning near random players during a storm. real: false makes it visual and sound only. |
fixitem | Optional cost for /fixhand and /fixall: cost-type is none, money or xp (levels). |
client-brand | Client brand alerts for staff. |
panel | The approval panel connection. See Server approval. |
Config validation
Alpha-system checks config.yml before it uses it. Broken YAML and invalid values, such as an unknown enum, an out-of-range number or a bad respawn entry, are rejected, and each problem is reported with its exact path. On /as reload a failed check leaves the running configuration unchanged, so a typo cannot take features offline. At startup it is stricter: if validation fails, the plugin lists every error and disables itself until the file is fixed.
When an update changes the shape of config.yml, the plugin migrates it, keeps a backup next to it, and says so in the console (Migrated config.yml from vN to vM; backup: …). Do not edit config-version by hand.
Jail
jail:
world: ""
x: 0.0
y: 0.0
z: 0.0
yaw: 0.0
pitch: 0.0
notify-style: bossbar # bossbar | actionbar | title | none
bossbar:
text: "&#FF9400ᴊᴀɪʟᴇᴅ 󅒐— &#C8A96E{remaining} 󅒐ʀᴇᴍᴀɪɴɪɴɢ"
color: RED
actionbar:
text: "&#FF9400ʏᴏᴜ ᴀʀᴇ ᴊᴀɪʟᴇᴅ 󅒐— &#C8A96E{remaining} 󅒐ʀᴇᴍᴀɪɴɪɴɢ"
title:
title: "&#FF9400ᴊᴀɪʟᴇᴅ"
subtitle: "󅒐{remaining} ʀᴇᴍᴀɪɴɪɴɢ"
Set the location with /setjail rather than editing coordinates by hand. Remember: no movement radius is enforced automatically — build a physical containment area around this point yourself.
Restart
restart:
style: bossbar # bossbar | actionbar | title
duration-seconds: 60
relaunch-process: true
message: "&#FF0000ꜱᴇʀᴠᴇʀ ʀᴇꜱᴛᴀʀᴛɪɴɢ ɪɴ &#C8A96E{time}ꜱ"
title: "&#FF0000ʀᴇꜱᴛᴀʀᴛɪɴɢ"
subtitle: "󅒐{time} ꜱᴇᴄᴏɴᴅꜱ"
kick-message: "&#FF0000ꜱᴇʀᴠᴇʀ ɪꜱ ʀᴇꜱᴛᴀʀᴛɪɴɢ򇨣. 󅒐ᴡᴇ'ʟʟ ʙᴇ ʀɪɢʜᴛ ʙᴀᴄᴋ!"
storm-effect:
enabled: true
interval-ticks: 60
strikes-per-player: 1
chance: 0.5
relaunch-process: true reconstructs the original java launch command (same binary, JVM flags, jar/args) and spawns a fresh process before this one shuts down — so /restart actually restarts rather than just stopping. Set it to false on a hosting panel that already auto-restarts on stop (or that kills child processes, which would break this anyway).
The storm-effect is purely cosmetic — rain, fog particles around each player, and lightning flashes 20-45 blocks out and well above ground level (never on top of a player, never real damage). Tuned for a noticeable-but-not-annoying pace by default; raise chance and lower interval-ticks for something more intense, or set enabled: false for a plain silent countdown.
Maintenance
maintenance:
kick-message: "&#FF0000ꜱᴇʀᴠᴇʀ ɪꜱ ɴᴏᴡ ɪɴ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ򇨣. 󅒐ᴡᴇ'ʟʟ ʙᴇ ʀɪɢʜᴛ ʙᴀᴄᴋ!"
join-deny-message: "&#FF0000ꜱᴇʀᴠᴇʀ ɪꜱ ᴄᴜʀʀᴇɴᴛʟʏ ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ򇨣. 󅒐ᴄʜᴇᴄᴋ ʙᴀᴄᴋ ꜱᴏᴏɴ򇨣!"
motd: "&#FF0000ꜱᴇʀᴠᴇʀ ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ\n󅒐ᴡᴇ'ʟʟ ʙᴇ ʙᴀᴄᴋ ꜱʜᴏʀᴛʟʏ򇨣!"
These are templates only — the actual on/off state and bypass whitelist live in maintenance-state.yml, managed entirely through the /maintenance command. Leave motd blank to keep the normal server-list MOTD from server.properties even while maintenance is active.
Warps GUI
menus/players/warps.yml uses the same DeluxeMenus-style layout as every other Alpha-system menu. warp, locked_warp and per_warp are templates for the dynamic warp items.
menu_version: 2
menu_title: "&#FF9400ᴡᴀʀᴘꜱ"
size: 27
open_commands:
- "[sound] BLOCK_CHEST_OPEN 1 1"
items:
warp:
material: COMPASS
display_name: "&#C8A96E{warp}"
lore:
- "󅒐ᴛʏᴘᴇ򇨣: &#C8A96E{visibility}"
- "󅒐ᴄʀᴇᴀᴛᴇᴅ ʙʏ򇨣: &#C8A96E{creator}"
left_click_commands:
- "[sound] UI_BUTTON_CLICK 1 1"
- "[close]"
- "[warp] {warp}"
locked_warp:
material: GRAY_DYE
display_name: "󅒐{warp}"
per_warp: {} # override one warp by name; omitted options fall back to items.warp
Action types: [warp], [player] (run as the clicking player), [console], [message], [sound], [close]. {warp}, {visibility}, {creator} and {player} work in names and lore. Menus use 27 slots and no filler panes by default. An older warps file is converted on update and a .legacy-v1.yml copy is kept.
bStats & update checker
bstats:
enabled: true
plugin-id: 0 # 0 = disabled until you set a real id
update-checker:
enabled: true
repo: "alpha-m19/alphacore-plugin"
notify-ops-on-join: true
Both covered in depth in Integrations — in short: bstats.plugin-id stays 0 (metrics off) until you register the plugin at bstats.org and put the real id here, since a guessed id could send this server's data to someone else's project by mistake.
Reload vs. restart
/as reload re-reads config.yml, lang/messages.yml, lang/deathmessages.yml, punishments.yml, economy.yml, announcements.yml and every file under menus/ from disk, after validating them. Reopen a menu to see layout changes. It does not reload compiled Java — anything changed by updating the plugin jar itself needs a full server restart.
