{"id":122429,"date":"2026-06-07T07:46:42","date_gmt":"2026-06-07T04:46:42","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/"},"modified":"2026-06-07T07:46:42","modified_gmt":"2026-06-07T04:46:42","slug":"player-events","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/","title":{"rendered":"Player Events"},"content":{"rendered":"<p># Player Events<\/p>\n<p> ![GitHub release ](https:\/\/github.com\/ByMartrixx\/player-events\/releases\/latest)<br \/>\n![GitHub Workflow Status](https:\/\/img.shields.io\/github\/workflow\/status\/ByMartrixx\/player-events\/build)<\/p>\n<p><img src='https:\/\/i.imgur.com\/Ol1Tcf8.png' width=\"150\"><\/p>\n<p>**Note: this mod is server side only and won&#8217;t work on clients**<\/p>\n<p>A Fabric mod that executes and sends configurable commands and messages respectively on certain<br \/>\nevents triggered by a player, such as Dying, Joining a server, Killing another player, etc.<\/p>\n<p>**Since 2.2.0** Datapacks can define functions that will be executed on an event, using the corresponding function tag `#player_events:<event>`<\/p>\n<p>The config file is located in the config directory (`config\/player_events.json`) and looks like this:<\/p>\n<p>&#8220;`JSON<br \/>\n{<br \/>\n  &#8220;death&#8221;: {<br \/>\n    &#8220;actions&#8221;: [<br \/>\n      &#8220;${player} just died!&#8221;<br \/>\n    ],<br \/>\n    &#8220;broadcast_to_everyone&#8221;: true,<br \/>\n    &#8220;pick_message_randomly&#8221;: false<br \/>\n  },<br \/>\n  &#8220;first_join&#8221;: {<br \/>\n    &#8220;actions&#8221;: [<br \/>\n      &#8220;Welcome to the server ${player}! Remember to read the rules&#8221;<br \/>\n    ],<br \/>\n    &#8220;broadcast_to_everyone&#8221;: false,<br \/>\n    &#8220;pick_message_randomly&#8221;: false<br \/>\n  },<br \/>\n  &#8220;join&#8221;: {<br \/>\n    &#8220;actions&#8221;: [<br \/>\n      &#8220;Welcome ${player}&#8221;,<br \/>\n      &#8220;\/say Hello ${player}&#8221;<br \/>\n    ],<br \/>\n    &#8220;broadcast_to_everyone&#8221;: true,<br \/>\n    &#8220;pick_message_randomly&#8221;: false<br \/>\n  },<br \/>\n  &#8220;kill_entity&#8221;: {<br \/>\n    &#8220;actions&#8221;: [<br \/>\n      &#8220;${player} killed ${killedEntity}&#8221;<br \/>\n    ],<br \/>\n    &#8220;broadcast_to_everyone&#8221;: true,<br \/>\n    &#8220;pick_message_randomly&#8221;: false<br \/>\n  },<br \/>\n  &#8220;kill_player&#8221;: {<br \/>\n    &#8220;actions&#8221;: [<br \/>\n      &#8220;${player} killed ${killedPlayer}&#8221;,<br \/>\n      &#8220;F ${killedPlayer}&#8221;<br \/>\n    ],<br \/>\n    &#8220;broadcast_to_everyone&#8221;: true,<br \/>\n    &#8220;pick_message_randomly&#8221;: true<br \/>\n  },<br \/>\n  &#8220;leave&#8221;: {<br \/>\n    &#8220;actions&#8221;: [<br \/>\n      &#8220;Goodbye ${player}!&#8221;,<br \/>\n      &#8220;\/say Hope to see you soon ${player}&#8221;<br \/>\n    ],<br \/>\n    &#8220;broadcast_to_everyone&#8221;: true,<br \/>\n    &#8220;pick_message_randomly&#8221;: false<br \/>\n  },<br \/>\n  &#8220;custom_commands&#8221;: [<br \/>\n    {<br \/>\n      &#8220;command&#8221;: &#8220;\/plugins&#8221;,<br \/>\n      &#8220;actions&#8221;: [<br \/>\n        &#8220;Hey! We don&#8217;t use plugins&#8221;<br \/>\n      ],<br \/>\n      &#8220;broadcast_to_everyone&#8221;: false,<br \/>\n      &#8220;pick_message_randomly&#8221;: false<br \/>\n    },<br \/>\n    {<br \/>\n      &#8220;command&#8221;: &#8220;\/spawn&#8221;,<br \/>\n      &#8220;actions&#8221;: [<br \/>\n        &#8220;\/tp ${player} 0 64 0 0 0&#8221;<br \/>\n      ],<br \/>\n      &#8220;broadcast_to_everyone&#8221;: true,<br \/>\n      &#8220;pick_message_randomly&#8221;: false<br \/>\n    }<br \/>\n  ]<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>On the JSON file you can declare, under the `actions` array on each `<event>` object, what is going<br \/>\nto be sent and\/or executed on that event. You can also set these messages to be sent only to the<br \/>\nplayer by setting `broadcast_to_everyone` to `false`, but this won&#8217;t work with events like `leave`<br \/>\n(because the player isn&#8217;t in the server anymore).<\/p>\n<p>**Since 2.2.0** You can choose to randomly send one of the defined messages for a given event by setting `pick_message_randomly` to `true`.<\/p>\n<p>Every event has a `${player}` token, and each instance of this token will be replaced with the player<br \/>\nthat triggers the event. Other events have extra tokens that work the same way.<br \/>\nMost (if not all) tokens have properties that can be accessed with something like `${player.name}`.<br \/>\nHere is a list of all the properties:<br \/>\n&#8211; `display`<br \/>\n  Entity&#8217;s display name, the one you see in the player list\/chat. Example: &#8220;[Team blue] Tom421&#8221;<br \/>\n&#8211; `uuid`<br \/>\n  Entity&#8217;s UUID<br \/>\n&#8211; `x` `y` `z`<br \/>\n  Entity coordinates<br \/>\n&#8211; More coming soon\u2122<\/p>\n<p>**Supports color codes too!**<\/p>\n<p>Use `\/pe reload` or `\/player_events reload` to reload the mod config.<\/p>\n<p>You can use `\/pe test <event>` or `\/player_events test <event>` to test the actions on a specific<br \/>\nevent, or use `\/pe test *` to test every event.<\/p>\n<p>### 2.2.0 supported events<br \/>\n* `death` &#8211; Executed when a player dies.<br \/>\n* `first_join` &#8211; Executed when a player joins for first time.<br \/>\n* `join` &#8211; Executed when a player joins.<br \/>\n* `kill_entity` &#8211; Executed when a player kills an entity. Extra tokens:<br \/>\n    * `${killedEntity}` &#8211; the killed entity.<br \/>\n* `kill_player` &#8211; Executed when a player kills another player. Extra tokens:<br \/>\n    * `${killedPlayer}` &#8211; the killed player.<br \/>\n* `leave` &#8211; Executed when a player leaves.<br \/>\n* `custom_commands` &#8211; Custom defined events triggered by using a defined command. **Note: This event does not support datapack functions**<\/p>\n<p>Additionally, you can create simple commands (if you want a more complex command, this mod isn&#8217;t what you<br \/>\nare looking for) or listen to existing ones.<\/p>\n<p>### Troubleshooting<br \/>\nIf you get an error when initializing the server or when an action should be executed, here are<br \/>\nsteps on how to solve it.<br \/>\n&#8211; &#8220;Invalid JSON syntax in the config file&#8221;: This is most likely caused by having a command with<br \/>\n  unescaped double quotes. To fix it:<br \/>\n  1. Check what the exception says in the line below. It will indicate exactly where the error is.<br \/>\n  2. Escape any double quotes inside the action with backslashes like `&#8221;` -> `&#8221;`<br \/>\n&#8211; &#8220;Invalid escape sequence&#8221;<br \/>\n  This is caused because of an improperly escaped escape sequence like `n` or `u`. To fix it,<br \/>\n  just add a backslash before the escape sequence backslash, for example `n` -> `\\n` or `\\u` -> `\\\\u`<\/p>\n<p>## Developing<br \/>\nThis part is for mod developers that would like to use the mod api.<\/p>\n<p>### Compiling<\/p>\n<p>1. Clone or download the repository<br \/>\n2. On a command prompt run `gradlew build` to compile the mod. (If you only need the API files,<br \/>\n   you can run `gradlew api:build` instead) . You&#8217;ll find the compiled `.jar` files under<br \/>\n   `<repository>\/build\/libs` and `<repository>\/api\/build\/libs`<\/p>\n<p>### API<br \/>\n#### Adding the API as a dependency of your mod<br \/>\nAdd the following snippet to your `build.gradle`:<br \/>\n&#8220;`groovy<br \/>\nrepositories {<br \/>\n    maven {<br \/>\n        url &#8216;https:\/\/maven.bymartrixx.me&#8217;<br \/>\n    }<br \/>\n}<\/p>\n<p>dependencies {<br \/>\n    \/\/ Using the version from the gradle.properties<br \/>\n    modImplementation &#8220;me.bymartrixx.player-events:api:${project.player_events_api_version}&#8221;<\/p>\n<p>    \/\/ Directly setting the version (replace 2.1.3 with the latest release available)<br \/>\n    modImplementation &#8220;me.bymartrixx.player-events:api:2.1.3&#8221;<br \/>\n}<br \/>\n&#8220;`<br \/>\nAdd this snippet to your `gradle.properties` if you aren&#8217;t directly setting the version to the build.gradle file:<br \/>\n&#8220;`properties<br \/>\n# Replace 2.1.3 with the latest release available<br \/>\nplayer_events_api_version = 2.1.3<br \/>\n&#8220;`<\/p>\n<p>Also, add this snippet to your `fabric.mod.json` if you want your mod to depend on the api:<br \/>\n&#8220;`json<br \/>\n{<br \/>\n  &#8220;depends&#8221;: {<br \/>\n    &#8220;player_events_api&#8221;: &#8220;>=2.0.0&#8221;<br \/>\n  }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>#### Events<br \/>\n* `death` &#8211; `me.bymartrixx.playerevents.api.event.PlayerDeathCallback.EVENT`<br \/>\n* `first_join` &#8211; `me.bymartrixx.playerevents.api.event.PlayerFirstJoinCallback.EVENT`<br \/>\n* `join` &#8211; `me.bymartrixx.playerevents.api.event.PlayerJoinCallback.EVENT`<br \/>\n* `kill_entity` &#8211; `me.bymartrixx.playerevents.api.event.PlayerKillEntityCallback.EVENT`<br \/>\n* `kill_player` &#8211; `me.bymartrixx.playerevents.api.event.PlayerKillPlayerCallback.EVENT`<br \/>\n* `leave` &#8211; `me.bymartrixx.playerevents.api.event.PlayerLeaveCallback.EVENT`<br \/>\n* Command executed &#8211; `me.bymartrixx.playerevents.api.event.CommandExecutionCallback.EVENT`<\/p>\n<p>#### Note<br \/>\nThe package<br \/>\n`io.github.bymartrixx.playerevents.api` has been removed in 2.2.0.<\/p>\n<p>#### Using the events<br \/>\nExample snippet<br \/>\n&#8220;`java<br \/>\npublic class FooMod implements DedicatedServerModInitializer {<br \/>\n    public void onInitializeServer() {<br \/>\n        PlayerDeathCallback.EVENT.register((player, source) -> {<br \/>\n            \/\/ Do something<br \/>\n        });<\/p>\n<p>        PlayerKillEntityCallback.EVENT.register((player, killedEntity) -> {<br \/>\n            \/\/ Do something<br \/>\n        });<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sends a configurable message\/command when a player dies and leaves or joins the server<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"_minecraft_slug":"player-events","_minecraft_project_id":"NLx6lJPJ","_minecraft_author":"IotaBread","_minecraft_license":"MIT","_minecraft_downloads":9960,"_minecraft_follows":54,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"player-events.zip","_minecraft_size_bytes":2099042,"_minecraft_version_count":49,"_minecraft_updated_at":"2026-05-16T06:15:11.995272Z","_minecraft_date_created":"2020-10-27T15:14:15.246730Z","_minecraft_date_modified":"2023-07-04T02:19:14.721590Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/player-events","_minecraft_icon_attachment_id":0,"_minecraft_imported_at":"2026-06-07T04:46:43+00:00","_minecraft_import_hash":"b565180a1280f9316d0bc409a9f5530f","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[97,98,92],"mod_loader":[99,100],"minecraft_version":[118,119,120,46,47,48,49,50,51,52,53,54,55,56,57,36],"class_list":["post-122429","mod","type-mod","status-publish","hentry","mod_category-fabric","mod_category-quilt","mod_category-utility","mod_loader-fabric","mod_loader-quilt","minecraft_version-1-16","minecraft_version-1-16-1","minecraft_version-1-16-2","minecraft_version-1-16-3","minecraft_version-1-16-4","minecraft_version-1-16-5","minecraft_version-1-17","minecraft_version-1-17-1","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-20-1"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Player Events - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Player Events - Minecraft\" \/>\n<meta property=\"og:description\" content=\"Sends a configurable message\/command when a player dies and leaves or joins the server\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i.imgur.com\/Ol1Tcf8.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/\",\"name\":\"Player Events - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i.imgur.com\\\/Ol1Tcf8.png\",\"datePublished\":\"2026-06-07T04:46:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i.imgur.com\\\/Ol1Tcf8.png\",\"contentUrl\":\"https:\\\/\\\/i.imgur.com\\\/Ol1Tcf8.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/player-events\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Player Events\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Player Events - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/","og_locale":"en_US","og_type":"article","og_title":"Player Events - Minecraft","og_description":"Sends a configurable message\/command when a player dies and leaves or joins the server","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/","og_site_name":"Minecraft","og_image":[{"url":"https:\/\/i.imgur.com\/Ol1Tcf8.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/","name":"Player Events - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/#primaryimage"},"thumbnailUrl":"https:\/\/i.imgur.com\/Ol1Tcf8.png","datePublished":"2026-06-07T04:46:42+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/player-events\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/#primaryimage","url":"https:\/\/i.imgur.com\/Ol1Tcf8.png","contentUrl":"https:\/\/i.imgur.com\/Ol1Tcf8.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/player-events\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"Player Events"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/122429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=122429"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=122429"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=122429"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=122429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}