Configuration
A deep walkthrough of the config files that actually matter day-to-day. For the full punishment message templates and every individual message key, edit the files directly and reload — they're extensively commented in place.
File layout
lang/
messages.yml # every regular player-facing message
deathmessages.yml # death message pools, by killer/cause — see below
menus/
players/warps.yml # /warp GUI layout
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
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:
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
join-quit-messages: true # false if another plugin (CMI, etc.) already formats join/quit
delete-button:
enabled: true
icon: "&#FF0000[x] "
hover: "󅒐ᴄʟɪᴄᴋ ᴛᴏ ᴅᴇʟᴇᴛᴇ ᴛʜɪꜱ ᴍᴇꜱꜱᴀɢᴇ"
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 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. |
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 is a DeluxeMenus-style layout — fully custom items and click actions, not a fixed template:
title: "&#FF9400ᴡᴀʀᴘꜱ"
size: 27
item:
material: COMPASS
name: "&#C8A96E{warp}"
lore:
- "&8ᴄᴀᴛᴇɢᴏʀʏ: &7{visibility}"
- " "
- "󅒐ᴄʟɪᴄᴋ ᴛᴏ ᴛᴇʟᴇᴘᴏʀᴛ"
actions:
- "[warp] {warp}"
- "[sound] ui.button.click"
- "[close]"
locked-item:
material: GRAY_DYE
name: "󅒐{warp} 򇨣(ʟᴏᴄᴋᴇᴅ)"
per-warp:
spawn-shop:
slot: 13
material: EMERALD
filler:
material: GRAY_STAINED_GLASS_PANE
name: " "
Action types: [warp], [player] (run as the clicking player), [console], [message], [sound], [close]. {warp}, {visibility}, and {creator} are available in names/lore. per-warp.<name> overrides material/name/lore/actions/slot for one specific warp — anything not overridden falls back to item/locked-item.
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, and announcements.yml from disk. It does not reload compiled Java — anything changed by updating the plugin jar itself needs a full server restart.
