Skip to content

Commit c9eda5a

Browse files
committed
Merge branch 'minor-next' into major-next
2 parents 703fb0d + a4e1c10 commit c9eda5a

File tree

11 files changed

+311
-51
lines changed

11 files changed

+311
-51
lines changed

resources/translations/eng.ini

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ tile.respawn_anchor.respawnSet=Respawn point set
324324
tile.respawn_anchor.notValid=Your respawn anchor was out of charges, missing or obstructed
325325
326326
; -------------------- PocketMine-MP main runtime language strings, always translated server-side --------------------
327+
pocketmine.block.bed.incomplete=This bed is incomplete
327328
pocketmine.command.alias.illegal=Could not register alias '{%0}' because it contains illegal characters
328329
pocketmine.command.alias.notFound=Could not register alias '{%0}' because it contains commands that do not exist: {%1}
329330
pocketmine.command.alias.recursive=Could not register alias '{%0}' because it contains recursive commands: {%1}
@@ -352,6 +353,7 @@ pocketmine.command.error.aliasConflict={%alias} is assigned to multiple commands
352353
pocketmine.command.error.aliasConflictTip=Tip: You can use {%cmdAliasCommand} to view and edit command aliases.
353354
pocketmine.command.error.permission=You don't have permission to use the command: {%commandName}
354355
pocketmine.command.error.playerNotFound=Cannot find a player matching "{%playerName}"
356+
pocketmine.command.error.playerUserOnly=This command syntax can only be used as a player
355357
pocketmine.command.gamemode.description=Changes the player to a specific game mode
356358
pocketmine.command.gamemode.failure=Game mode change for {%playerName} failed!
357359
pocketmine.command.gamemode.unknown=Unknown game mode "{%gameModeName}"
@@ -388,6 +390,26 @@ pocketmine.command.setworldspawn.description=Sets a world's spawn point. If no c
388390
pocketmine.command.spawnpoint.description=Sets a player's spawn point
389391
pocketmine.command.spawnpoint.success=Set {%0}'s spawn point to ({%1}, {%2}, {%3})
390392
pocketmine.command.status.description=Reads back the server's performance.
393+
pocketmine.command.status.header=Server status
394+
pocketmine.command.status.memory.mainThread=Main thread memory: {%info}
395+
pocketmine.command.status.memory.manager=Maximum memory (manager): {%info}
396+
pocketmine.command.status.memory.stat={%megabytes} MB.
397+
pocketmine.command.status.memory.total=Total memory: {%info}
398+
pocketmine.command.status.memory.virtual=Total virtual memory: {%info}
399+
pocketmine.command.status.network.download=Network download: {%info}
400+
pocketmine.command.status.network.stat={%kbps} kB/s
401+
pocketmine.command.status.network.upload=Network upload: {%info}
402+
pocketmine.command.status.threads=Thread count: {%count}
403+
pocketmine.command.status.tps.average=Average TPS: {%info}
404+
pocketmine.command.status.tps.current=Current TPS: {%info}
405+
pocketmine.command.status.tps.stat={%ticksPerSecond} ({%loadPercent}%)
406+
pocketmine.command.status.uptime.days={%days} days {%hours} hours {%minutes} minutes {%seconds} seconds
407+
pocketmine.command.status.uptime.hours={%hours} hours {%minutes} minutes {%seconds} seconds
408+
pocketmine.command.status.uptime.minutes={%minutes} minutes {%seconds} seconds
409+
pocketmine.command.status.uptime.seconds={%seconds} seconds
410+
pocketmine.command.status.uptime=Uptime: {%uptime}
411+
pocketmine.command.status.world.timeStat={%milliseconds}ms
412+
pocketmine.command.status.world=World {%worldName}: {%loadedChunks} loaded chunks, {%tickingChunks} ticking chunks, {%entities} entities. Time {%timeStat}
391413
pocketmine.command.stop.description=Stops the server
392414
pocketmine.command.tell.description=Sends a private message to the given player
393415
pocketmine.command.time.description=Changes the time on each world
@@ -419,6 +441,10 @@ pocketmine.command.version.phpJitEnabled=enabled ({%extraJitInfo})
419441
pocketmine.command.version.phpJitNotSupported=not supported
420442
pocketmine.command.version.phpJitStatus=PHP JIT: {%jitStatus}
421443
pocketmine.command.version.phpVersion=PHP version: {%phpVersion}
444+
pocketmine.command.version.plugin.author=Author: {%author}
445+
pocketmine.command.version.plugin.authors=Authors: {%authors}
446+
pocketmine.command.version.plugin.header={%pluginName} version {%version}
447+
pocketmine.command.version.plugin.website=Website: {%website}
422448
pocketmine.command.version.serverSoftwareName=This server is running {%serverSoftwareName}
423449
pocketmine.command.version.serverSoftwareVersion=Server version: {%serverSoftwareVersion} (git hash: {%serverGitHash})
424450
pocketmine.command.version.usage=/version [plugin name]

