diff --git a/src/factions/command/Info.php b/src/factions/command/Info.php index 69266a9..1765a26 100644 --- a/src/factions/command/Info.php +++ b/src/factions/command/Info.php @@ -29,6 +29,8 @@ use factions\utils\Text; use localizer\Localizer; use pocketmine\command\CommandSender; +use pocketmine\utils\TextFormat; +use factions\engine\ChatEngine; class Info extends Command { @@ -73,17 +75,38 @@ public function perform(CommandSender $sender, $label, array $args) $member->sendMessage($title); $member->sendMessage(Text::parse("ID: ".$id)); $member->sendMessage(Text::parse("Description: ".$description)); - $member->sendMessage(Text::parse("Created: ".Text::ago($age))); + $member->sendMessage(Text::parse("Age: ".Text::time_elapsed($age))); $member->sendMessage(Text::parse("Flags: ".$flags)); - $member->sendMessage(Text::parse("".implode("/", array_keys($power)).": ".implode("/", array_values($power)))); + $member->sendMessage(Text::parse("".implode(TextFormat::YELLOW." / ", array_keys($power)).": ".implode(TextFormat::YELLOW."/", array_values($power)))); foreach ($relations as $rel => $factions) { - $member->sendMessage(Text::parse("Relation ".REL::getColor($rel).ucfirst($rel)."(".count($factions)."):")); + $member->sendMessage(Text::parse("Relation ".REL::getColor($rel).ucfirst($rel)." (".count($factions)."):")); if(empty($factions)) { $member->sendMessage(Text::parse("none")); } else { $member->sendMessage(Text::parse(implode(" ", array_map(function($f){return $f->getName();}, $factions)))); } } + $member->sendMessage(Text::parse("Followers Online (" . count($faction->getOnlineMembers()) . "):")); + $members = []; + foreach($faction->getOnlineMembers() as $m) { + $members[] = "".ChatEngine::getBadge($m->getRole())."".$faction->getName()." ".$m->getDisplayName(); + } + if(empty($members)) { + $members[] = "none"; + } + $member->sendMessage(Text::parse(rtrim(implode(', ', $members), ', '))); + $member->sendMessage(Text::parse("Followers Offline (" . count($faction->getOfflineMembers()) . "):")); + $members = []; + foreach($faction->getOfflineMembers() as $m) { + $members[] = "".ChatEngine::getBadge($m->getRole())."".$faction->getName()." ".$m->getDisplayName(); + } + // Text::getRelationColor(Relation::getRelationOfThatToMe($m, $member)) # Should I add this instead of showing + # All factions red? + if(empty($members)) { + $members[] = "none"; + } + $member->sendMessage(Text::parse(rtrim(implode(', ', $members), ', '))); + return true; } diff --git a/src/factions/entity/Faction.php b/src/factions/entity/Faction.php index 4d22323..6d9ddbb 100755 --- a/src/factions/entity/Faction.php +++ b/src/factions/entity/Faction.php @@ -197,7 +197,7 @@ public function getFlag(string $id): bool } /** - * @return IMember[] + * @return Member[] */ public function getOnlineMembers(): array { @@ -208,6 +208,19 @@ public function getOnlineMembers(): array return $ret; } + /** + * @return OfflineMember[] + */ + public function getOfflineMembers(): array + { + $ret = []; + foreach ($this->getMembers() as $member) { + if (!$member->isOnline()) $ret[] = $member; + } + return $ret; + } + + /* * ---------------------------------------------------------- * MEMBERS diff --git a/src/factions/manager/Plots.php b/src/factions/manager/Plots.php index 41bc3b4..eae40f3 100755 --- a/src/factions/manager/Plots.php +++ b/src/factions/manager/Plots.php @@ -75,7 +75,7 @@ public static function getOwnerId(Position $plot): string */ public static function hash(Position $pos): string { - if(!$pos->level) return md5(microtime(true)); + //if(!$pos->level) return md5(microtime(true)); return $pos->x . ":" . $pos->z . ":" . $pos->level->getName(); } diff --git a/src/factions/utils/Text.php b/src/factions/utils/Text.php index 460c2cd..ecca4f3 100755 --- a/src/factions/utils/Text.php +++ b/src/factions/utils/Text.php @@ -464,6 +464,27 @@ public static function ago(int $time): string } + public static function time_elapsed(int $secs, bool $colored = true): string { + $bit = array( + TextFormat::AQUA . ' year' => $secs / 31556926 % 12, + TextFormat::AQUA . ' week' => $secs / 604800 % 52, + TextFormat::AQUA . ' day' => $secs / 86400 % 7, + TextFormat::AQUA . ' hour' => $secs / 3600 % 24, + TextFormat::AQUA . ' minute' => $secs / 60 % 60, + TextFormat::AQUA . ' second' => $secs % 60 + ); + + foreach($bit as $k => $v){ + if($v > 1)$ret[] = TextFormat::LIGHT_PURPLE . $v . $k . 's'; + if($v == 1)$ret[] = TextFormat::LIGHT_PURPLE . $v . $k; + } + array_splice($ret, count($ret) - 1, 0, TextFormat::YELLOW . 'and'); + + $ret = join(' ', $ret); + if(!$colored) $ret = TextFormat::clean($ret); + return $ret; + } + }