getName(); if(stripos($name, "pocketmine") !== false || stripos($name, "minecraft") !== false || stripos($name, "mojang") !== false){ return KnownTranslationFactory::pocketmine_plugin_restrictedName(); } foreach($description->getCompatibleApis() as $api){ if(!VersionString::isValidBaseVersion($api)){ return KnownTranslationFactory::pocketmine_plugin_invalidAPI($api); } } if(!ApiVersion::isCompatible($this->apiVersion, $description->getCompatibleApis())){ return KnownTranslationFactory::pocketmine_plugin_incompatibleAPI(implode(", ", $description->getCompatibleApis())); } $ambiguousVersions = ApiVersion::checkAmbiguousVersions($description->getCompatibleApis()); if(count($ambiguousVersions) > 0){ return KnownTranslationFactory::pocketmine_plugin_ambiguousMinAPI(implode(", ", $ambiguousVersions)); } if(count($description->getCompatibleOperatingSystems()) > 0 && !in_array(Utils::getOS(), $description->getCompatibleOperatingSystems(), true)) { return KnownTranslationFactory::pocketmine_plugin_incompatibleOS(implode(", ", $description->getCompatibleOperatingSystems())); } if(count($pluginMcpeProtocols = $description->getCompatibleMcpeProtocols()) > 0){ $serverMcpeProtocols = [ProtocolInfo::CURRENT_PROTOCOL]; if(count(array_intersect($pluginMcpeProtocols, $serverMcpeProtocols)) === 0){ return KnownTranslationFactory::pocketmine_plugin_incompatibleProtocol(implode(", ", $pluginMcpeProtocols)); } } foreach(Utils::stringifyKeys($description->getRequiredExtensions()) as $extensionName => $versionConstrs){ if(!extension_loaded($extensionName)){ return KnownTranslationFactory::pocketmine_plugin_extensionNotLoaded($extensionName); } $gotVersion = phpversion($extensionName); if($gotVersion === false){ //extensions may set NULL as the extension version, in which case phpversion() may return false $gotVersion = "**UNKNOWN**"; } foreach($versionConstrs as $k => $constr){ // versionConstrs_loop if($constr === "*"){ continue; } if($constr === ""){ return KnownTranslationFactory::pocketmine_plugin_emptyExtensionVersionConstraint(extensionName: $extensionName, constraintIndex: "$k"); } foreach(["<=", "le", "<>", "!=", "ne", "<", "lt", "==", "=", "eq", ">=", "ge", ">", "gt"] as $comparator){ // warning: the > character should be quoted in YAML if(substr($constr, 0, strlen($comparator)) === $comparator){ $version = substr($constr, strlen($comparator)); if(!version_compare($gotVersion, $version, $comparator)){ return KnownTranslationFactory::pocketmine_plugin_incompatibleExtensionVersion(extensionName: $extensionName, extensionVersion: $gotVersion, pluginRequirement: $constr); } continue 2; // versionConstrs_loop } } return KnownTranslationFactory::pocketmine_plugin_invalidExtensionVersionConstraint(extensionName: $extensionName, versionConstraint: $constr); } } return null; } }