src/block/Bed.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public function onInteract(Item $item, Facing $face, Vector3 $clickVector, ?Play
125125
$other = $this->getOtherHalf();
126126
$playerPos = $player->getPosition();
127127
if($other === null){
128-
$player->sendMessage(TextFormat::GRAY . "This bed is incomplete");
128+
$player->sendMessage(KnownTranslationFactory::pocketmine_block_bed_incomplete()->prefix(TextFormat::GRAY));
129129

130130
return true;
131131
}elseif($playerPos->distanceSquared($this->position) > 4 && $playerPos->distanceSquared($other->position) > 4){

src/command/defaults/SetWorldSpawnCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function execute(CommandSender $sender, string $commandLabel, array $args
5353
$world = $location->getWorld();
5454
$pos = $location->asVector3()->floor();
5555
}else{
56-
$sender->sendMessage(TextFormat::RED . "You can only perform this command as a player");
56+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_error_playerUserOnly()->prefix(TextFormat::RED));
5757

5858
return true;
5959
}

src/command/defaults/StatusCommand.php

Lines changed: 55 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
namespace pocketmine\command\defaults;
2525

2626
use pocketmine\command\CommandSender;
27-
use pocketmine\lang\KnownTranslationFactory;
27+
use pocketmine\lang\KnownTranslationFactory as l10n;
28+
use pocketmine\lang\Translatable;
2829
use pocketmine\permission\DefaultPermissionNames;
2930
use pocketmine\utils\Process;
3031
use pocketmine\utils\TextFormat;
@@ -33,85 +34,100 @@
3334
use function microtime;
3435
use function number_format;
3536
use function round;
37+
use function strval;
3638

3739
class StatusCommand extends VanillaCommand{
3840

3941
public function __construct(string $namespace, string $name){
4042
parent::__construct(
4143
$namespace,
4244
$name,
43-
KnownTranslationFactory::pocketmine_command_status_description()
45+
l10n::pocketmine_command_status_description()
4446
);
4547
$this->setPermission(DefaultPermissionNames::COMMAND_STATUS);
4648
}
4749

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+
4867
public function execute(CommandSender $sender, string $commandLabel, array $args){
4968
$mUsage = Process::getAdvancedMemoryUsage();
5069

5170
$server = $sender->getServer();
52-
$sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::RESET . "Server status" . TextFormat::GREEN . " ----");
71+
$sender->sendMessage(l10n::pocketmine_command_status_header()->format(
72+
TextFormat::GREEN . "---- " . TextFormat::RESET,
73+
TextFormat::GREEN . " ----" . TextFormat::RESET
74+
));
5375

5476
$time = (int) (microtime(true) - $server->getStartTime());
5577

56-
$seconds = $time % 60;
57-
$minutes = null;
58-
$hours = null;
59-
$days = null;
60-
78+
$seconds = strval($time % 60);
6179
if($time >= 60){
62-
$minutes = floor(($time % 3600) / 60);
80+
$minutes = strval(floor(($time % 3600) / 60));
6381
if($time >= 3600){
64-
$hours = floor(($time % (3600 * 24)) / 3600);
65-
if($time >= 3600 * 24){
66-
$days = floor($time / (3600 * 24));
67-
}
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);
6888
}
89+
}else{
90+
$message = l10n::pocketmine_command_status_uptime_seconds($seconds);
6991
}
7092

71-
$uptime = ($minutes !== null ?
72-
($hours !== null ?
73-
($days !== null ?
74-
"$days days "
75-
: "") . "$hours hours "
76-
: "") . "$minutes minutes "
77-
: "") . "$seconds seconds";
78-
79-
$sender->sendMessage(TextFormat::GOLD . "Uptime: " . TextFormat::RED . $uptime);
93+
self::send($sender, l10n::pocketmine_command_status_uptime($message->prefix(TextFormat::RED)));
8094

8195
$tpsColor = TextFormat::GREEN;
82-
if($server->getTicksPerSecond() < 12){
96+
$tps = $server->getTicksPerSecond();
97+
if($tps < 12){
8398
$tpsColor = TextFormat::RED;
84-
}elseif($server->getTicksPerSecond() < 17){
99+
}elseif($tps < 17){
85100
$tpsColor = TextFormat::GOLD;
86101
}
87102

88-
$sender->sendMessage(TextFormat::GOLD . "Current TPS: {$tpsColor}{$server->getTicksPerSecond()} ({$server->getTickUsage()}%)");
89-
$sender->sendMessage(TextFormat::GOLD . "Average TPS: {$tpsColor}{$server->getTicksPerSecondAverage()} ({$server->getTickUsageAverage()}%)");
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)));
90105

