diff --git a/bans.php b/bans.php
index 7f064ae..5b1a5c4 100644
--- a/bans.php
+++ b/bans.php
@@ -23,8 +23,8 @@ $headers = array("Name", "Banned By", "Reason", "Banned On", "Banned Until");
if ($player_name === null) continue;
$page->print_table_rows($row, array(
- 'Name' => $page->get_avatar($player_name),
- 'Banned By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Name' => $page->get_avatar($player_name, $row['uuid']),
+ 'Banned By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Reason' => $page->clean($row['reason']),
'Banned On' => $page->millis_to_date($row['time']),
'Banned Until' => $page->expiry($row),
diff --git a/includes/page.php b/includes/page.php
index 13f26e4..e382c7a 100644
--- a/includes/page.php
+++ b/includes/page.php
@@ -86,12 +86,17 @@ class Page {
}
/**
- * Returns an
tag representing the Minecraft avatar for a specific name.
- * @param string
+ * Returns an
tag representing the Minecraft avatar for a specific name or UUID.
+ * @param $name
+ * @param $uuid
* @return string
*/
- function get_avatar($name) {
- $src = "https://cravatar.eu/avatar/$name/25";
+ function get_avatar($name, $uuid) {
+ if ($uuid[14] === '3') {
+ // Avatars cannot be associated with offline mode UUIDs (version 3)
+ $uuid = $name;
+ }
+ $src = str_replace('$NAME', $name, str_replace('$UUID', $uuid, $this->settings->avatar_source));
if (in_array($name, $this->settings->console_aliases)) {
$src = $this->settings->console_image;
$name = $this->settings->console_name;
diff --git a/includes/settings.php b/includes/settings.php
index 7634919..7e206cf 100644
--- a/includes/settings.php
+++ b/includes/settings.php
@@ -46,6 +46,14 @@ final class Settings {
$this->console_name = "Console";
$this->console_image = "includes/img/console.png";
+ // Avatar images for all players will be fetched from this URL.
+ // Examples:
+ /* 'https://cravatar.eu/avatar/$UUID/25'
+ * 'https://crafatar.com/avatars/$UUID?size=25'
+ * 'https://minotar.net/avatar/$NAME/25'
+ */
+ $this->avatar_source = 'https://cravatar.eu/avatar/$UUID/25';
+
// The date format can be changed here.
// https://secure.php.net/manual/en/function.date.php
// Example of default: July 2, 2015, 9:19 PM
diff --git a/info.php b/info.php
index 3ea0a39..52eb10b 100644
--- a/info.php
+++ b/info.php
@@ -45,8 +45,8 @@ class BanInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
- 'Banned Player' => $page->get_avatar($player_name),
- 'Banned By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Banned Player' => $page->get_avatar($player_name, $row['uuid']),
+ 'Banned By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Ban Reason' => $page->clean($row['reason']),
'Ban Placed' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
@@ -58,8 +58,8 @@ class MuteInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
- 'Muted Player' => $page->get_avatar($player_name),
- 'Muted By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Muted Player' => $page->get_avatar($player_name, $row['uuid']),
+ 'Muted By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Mute Reason' => $page->clean($row['reason']),
'Mute Placed' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
@@ -75,8 +75,8 @@ class WarnInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
- 'Warned Player' => $page->get_avatar($player_name),
- 'Warned By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Warned Player' => $page->get_avatar($player_name, $row['uuid']),
+ 'Warned By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Warning Reason' => $page->clean($row['reason']),
'Warning Placed' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
@@ -88,8 +88,8 @@ class KickInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
- 'Kicked Player' => $page->get_avatar($player_name),
- 'Kicked By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Kicked Player' => $page->get_avatar($player_name, $row['uuid']),
+ 'Kicked By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Kick Reason' => $page->clean($row['reason']),
'Kick Date' => $page->millis_to_date($row['time']),
);
diff --git a/kicks.php b/kicks.php
index 15d1354..643631b 100644
--- a/kicks.php
+++ b/kicks.php
@@ -22,8 +22,8 @@ $headers = array("Name", "Kicked By", "Reason", "Date");
if ($player_name === null) continue;
$page->print_table_rows($row, array(
- 'Name' => $page->get_avatar($player_name),
- 'Kicked By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Name' => $page->get_avatar($player_name, $row['uuid']),
+ 'Kicked By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Reason' => $page->clean($row['reason']),
'Date' => $page->millis_to_date($row['time']),
));
diff --git a/mutes.php b/mutes.php
index 9a9de0a..33ce3aa 100644
--- a/mutes.php
+++ b/mutes.php
@@ -22,8 +22,8 @@ $headers = array("Name", "Muted By", "Reason", "Muted On", "Muted Until");
if ($player_name === null) continue;
$page->print_table_rows($row, array(
- 'Name' => $page->get_avatar($player_name),
- 'Muted By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Name' => $page->get_avatar($player_name, $row['uuid']),
+ 'Muted By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Reason' => $page->clean($row['reason']),
'Muted On' => $page->millis_to_date($row['time']),
'Muted Until' => $page->expiry($row),
diff --git a/warnings.php b/warnings.php
index d576f2b..fa0a34e 100644
--- a/warnings.php
+++ b/warnings.php
@@ -22,8 +22,8 @@ $headers = array("Name", "Warned By", "Reason", "Warned Until", "Received Warnin
if ($player_name === null) continue;
$page->print_table_rows($row, array(
- 'Name' => $page->get_avatar($player_name),
- 'Warned By' => $page->get_avatar($page->get_banner_name($row)),
+ 'Name' => $page->get_avatar($player_name, $row['uuid']),
+ 'Warned By' => $page->get_avatar($page->get_banner_name($row), $row['uuid']),
'Reason' => $page->clean($row['reason']),
'Warned Until' => $page->expiry($row),
'Received Warning?' => $row['warned'] ? "Yes" : "No",