CrystalCounter
Track End Crystal placements and breaks in real-time with zero lag! Built specifically for competitive PvP, Anarchy, and Crystal PvP servers, CrystalCounter delivers server-authoritative tracking, zero-impact asynchronous database handling, and an interactive stats interface for your players.
Works completely server-side—no client mods required!
Features
- Server-Authoritative Tracking: Prevents client-side spoofing, ghost counting, and fake statistics during rapid combat.
- Interactive Stats GUI: Run
/cstatsto open a sleek in-game chest menu displaying total placements, breaks, and placement-to-break ratios. - Dual Storage Engines: Out-of-the-box support for lightweight SQLite (zero setup) and high-performance MySQL for multi-server networks.
- PlaceholderAPI Integration: Display player stats directly on scoreboards, tablists, hover messages, and chat formats.
- Fully Asynchronous: Database reads, flushes, and calculations run completely off the main tick thread to keep TPS rock-solid.
Commands & Permissions
| Command | Permission | Short Description |
|---|---|---|
/cstats |
crystalcounter.stats |
Open your personal crystal statistics GUI |
/cstats <player> |
crystalcounter.stats.others |
Inspect another online or offline player's stats |
/cstats reload |
crystalcounter.reload |
Reload configuration files and database connections |
/cstats reset <player> |
crystalcounter.admin.reset |
Clear all recorded statistics for a player |
General Settings (config.yml)
Configure core tracking behavior and performance options directly in your configuration file:
| Setting | Description | Default |
|---|---|---|
database.type |
Select storage backend (SQLITE or MYSQL) |
SQLITE |
tracking.track-placements |
Count every End Crystal placed by players | true |
tracking.track-breaks |
Count every End Crystal detonated by players | true |
gui.title |
Display header title for the /cstats menu |
&d&lCrystal Statistics |
performance.cache-interval |
Time in seconds before stats flush to the database | 300 |
PlaceholderAPI Support
Expose live player data anywhere across your server setup with built-in PAPI expansions:
%crystalcounter_placed%— Returns total crystals placed by the player.%crystalcounter_broken%— Returns total crystals broken/exploded by the player.%crystalcounter_ratio%— Returns the calculated placement-to-break ratio (K/D style).
Important Advice
- Network Syncing: When using MySQL across multiple sub-servers (e.g., BungeeCord / Velocity network), ensure all instances point to the same database schema for automatic cross-server stat syncing.
- Compatibility: Native for Paper, Spigot, and Purpur on Minecraft 1.20+ running Java 21.

