Installation
Requirements
| Requirement | Value |
|---|---|
| Server software | Paper, Purpur, Pufferfish, Folia, Spigot |
| API version | 1.21 |
| Folia | Supported |
| Required plugin | PacketEvents |
| Outbound network | TCP to cloud.ecstacy.ac:5001 |
The full supported-version matrix and the known plugin conflicts live on the compatibility page. It is generated from the live data, so check there rather than trusting a copy.
Important
PacketEvents is a hard dependency, declared as depend in plugin.yml. If it is missing the
server will refuse to enable Ecstacy at all. This is not a soft failure you can ignore.
Install
- Download your jar from the Client Area. The download is built for your license; do not share it and do not reuse one server's jar on a license it was not issued for.
- Put the jar and PacketEvents in
plugins/. - Start the server.
- Watch the console. On a healthy start Ecstacy connects to the cloud during enable and reports it in the log.
- In game, run
/ecstacy cloudto confirm the connection.
[Ecstacy] Loading EcstacyAC v1.3.3
[Ecstacy] Connected to cloudThere is nothing to paste into a config to activate the licence.
Warning
Do not add a uuid: key to settings.yml. The identity is injected into the jar at download
time and a uuid: key in the config is ignored. Editing it does not move a licence between
servers, it just makes the file misleading.
Firewall
Ecstacy dials out; nothing needs to be exposed. Allow outbound TCP to
cloud.ecstacy.ac:5001.
If your firewall pins outbound source ports, the local port the plugin binds is configurable:
cloud:
local-port: 49152 # 0 = let the OS pick an ephemeral portThat is the port the plugin opens locally, not the port it connects to. Change it only if 49152 is already taken on the host or your firewall requires a fixed source port.
First startup behaviour
By default the plugin keeps running if it cannot reach the cloud at startup, and retries. If you would rather the plugin disable itself instead of running without detections:
cloud:
disable-on-startup-connect-failure: true
startup-connect-timeout-ms: 30000Verify
| Check | Command | Expected |
|---|---|---|
| Cloud link | /ecstacy cloud |
Connected, a ping value, a recent heartbeat |
| Checks loaded | /ecstacy checks |
The checks GUI opens with the four families |
| Alerts reach you | /ecstacy alerts |
Alerts toggle on for your account |
If any of the three is wrong, /ecstacy doctor diagnoses all of them at once and is what support
will ask for first.
When the first start does not work
| Symptom | Almost always |
|---|---|
| Server refuses to enable Ecstacy at all | PacketEvents is missing. It is a hard depend, not a soft one |
Unknown command: /ecstacy |
The plugin did not enable. Read the enable stage of the log, not the tail |
Plugin enables, /ecstacy cloud says disconnected |
Outbound TCP to cloud.ecstacy.ac:5001 is blocked. Test from the host, not from your desktop |
| Enables and connects, but nothing ever flags | Usually not a fault. See First steps for how to confirm detections are live |
UnsupportedClassVersionError |
The server is on an older Java than the jar targets |
Running more than one server on a licence
Each server gets its own download from the Client Area. The identity is baked into the jar at download time, which means:
- Copying one server's jar to a second server does not give the second server its own identity.
- There is no key to paste and no
uuid:to set. Auuid:key insettings.ymlis ignored. - Give each server a distinct
name:insettings.yml, up to 32 characters. It is what distinguishes them in alerts and in the dashboard.
Reputation, the known-cheaters list and cross-server replay playback are scoped to the licence,
so servers on the same licence share them. Whether reputation is scoped to one server or the
whole licence is switchable at runtime with /ecstacy reputation mode <LOCAL|GLOBAL>.
Updating
/ecstacy update checks for a new build and downloads it. Two settings control how you hear
about releases:
update:
alert: true # staff alert when a new build is published
beta: false # receive beta and canary builds before public releaseDetections themselves do not need a plugin update. Scoring is cloud-side, so improvements arrive
without a jar swap. advanced.auto-update-checks (on by default) is what pulls updated check
configuration down from the cloud. Full descriptions in the
settings reference.
Removing it
- Stop the server.
- Delete the jar from
plugins/. plugins/EcstacyAC/holds your configs, local violation storage and any.rplreplay clips. Keep the folder if you might come back. Dropping a jar back in resumes from it.
Nothing is written outside that folder and nothing is left in your world data.
Once the three verification rows above are green, continue with First steps.