91106
$bandwidth = $server->getNetwork()->getBandwidthTracker();
92-
$sender->sendMessage(TextFormat::GOLD . "Network upload: " . TextFormat::RED . round($bandwidth->getSend()->getAverageBytes() / 1024, 2) . " kB/s");
93-
$sender->sendMessage(TextFormat::GOLD . "Network download: " . TextFormat::RED . round($bandwidth->getReceive()->getAverageBytes() / 1024, 2) . " kB/s");
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())));
94109

95-
$sender->sendMessage(TextFormat::GOLD . "Thread count: " . TextFormat::RED . Process::getThreadCount());
110+
self::send($sender, l10n::pocketmine_command_status_threads(TextFormat::RED . Process::getThreadCount()));
96111

97-
$sender->sendMessage(TextFormat::GOLD . "Main thread memory: " . TextFormat::RED . number_format(round(($mUsage[0] / 1024) / 1024, 2), 2) . " MB.");
98-
$sender->sendMessage(TextFormat::GOLD . "Total memory: " . TextFormat::RED . number_format(round(($mUsage[1] / 1024) / 1024, 2), 2) . " MB.");
99-
$sender->sendMessage(TextFormat::GOLD . "Total virtual memory: " . TextFormat::RED . number_format(round(($mUsage[2] / 1024) / 1024, 2), 2) . " MB.");
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])));
100115

101116
$globalLimit = $server->getMemoryManager()->getGlobalMemoryLimit();
102117
if($globalLimit > 0){
103-
$sender->sendMessage(TextFormat::GOLD . "Maximum memory (manager): " . TextFormat::RED . number_format(round(($globalLimit / 1024) / 1024, 2), 2) . " MB.");
118+
self::send($sender, l10n::pocketmine_command_status_memory_manager(self::formatMemory($globalLimit)));
104119
}
105120

106121
foreach($server->getWorldManager()->getWorlds() as $world){
107122
$worldName = $world->getFolderName() !== $world->getDisplayName() ? " (" . $world->getDisplayName() . ")" : "";
108123
$timeColor = $world->getTickRateTime() > 40 ? TextFormat::RED : TextFormat::YELLOW;
109-
$sender->sendMessage(TextFormat::GOLD . "World \"{$world->getFolderName()}\"$worldName: " .
110-
TextFormat::RED . number_format(count($world->getLoadedChunks())) . TextFormat::GREEN . " loaded chunks, " .
111-
TextFormat::RED . number_format(count($world->getTickingChunks())) . TextFormat::GREEN . " ticking chunks, " .
112-
TextFormat::RED . number_format(count($world->getEntities())) . TextFormat::GREEN . " entities. " .
113-
"Time $timeColor" . round($world->getTickRateTime(), 2) . "ms"
114-
);
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+
));
115131
}
116132

