Kronos ⚡ Real-Time TPS Monitor & Lag Analyzer icon

Kronos ⚡ Real-Time TPS Monitor & Lag Analyzer -----

Stop guessing why your server lags. Kronos tells you exactly.



Getting Started

Drop the Kronos jar into your plugins/ folder and restart your server. Kronos will generate all config files automatically on first run.

───────────────────────────────────────────────────────────

File Structure

Code (Text):
plugins/Kronos/
├── config.yml         — Main configuration
├── lang/
│   └── en.yml         — All messages and text
├── autoactions.yml    — Automated lag responses
├── schedules.yml      — Timed performance scans
├── whitelist.yml      — Whitelisted chunks
├── data/
│   └── history.log    — TPS history log (CSV)
└── spikes/
    └── spike_*.txt    — Lag spike reports
───────────────────────────────────────────────────────────

⚡ TPS Thresholds

Kronos has four alert levels. You can configure the TPS value for each one in config.yml:

Code (Text):
tps:
  thresholds:
    notice:    19.0   # Green → slight dip
    warning:   17.0   # Yellow → degraded
    critical:  12.0   # Red → serious lag
    emergency:  5.0   # Dark red → server nearly frozen
Alerts are only sent after consecutive-samples-before-alert consecutive readings below the threshold, preventing false alarms from brief spikes.

───────────────────────────────────────────────────────────

Chunk Analysis

Kronos scores every loaded chunk based on what's inside it. Each type of problematic content adds to the score:

  • Entities over threshold → +3 per entity
  • Item drops over threshold → +4 per item
  • Hoppers over threshold → +5 per hopper
  • Comparators/Pistons/Observers → +2 each
  • Probable mob farm detected → +50 flat bonus

Thresholds for each category are configurable in config.yml under the chunks: section.

Mob Farm Detection: A chunk is flagged as a probable farm if it exceeds your mob threshold AND a single mob type makes up 60% or more of the mobs in that chunk.

───────────────────────────────────────────────────────────

⚙ Auto-Actions

Edit autoactions.yml to define automated responses. Example:

Code (Text):
autoactions:
  low-tps-warning:
    enabled: true
    trigger: TPS_BELOW
    threshold: 15.0
    cooldown-seconds: 60
    actions:
      - "broadcast: &c[!] Server TPS is low: {tps}"
      - "console: say Investigating lag..."

  spike-response:
    enabled: true
    trigger: SPIKE_DETECTED
    threshold: 0
    cooldown-seconds: 120
    actions:
      - "console: kill @e[type=item]"
      - "alert: &cLag spike detected! Auto-cleared item drops."
Available Triggers
  • TPS_BELOW — fires when TPS drops below threshold
  • TPS_ABOVE — fires when TPS recovers above threshold
  • SPIKE_DETECTED — fires when a lag spike is recorded
  • ENTITY_COUNT — fires when a chunk exceeds entity threshold
  • HOPPER_COUNT — fires when a chunk exceeds hopper threshold

Available Action Prefixes
  • console: — runs a command as console
  • broadcast: — broadcasts a message to all players
  • alert: — sends a message to players with kronos.alerts permission

Available Placeholders in Actions: {tps}, {mspt}, {world}, {chunk_x}, {chunk_z}

───────────────────────────────────────────────────────────

Scheduled Scans

Edit schedules.yml to run automated reports at set times. Example:

Code (Text):
schedules:
  daily-report:
    enabled: true
    time: "06:00"
    actions:
      - REPORT_CONSOLE
      - REPORT_DISCORD
      - REPORT_FILE
Times use 24-hour HH:mm format. Actions can be any combination of REPORT_CONSOLE, REPORT_DISCORD, and REPORT_FILE.

───────────────────────────────────────────────────────────

Discord Setup

No bot required — Kronos uses webhooks only.

  1. Go to your Discord channel → Edit Channel → Integrations → Webhooks → New Webhook
  2. Copy the webhook URL
  3. Paste it into config.yml

Code (Text):
discord:
  enabled: true
  webhook-url: 'https://discord.com/api/webhooks/YOUR/WEBHOOK'
  embed-color: 9699539
  ping-role:
    enabled: false
    role-id: ''
  daily-report:
    webhook-url: 'https://discord.com/api/webhooks/YOUR/OTHER/WEBHOOK'
  spike-reports:
    enabled: true
    webhook-url: 'https://discord.com/api/webhooks/YOUR/SPIKE/WEBHOOK'
You can use separate webhooks for general alerts, daily reports, and spike reports, or point them all at the same one.

───────────────────────────────────────────────────────────

Web Dashboard Setup

Enable the web dashboard in config.yml:

Code (Text):
web-dashboard:
  enabled: true
  port: 8080
  bind-address: '127.0.0.1'
  username: 'admin'
  password: 'yourpassword'
  refresh-interval: 5
  graph-history: 60
Then visit http://your-server-ip:8080 in your browser. If binding to 127.0.0.1, you'll need an SSH tunnel or reverse proxy (nginx/Apache) to access it externally.

Tip: Leave username and password blank to disable authentication (not recommended for public servers).

───────────────────────────────────────────────────────────

Chunk Whitelist

Stand in a chunk and run:

Code (Text):
/sla whitelist add     — Whitelist the chunk you're standing in
/sla whitelist remove  — Remove it from the whitelist
/sla whitelist         — List all whitelisted chunks
Whitelisted chunks are excluded from chunk analysis and scoring. Useful for spawn areas, admin shops, or intentional farms you don't want flagged.

───────────────────────────────────────────────────────────

PlaceholderAPI

Install PlaceholderAPI and use these placeholders anywhere that supports PAPI:

Code (Text):
%kronos_tps%        — Live TPS (e.g. 19.85)
%kronos_tps_1m%     — Paper 1-minute TPS average
%kronos_tps_5m%     — Paper 5-minute TPS average
%kronos_tps_15m%    — Paper 15-minute TPS average
%kronos_mspt%       — Milliseconds per tick
%kronos_chunks%     — Number of tracked chunks
%kronos_alerts%     — Alerts fired this session
%kronos_status%     — HEALTHY / NOTICE / WARNING / CRITICAL / EMERGENCY
───────────────────────────────────────────────────────────

❓ FAQ

Why does /sla stats show 20.00 TPS all the time?
Your server is running fine! Kronos caps TPS display at 20.00. Paper servers often report slightly above 20 internally which Kronos normalizes.

The web dashboard won't load externally.
By default it binds to 127.0.0.1 (localhost only). Change bind-address to 0.0.0.0 to expose it, and make sure your firewall allows the port. We recommend using a reverse proxy with HTTPS for security.

How do I reload Kronos without restarting?
Run /sla reload. This reloads config.yml, lang files, auto-actions, and the whitelist without a server restart.

Where are lag spike reports saved?
In plugins/Kronos/spikes/ as timestamped .txt files. You can also list them in-game with /sla spikes.

Can I translate Kronos into another language?
Yes. Copy lang/en.yml, translate it, save it as (e.g.) lang/de.yml, and set general.language: de in config.yml.
Resource Information
Author:
----------
Total Downloads: 9
First Release: Mar 1, 2026
Last Update: Mar 1, 2026
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings