PocketMine-MP 5.37.4 git-07e225b0bd0d389de8a3d035fbd0ae8730a06053
Loading...
Searching...
No Matches
StatusCommand.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\command\defaults;
25
32use function count;
33use function floor;
34use function microtime;
35use function number_format;
36use function round;
37use function strval;
38
40
41 public function __construct(string $namespace, string $name){
42 parent::__construct(
43 $namespace,
44 $name,
45 l10n::pocketmine_command_status_description()
46 );
47 $this->setPermission(DefaultPermissionNames::COMMAND_STATUS);
48 }
49
50 private static function send(CommandSender $sender, Translatable $message) : void{
51 $sender->sendMessage($message->prefix(TextFormat::GOLD));
52 }
53
54 private static function formatTPS(float $tps, float $usage, string $tpsColor) : Translatable{
55 return l10n::pocketmine_command_status_tps_stat(strval($tps), strval($usage))->prefix($tpsColor);
56 }
57
58 private static function formatBandwidth(float $bytes) : Translatable{
59 //TODO: this should probably be number formatted?
60 return l10n::pocketmine_command_status_network_stat(strval(round($bytes / 1024, 2)))->prefix(TextFormat::RED);
61 }
62
63 private static function formatMemory(int $bytes) : Translatable{
64 return l10n::pocketmine_command_status_memory_stat(number_format(round(($bytes / 1024) / 1024, 2), 2))->prefix(TextFormat::RED);
65 }
66
67 public function execute(CommandSender $sender, string $commandLabel, array $args){
69
70 $server = $sender->getServer();
71 $sender->sendMessage(l10n::pocketmine_command_status_header()->format(
72 TextFormat::GREEN . "---- " . TextFormat::RESET,
73 TextFormat::GREEN . " ----" . TextFormat::RESET
74 ));
75
76 $time = (int) (microtime(true) - $server->getStartTime());
77
78 $seconds = strval($time % 60);
79 if($time >= 60){
80 $minutes = strval(floor(($time % 3600) / 60));
81 if($time >= 3600){
82 $hours = strval(floor(($time % (3600 * 24)) / 3600));
83 $message = $time >= 3600 * 24 ?
84 l10n::pocketmine_command_status_uptime_days(strval(floor($time / (3600 * 24))), $hours, $minutes, $seconds) :
85 l10n::pocketmine_command_status_uptime_hours($hours, $minutes, $seconds);
86 }else{
87 $message = l10n::pocketmine_command_status_uptime_minutes($minutes, $seconds);
88 }
89 }else{
90 $message = l10n::pocketmine_command_status_uptime_seconds($seconds);
91 }
92
93 self::send($sender, l10n::pocketmine_command_status_uptime($message->prefix(TextFormat::RED)));
94
95 $tpsColor = TextFormat::GREEN;
96 $tps = $server->getTicksPerSecond();
97 if($tps < 12){
98 $tpsColor = TextFormat::RED;
99 }elseif($tps < 17){
100 $tpsColor = TextFormat::GOLD;
101 }
102
103 self::send($sender, l10n::pocketmine_command_status_tps_current(self::formatTPS($tps, $server->getTickUsage(), $tpsColor)));
104 self::send($sender, l10n::pocketmine_command_status_tps_average(self::formatTPS($server->getTicksPerSecondAverage(), $server->getTickUsageAverage(), $tpsColor)));
105
106 $bandwidth = $server->getNetwork()->getBandwidthTracker();
107 self::send($sender, l10n::pocketmine_command_status_network_upload(self::formatBandwidth($bandwidth->getSend()->getAverageBytes())));
108 self::send($sender, l10n::pocketmine_command_status_network_download(self::formatBandwidth($bandwidth->getReceive()->getAverageBytes())));
109
110 self::send($sender, l10n::pocketmine_command_status_threads(TextFormat::RED . Process::getThreadCount()));
111
112 self::send($sender, l10n::pocketmine_command_status_memory_mainThread(self::formatMemory($mUsage[0])));
113 self::send($sender, l10n::pocketmine_command_status_memory_total(self::formatMemory($mUsage[1])));
114 self::send($sender, l10n::pocketmine_command_status_memory_virtual(self::formatMemory($mUsage[2])));
115
116 $globalLimit = $server->getMemoryManager()->getGlobalMemoryLimit();
117 if($globalLimit > 0){
118 self::send($sender, l10n::pocketmine_command_status_memory_manager(self::formatMemory($globalLimit)));
119 }
120
121 foreach($server->getWorldManager()->getWorlds() as $world){
122 $worldName = $world->getFolderName() !== $world->getDisplayName() ? " (" . $world->getDisplayName() . ")" : "";
123 $timeColor = $world->getTickRateTime() > 40 ? TextFormat::RED : TextFormat::YELLOW;
124 self::send($sender, l10n::pocketmine_command_status_world(
125 "\"{$world->getFolderName()}\"$worldName",
126 TextFormat::RED . number_format(count($world->getLoadedChunks())) . TextFormat::GREEN,
127 TextFormat::RED . number_format(count($world->getTickingChunks())) . TextFormat::GREEN,
128 TextFormat::RED . number_format(count($world->getEntities())) . TextFormat::GREEN,
129 l10n::pocketmine_command_status_world_timeStat(strval(round($world->getTickRateTime(), 2)))->prefix($timeColor)
130 ));
131 }
132
133 return true;
134 }
135}
execute(CommandSender $sender, string $commandLabel, array $args)
static getAdvancedMemoryUsage()
Definition Process.php:55