117133
return true;

src/command/defaults/TeleportCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public function __construct(string $namespace, string $name){
5555
private function findPlayer(CommandSender $sender, string $playerName) : ?Player{
5656
$subject = $sender->getServer()->getPlayerByPrefix($playerName);
5757
if($subject === null){
58-
$sender->sendMessage(TextFormat::RED . "Can't find player " . $playerName);
58+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_error_playerNotFound($playerName)->prefix(TextFormat::RED));
5959
return null;
6060
}
6161
return $subject;

src/command/defaults/TransferServerCommand.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use pocketmine\lang\KnownTranslationFactory;
2929
use pocketmine\permission\DefaultPermissionNames;
3030
use pocketmine\player\Player;
31+
use pocketmine\utils\TextFormat;
3132
use function count;
3233

3334
class TransferServerCommand extends VanillaCommand{
@@ -46,7 +47,7 @@ public function execute(CommandSender $sender, string $commandLabel, array $args
4647
if(count($args) < 1){
4748
throw new InvalidCommandSyntaxException();
4849
}elseif(!($sender instanceof Player)){
49-
$sender->sendMessage("This command must be executed as a player");
50+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_error_playerUserOnly()->prefix(TextFormat::RED));
5051

5152
return false;
5253
}

src/command/defaults/VanillaCommand.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,16 @@ protected function fetchPermittedPlayerTarget(
4646
//TODO: we need proper command selector support, but this one is useful and easy to hack in for now
4747
if($target !== null && $target !== "@s"){
4848
$player = $sender->getServer()->getPlayerByPrefix($target);
49+
if($player === null){
50+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_error_playerNotFound($target)->prefix(TextFormat::RED));
51+
return null;
52+
}
4953
}elseif($sender instanceof Player){
5054
$player = $sender;
5155
}else{
5256
throw new InvalidCommandSyntaxException();
5357
}
5458

55-
if($player === null){
56-
$sender->sendMessage(KnownTranslationFactory::commands_generic_player_notFound()->prefix(TextFormat::RED));
57-
return null;
58-
}
5959
//TODO: using loud testPermission here will generate misleading messages
6060
//e.g. if the sender has self permission and tries to use the command on another player, it will give them a
6161
//generic message saying that they don't have permission to use the command, which is not correct

src/command/defaults/VersionCommand.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,21 +107,24 @@ public function execute(CommandSender $sender, string $commandLabel, array $args
107107

108108
private function describeToSender(Plugin $plugin, CommandSender $sender) : void{
109109
$desc = $plugin->getDescription();
110-
$sender->sendMessage(TextFormat::DARK_GREEN . $desc->getName() . TextFormat::RESET . " version " . TextFormat::DARK_GREEN . $desc->getVersion());
110+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_plugin_header(
111+
TextFormat::DARK_GREEN . $desc->getName() . TextFormat::RESET,
112+
TextFormat::DARK_GREEN . $desc->getVersion() . TextFormat::RESET
113+
));
111114

112115
if($desc->getDescription() !== ""){
113116
$sender->sendMessage($desc->getDescription());
114117
}
115118

116119
if($desc->getWebsite() !== ""){
117-
$sender->sendMessage("Website: " . $desc->getWebsite());
120+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_plugin_website($desc->getWebsite()));
118121
}
119122

120123
if(count($authors = $desc->getAuthors()) > 0){
121124
if(count($authors) === 1){
122-
$sender->sendMessage("Author: " . implode(", ", $authors));
125+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_plugin_author(implode(", ", $authors)));
123126
}else{
124-
$sender->sendMessage("Authors: " . implode(", ", $authors));
127+
$sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_plugin_authors(implode(", ", $authors)));
125128
}
126129
}
127130
}

0 commit comments

Comments
 (0)