Skip to content

Track Player Events

Player events are the foundation of understanding your server’s activity. This guide shows you how to track the most common player interactions using Hoglin.



  1. Create a class to handle all your player events:

    class PlayerEventListener(private val analytics: Hoglin) : Listener {
    // Event handlers will go here
    }
  2. Don’t forget to register your event listener in your plugin’s onEnable():

    override fun onEnable() {
    val analytics = Hoglin.Builder("<your server key>")
    .autoFlushInterval(5_000L)
    .maxBatchSize(50)
    .build()
    server.pluginManager.registerEvents(
    PlayerEventListener(analytics),
    this
    )
    }

Track when players join your server:

@EventHandler
fun onPlayerJoin(event: PlayerJoinEvent) {
analytics.track("player_join", mapOf(
"player_uuid" to event.player.uniqueId,
"first_join" to !event.player.hasPlayedBefore()
))
}

Track when players disconnect:

@EventHandler
fun onPlayerQuit(event: PlayerQuitEvent) {
analytics.track("player_quit", mapOf(
"player_uuid" to event.player.uniqueId
))
}

Track player chat activity:

@EventHandler
fun onPlayerChat(event: AsyncPlayerChatEvent) {
analytics.track("player_chat", mapOf(
"player_uuid" to event.player.uniqueId,
))
}

Track player deaths and their causes:

@EventHandler
fun onPlayerDeath(event: PlayerDeathEvent) {
analytics.track("player_death", mapOf(
"player_uuid" to event.entity.uniqueId,
"death_cause" to event.entity.lastDamageCause?.cause?.name,
))
}

Track command usage:

@EventHandler
fun onPlayerCommand(event: PlayerCommandPreprocessEvent) {
val command = event.message.split(" ")[0].removePrefix("/")
analytics.track("player_command", mapOf(
"player_uuid" to event.player.uniqueId,
"command" to command,
"arg_count" to event.message.split(" ").size - 1,
"is_op" to event.player.isOp
))
}
Note: You can also detect specific commands and send custom events that way. Think /gamemode or /ban.

For all player events, consider including:

  • player_uuid - The UUID of the player, the Hoglin dashboard uses this to automatically display usernames.
  • world - Which world the event occurred in

Now that you’re tracking player events, you might want to: