diff --git a/resources/locale b/resources/locale index ca7fecaf2..6f74d9449 160000 --- a/resources/locale +++ b/resources/locale @@ -1 +1 @@ -Subproject commit ca7fecaf24d8a8f9b947b69f1a8772475e03c379 +Subproject commit 6f74d9449a00f806fd78140743004d6077b1577b diff --git a/src/command/defaults/VersionCommand.php b/src/command/defaults/VersionCommand.php index 9b8616071..8bebadefb 100644 --- a/src/command/defaults/VersionCommand.php +++ b/src/command/defaults/VersionCommand.php @@ -30,10 +30,16 @@ use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\permission\DefaultPermissionNames; use pocketmine\plugin\Plugin; use pocketmine\utils\TextFormat; +use pocketmine\utils\Utils; +use pocketmine\VersionInfo; use function count; +use function function_exists; use function implode; +use function opcache_get_status; +use function sprintf; use function stripos; use function strtolower; +use const PHP_VERSION; class VersionCommand extends VanillaCommand{ @@ -53,12 +59,42 @@ class VersionCommand extends VanillaCommand{ } if(count($args) === 0){ - $sender->sendMessage(KnownTranslationFactory::pocketmine_server_info_extended( - $sender->getServer()->getName(), - $sender->getServer()->getPocketMineVersion(), - $sender->getServer()->getVersion(), + $sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_serverSoftwareName( + TextFormat::GREEN, + VersionInfo::NAME + )); + $sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_serverSoftwareVersion( + TextFormat::GREEN, + VersionInfo::getVersionObj()->getFullVersion(), + VersionInfo::getGitHash() + )); + $sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_minecraftVersion( + TextFormat::GREEN, + ProtocolInfo::MINECRAFT_VERSION_NETWORK, (string) ProtocolInfo::CURRENT_PROTOCOL )); + $sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_phpVersion(TextFormat::GREEN, PHP_VERSION)); + + $jitColor = TextFormat::GREEN; + if( + function_exists('opcache_get_status') && + ($opcacheStatus = opcache_get_status(false)) !== false && + isset($opcacheStatus["jit"]["on"]) + ){ + $jit = $opcacheStatus["jit"]; + if($jit["on"] === true){ + $jitStatus = KnownTranslationFactory::pocketmine_command_version_phpJitEnabled( + sprintf("CRTO: %s%s%s%s", $jit["opt_flags"] >> 2, $jit["opt_flags"] & 0x03, $jit["kind"], $jit["opt_level"]) + ); + $jitColor = TextFormat::YELLOW; + }else{ + $jitStatus = KnownTranslationFactory::pocketmine_command_version_phpJitDisabled(); + } + }else{ + $jitStatus = KnownTranslationFactory::pocketmine_command_version_phpJitNotSupported(); + } + $sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_phpJitStatus($jitColor, $sender->getLanguage()->translate($jitStatus))); + $sender->sendMessage(KnownTranslationFactory::pocketmine_command_version_operatingSystem(TextFormat::GREEN, Utils::getOS())); }else{ $pluginName = implode(" ", $args); $exactPlugin = $sender->getServer()->getPluginManager()->getPlugin($pluginName); diff --git a/src/lang/KnownTranslationFactory.php b/src/lang/KnownTranslationFactory.php index 78c301a3e..27fa60392 100644 --- a/src/lang/KnownTranslationFactory.php +++ b/src/lang/KnownTranslationFactory.php @@ -1124,10 +1124,72 @@ final class KnownTranslationFactory{ return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_DESCRIPTION, []); } + public static function pocketmine_command_version_header() : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_HEADER, []); + } + + public static function pocketmine_command_version_minecraftVersion(string $color, string $minecraftVersion, string $minecraftProtocolVersion) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_MINECRAFTVERSION, [ + "color" => $color, + "minecraftVersion" => $minecraftVersion, + "minecraftProtocolVersion" => $minecraftProtocolVersion, + ]); + } + public static function pocketmine_command_version_noSuchPlugin() : TranslationContainer{ return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_NOSUCHPLUGIN, []); } + public static function pocketmine_command_version_operatingSystem(string $color, string $operatingSystemName) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_OPERATINGSYSTEM, [ + "color" => $color, + "operatingSystemName" => $operatingSystemName, + ]); + } + + public static function pocketmine_command_version_phpJitDisabled() : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_PHPJITDISABLED, []); + } + + public static function pocketmine_command_version_phpJitEnabled(string $extraJitInfo) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_PHPJITENABLED, [ + "extraJitInfo" => $extraJitInfo, + ]); + } + + public static function pocketmine_command_version_phpJitNotSupported() : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_PHPJITNOTSUPPORTED, []); + } + + public static function pocketmine_command_version_phpJitStatus(string $color, string $jitStatus) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_PHPJITSTATUS, [ + "color" => $color, + "jitStatus" => $jitStatus, + ]); + } + + public static function pocketmine_command_version_phpVersion(string $color, string $phpVersion) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_PHPVERSION, [ + "color" => $color, + "phpVersion" => $phpVersion, + ]); + } + + public static function pocketmine_command_version_serverSoftwareName(string $color, string $serverSoftwareName) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_SERVERSOFTWARENAME, [ + "color" => $color, + "serverSoftwareName" => $serverSoftwareName, + ]); + } + + public static function pocketmine_command_version_serverSoftwareVersion(string $color, string $serverSoftwareVersion, string $serverGitHash) : TranslationContainer{ + return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_SERVERSOFTWAREVERSION, [ + "color" => $color, + "serverSoftwareVersion" => $serverSoftwareVersion, + "serverGitHash" => $serverGitHash, + ]); + } + public static function pocketmine_command_version_usage() : TranslationContainer{ return new TranslationContainer(KnownTranslationKeys::POCKETMINE_COMMAND_VERSION_USAGE, []); } diff --git a/src/lang/KnownTranslationKeys.php b/src/lang/KnownTranslationKeys.php index 6d5112688..3f5185e1c 100644 --- a/src/lang/KnownTranslationKeys.php +++ b/src/lang/KnownTranslationKeys.php @@ -246,7 +246,17 @@ final class KnownTranslationKeys{ public const POCKETMINE_COMMAND_UNBAN_IP_DESCRIPTION = "pocketmine.command.unban.ip.description"; public const POCKETMINE_COMMAND_UNBAN_PLAYER_DESCRIPTION = "pocketmine.command.unban.player.description"; public const POCKETMINE_COMMAND_VERSION_DESCRIPTION = "pocketmine.command.version.description"; + public const POCKETMINE_COMMAND_VERSION_HEADER = "pocketmine.command.version.header"; + public const POCKETMINE_COMMAND_VERSION_MINECRAFTVERSION = "pocketmine.command.version.minecraftVersion"; public const POCKETMINE_COMMAND_VERSION_NOSUCHPLUGIN = "pocketmine.command.version.noSuchPlugin"; + public const POCKETMINE_COMMAND_VERSION_OPERATINGSYSTEM = "pocketmine.command.version.operatingSystem"; + public const POCKETMINE_COMMAND_VERSION_PHPJITDISABLED = "pocketmine.command.version.phpJitDisabled"; + public const POCKETMINE_COMMAND_VERSION_PHPJITENABLED = "pocketmine.command.version.phpJitEnabled"; + public const POCKETMINE_COMMAND_VERSION_PHPJITNOTSUPPORTED = "pocketmine.command.version.phpJitNotSupported"; + public const POCKETMINE_COMMAND_VERSION_PHPJITSTATUS = "pocketmine.command.version.phpJitStatus"; + public const POCKETMINE_COMMAND_VERSION_PHPVERSION = "pocketmine.command.version.phpVersion"; + public const POCKETMINE_COMMAND_VERSION_SERVERSOFTWARENAME = "pocketmine.command.version.serverSoftwareName"; + public const POCKETMINE_COMMAND_VERSION_SERVERSOFTWAREVERSION = "pocketmine.command.version.serverSoftwareVersion"; public const POCKETMINE_COMMAND_VERSION_USAGE = "pocketmine.command.version.usage"; public const POCKETMINE_COMMAND_WHITELIST_DESCRIPTION = "pocketmine.command.whitelist.description"; public const POCKETMINE_CRASH_ARCHIVE = "pocketmine.crash.archive";