Requirements
- Server software: Paper or Folia
1.20.1through26.2 - Java: Halt bytecode is Java 17. Host Java is 17 on 1.20.1–1.20.4, 21 on 1.20.5–1.21.x, 25 on 26.1+
- License: A paid Halt license key (product id
HALT) - Optional: PlaceholderAPI, CoreProtect, GrimAC, Vulcan, a Discord webhook
folia-supported: true). Folia 26.1.2 is the supported line. Folia 26.2 is experimental. Smoke your host before you treat 26.2 as production-proven.
No extra JARs are required for Halt to boot. Soft-depends never crash the plugin when missing.
Install Halt
- Stop the server.
- Place
Halt-1.0.0.jarin thepluginsfolder. - Start the server once so Halt writes
plugins/Halt/. - Stop the server again.
- Open
plugins/Halt/config.yml. - Set
license_keyto the key from Discord/claim HALT. - Start the server.
plugins/Halt/config.yml
/halt reload does not re-check the key. Changing the key requires a restart.
The BuiltByBit test-server zip uses Halt-1.0.0-demo.jar with DRM compiled off. That demo ignores an empty key. Invalid keys still disable Halt.
Claim your license
Join Discord and claim product idHALT (/claim HALT). Paste the generated key into config.yml before production.
The paid jar posts to https://matt-drm.vercel.app/api/verify with product HALT. Hardware identity includes OS/arch/user and http://checkip.amazonaws.com. Empty keys and YOUR_KEY_HERE fail. License-server or HTTP 5xx failures may start Halt only when a 72-hour local cache matches the current key hash.
Join Discord
Claim your license key and get support.
First checks
After the server is up, as an operator:/halt setup prints storage, Discord, MineWatch worlds, Geyser Freecam, punish-template, and current arm mode hints. First boot stays watch-only (containment.mode: off).
Arm only when you want Halt to restrict players by itself:
containment.mode then reload. Confirm with /halt status (Armed: line).
Discord webhooks
- Set
config.yml→alerts.discord: true - Set
alerts.yml→discord.enabled: trueand a validwebhook_url - Run
/halt webhook test
Storage
SQLite is the default. No extra database is required.plugins/Halt/config.yml
storage.sqlite.file must be a relative path inside the Halt data folder. Absolute paths, drive letters, .., and leading/trailing whitespace are rejected.
MySQL
Create the database and user first. Copy SQLite rows, then restart:--apply-config writes storage.type: mysql after a successful copy. Restart to use MySQL. Changing storage.type, the SQLite file, or any MySQL credential during /halt reload is rejected.
retention_days: 0 disables scheduled purge of RESOLVED and IGNORED incidents. /halt purge still removes resolved incidents (all of them when retention is 0).
Files written on first boot
Shop command-name packs live in
examples/lockdown-command-packs.yml inside the jar. Copy labels into lockdowns.yml for your shop plugins.
Support template
/halt status output and the modules plus containment sections of config.yml.