settings.yml reference
The core half of settings.yml. Client integrations are on
Integrations; reputation, ban waves, replays and the rest of the
enforcement machinery are on Enforcement.
Identity
There is nothing to configure. Your licence identity is embedded in the jar you download from the Client Area.
Warning
A uuid: key in settings.yml is ignored. Adding one does not move a licence between servers;
it only makes the file lie about where the identity comes from.
General
name: "MyServer"
debug: false
language: "en_us"
ai:
debug: false
api:
sync-interval: 300| Key | Default | Meaning |
|---|---|---|
name |
"MyServer" |
Server display name in the dashboard and in alerts. Max 32 characters |
debug |
false |
Verbose logging. Spams the console. Leave off unless asked |
language |
"en_us" |
Loads lang/<code>.yml. Bundled: en_us, tr |
ai.debug |
n/a | No longer available. It streamed a per-window model reading; the key is now ignored if present |
api.sync-interval |
300 |
Seconds between reputation syncs |
language accepts both en and en_us for English. Only translated keys need to be present in a
language file. Anything missing falls back to English. Dropping your own lang/<code>.yml (for
example it_it) into the plugin's data folder adds or overrides a language without waiting for an
update.
Note
ai.debug used to stream a reading for every scored window. It was removed: a per-window
numeric readout of the model is a detection secret, and it fired on windows that never flagged.
To confirm detections are alive on a quiet server use /ecstacy suspicious, which lists players
tracking near the bar, or the dashboard.
Alert visibility
Where a flag is shown. The dashboard always receives every flag. That is not configurable here. These keys only decide what the server itself does with it.
alerts:
permission: "ecstacy.alerts"
mode: "CHAT_AND_WEB"
console: true
webhook: true
punish: true| Key | Default | Meaning |
|---|---|---|
alerts.permission |
ecstacy.alerts |
Permission needed to see staff alerts in chat |
alerts.mode |
CHAT_AND_WEB |
CHAT_AND_WEB prints staff alerts in chat. WEB_ONLY prints nothing in chat. Flags are only visible on the dashboard and in /ecstacy logs |
alerts.console |
true |
Print the flag line to the server console. Independent of mode |
alerts.webhook |
true |
Forward flags to the Discord webhook (see Integrations) |
alerts.punish |
true |
Execute punishments and per-check fail.commands. false = detection only |
mode governs the chat alert only. Console, webhook and punishment stay separate switches, so
"silent in chat but still banning" and "loud in console, nothing in chat" are both expressible.
Per check, fail.alert.mode in checks.yml overrides the global mode
(INHERIT follows it). Setting it to WEB_ONLY on one noisy check leaves every other check
alerting normally.
Note
WEB_ONLY does not weaken detection and does not stop anything reaching the dashboard. Cloud-side
nothing changes: the flag is still sent, still recorded and still counted for reputation. Only the
in-game chat line is suppressed. Staff can review flags in the dashboard or
with /ecstacy logs.
Warning
alerts.punish: false silently disables every ban, kick and configured command, on every check.
A cheater flagged at max VL will keep playing. Use it while tuning a new check, not as a
permanent setting.
Cloud
cloud:
disable-on-startup-connect-failure: false
startup-connect-timeout-ms: 30000
local-port: 49152| Key | Default | Meaning |
|---|---|---|
disable-on-startup-connect-failure |
false |
true disables the plugin if the cloud is unreachable at startup instead of running without detections |
startup-connect-timeout-ms |
30000 |
How long to wait for the first connection |
local-port |
49152 |
The local TCP source port the plugin binds, not the port it connects to. 0 lets the OS pick |
Change local-port only if 49152 is taken on the host or your firewall pins outbound source
ports. Valid range 0–65535.
Proxy
proxy:
send: false
receive: falseNetwork-wide alert sharing across a BungeeCord or Velocity network. send forwards this server's
alerts to the proxy; receive shows other servers' alerts here.
Database
Local violation storage. Violations always sync to the Ecstacy cloud regardless of this section.
database:
type: SQLITE # SQLITE, MYSQL, MARIADB
self-hosted:
enabled: false
max-violations: 1000
sqlite:
file: "ecstacy.db"
mysql:
host: "localhost"
port: 3306
database: "ecstacy"
username: "root"
password: "password"
pool-size: 10
connection-timeout: 5000self-hosted.enabled: true keeps the full history in your own database. The Ecstacy central
database then keeps only a lightweight rolling window (max 100) for the dashboard.
max-violations caps your local table. Oldest rows are dropped first.
Logging and updates
advanced:
auto-update-checks: true
log-violations: true
max-log-size: 10_000
clean-old-logs: false
log-retention-days: 30
update:
alert: true
beta: false| Key | Default | Meaning |
|---|---|---|
advanced.auto-update-checks |
true |
Pull check-configuration updates from the cloud |
advanced.log-violations |
true |
Write violations to file |
advanced.max-log-size |
10_000 |
Log file cap |
advanced.clean-old-logs |
false |
Prune old logs on startup |
advanced.log-retention-days |
30 |
Retention when pruning is on |
update.alert |
true |
Staff alert when a new build is published |
update.beta |
false |
Receive beta and canary builds before public release |
GUI edit rate limit
The checks GUI can edit values in game. This limits how fast one player may do so.
checks-edit:
rate-limit:
max: 5
window-seconds: 60Local mitigation timings
These are local timing constants read by the mitigator once it is already active. Whether
mitigation is enabled lives in checks.yml per family. See
Checks overview.
mitigation:
triggerbot:
min-delay-ms: 150
autopot:
early-expiry-ms: 7000