Repository navigation
Connection Reports
A report is the file written by /cnt <number>. It contains everything the
server could tell about that connection, grouped into sections.
plugins/connection-verify/<file.folder>/<number>.<ext>
-
<file.folder>defaults toconnection -
<ext>istxtorjsondepending onfile.format
A connection is rejected/lost at exactly one stage, so each attempt yields exactly one number (normal quits are never counted as failures).
| Stage | Event / source | Examples |
|---|---|---|
| Successful join | PlayerJoinEvent |
a normal join |
| Pre-login | AsyncPlayerPreLoginEvent |
ban, whitelist, server full |
| Login | PlayerLoginEvent |
plugin disallows the login |
| Connection dropped | PlayerConnectionCloseEvent |
network errors, timeouts, generic disconnects after auth but before joining |
| Raw drop | server log (Log4j2 watcher) | nameless sockets logged as /<ip>:<port> lost connection: …, closed before any profile exists (e.g. "Connection failed. Please try again or contact an administrator.") |
The raw-drop stage has no Bukkit event — those connections die before a name or
profile exists — so Connection Verify reads them from the server log through a
lightweight Log4j2 appender on the root logger (toggle with
logging.network-drops). The leading / distinguishes a nameless raw drop from
a named disconnect, so a connection is never counted twice.
Limitation: a drop is numbered only if the server logs a
lost connectionline for it. A handshake closed so early that the server writes no log line at all (for example some incompatible-version cases) still cannot be observed.
| Section | Examples of fields |
|---|---|
| Capture | event, capturing thread, primary-thread flag |
| Identity | name, display/list name, UUID (+version), skin/cape texture URLs, profile signature |
| Network | IP, port, virtual host, brand, protocol, ping, view/sim distance, transfer flag |
| Client options | locale, main hand, chat & particle visibility, skin parts |
| Session | first join, first played, last login/seen, op, whitelist, ban, game mode |
| Player state | health, hunger, XP, movement, pose, air, fire, freeze, potion effects, … |
| Attributes | every applicable attribute (value + base) |
| Equipment & inventory | armor, hands, held slot, used slots, ender chest |
| Location | coordinates, facing, biome, light, chunk, respawn/death points |
| World | difficulty, weather, time, moon phase, border, counts |
| Result (failures) | login stage, result, kick message; for drops also the disconnect reason, its category and likely cause, and any exception from the log |
| Server | versions, MOTD, TPS, MSPT, op/whitelist/ban counts, worlds, plugins |
| Runtime / Environment | Java, OS, memory, GC, threads, classes, uptime |
| System / hardware | CPU load, physical & swap memory, committed virtual memory, process info, network interfaces |
| JVM details | runtime/spec versions, VM flags, JIT, memory managers & pools |
Each section can be toggled in Configuration under capture.*.
Every field is read defensively. A value that is unavailable on the running
server build is shown as (unavailable: <Reason>), and missing values as
(unknown). A single failing field never aborts the report.
-
text— an aligned, human-readable report (default). -
json— pretty-printed JSON with the same data, ideal for log pipelines / SIEMs. Setfile.format: json.
Connection numbers live in memory only. Tune records.max-in-memory and
records.expire-after-minutes in Configuration. Save a report
with /cnt while the server is still running.