Skip to content

Instantly share code, notes, and snippets.

@tommyready
Last active December 28, 2023 11:58
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tommyready/fd8b25d651f8dc153b2aa213cd15bc17 to your computer and use it in GitHub Desktop.
Save tommyready/fd8b25d651f8dc153b2aa213cd15bc17 to your computer and use it in GitHub Desktop.
Using PHP to read MINECRAFT PlayerData JSON files for Player Stats
<?php
DEFINE('_MINECRAFT_SERVER_DIRECTORY_','C:\Minecraft Server Files');
<?php
// Require script config file
REQUIRE(__DIR__ . '\config\configs.php');
// Parse List of Players from White List File
$playerWhiteListFile = _MINECRAFT_SERVER_DIRECTORY_ . '\whitelist.json';
$playerWhiteListJson = json_decode( file_get_contents( $playerWhiteListFile ) , true );
foreach( $playerWhiteListJson as $player ) {
buildPlayerStats($player['uuid'],$player['name']);
}
/*
Return Array of Player Stats
@param: $uuid = Players Unique Identifier (generated by Minecraft when player logs in)
*/
function buildPlayerStats($uuid) {
// Player Stats File
$playerStatFile = _MINECRAFT_SERVER_DIRECTORY_ . '/world/stats/' . $uuid . '.json';
// Check if Stat File Exists
if(!file_exists($playerStatFile)) return false;
// Read Player Stats into an Array
$playerStats = json_decode( file_get_contents( $playerStatFile ) , true );
/* STATS TO LOOK FOR
stat.mineBlock
stat.craftItem
stat.deaths
stat.fishCaught
stat.pickup
achievement.
*/
$statsArray = array();
$killsArray = array();
$minedArray = array();
$craftArray = array();
$pickupArray = array();
$achievementsArray = array();
$deathByArray = array();
$kills = 0;
$deaths = 0;
$fishCaught = 0;
$mined = 0;
$pickedUp = 0;
$crafted = 0;
$achievements = 0;
foreach( $playerStats as $key => $stat ) {
// Log Kill
if(preg_match('/^stat.killEntity/',$key)) {
$keyArray = explode('.',$key);
$newKey = $keyArray[count($keyArray)-1];
$killsArray[$newKey] = $stat;
$kills = $kills + $stat;
continue;
}
// Log Mined Blocks
if(preg_match('/^stat.mineBlock/',$key)) {
$keyArray = explode('.',$key);
$newKey = $keyArray[count($keyArray)-1];
$minedArray[$newKey] = $stat;
$mined = $mined + $stat;
continue;
}
// Log Crafted Items
if(preg_match('/^stat.craftItem/',$key)) {
$keyArray = explode('.',$key);
$newKey = $keyArray[count($keyArray)-1];
$craftArray[$newKey] = $stat;
$crafted = $crafted + $stat;
continue;
}
// Log Blocks/Items Picked Up
if(preg_match('/^stat.pickup/',$key)) {
$keyArray = explode('.',$key);
$newKey = $keyArray[count($keyArray)-1];
$pickupArray[$newKey] = $stat;
$pickedUp = $pickedUp + $stat;
continue;
}
// Log Deaths
if(preg_match('/^stat.deaths/',$key)) {
$deaths = $stat;
continue;
}
// Log Deaths By
if(preg_match('/^stat.entityKilledBy/',$key)) {
$kayArray = explode('.',$key);
$newKey = $keyArray[count($keyArray)-1];
$deathByArray[$newKey] = $stat;
continue;
}
// Log Fish Caught
if(preg_match('/^stat.fishCaught/',$key)) {
$fishCaught = $stat;
continue;
}
// Log Achievements
if(preg_match('/^achievement./',$key)) {
$keyArray = explode('.',$key);
$newKey = $keyArray[count($keyArray)-1];
$achievementsArray[$newKey] = $stat;
$achievements++;
continue;
}
}
$statsArray['uuid'] = $uuid;
$statsArray['kills'] = $killsArray;
$statsArray['totalkills'] = $kills;
$statsArray['mined'] = $minedArray;
$statsArray['totalmined'] = $mined;
$statsArray['crafted'] = $craftArray;
$statsArray['totalcrafted'] = $crafted;
$statsArray['pickedup'] = $pickupArray;
$statsArray['totalpickedup'] = $pickedUp;
$statsArray['deaths'] = $deaths;
$statsArray['fishcaught'] = $fishCaught;
$statsArray['achievements'] = $achievementsArray;
$statsArray['totalachievements'] = $achievements;
return $statsArray;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment