"path to the input world for conversion", "backup" => "path to back up the original files", "format" => "desired output format (can be one of: " . implode(",", array_keys($writableFormats)) . ")" ]; $usageMessage = "Options:\n"; foreach($requiredOpts as $_opt => $_desc){ $usageMessage .= "\t--$_opt : $_desc\n"; } $args = getopt("", array_map(function(string $str){ return "$str:"; }, array_keys($requiredOpts))); foreach($requiredOpts as $opt => $desc){ if(!isset($args[$opt])){ die($usageMessage); } } if(!array_key_exists($args["format"], $writableFormats)){ die($usageMessage); } $inputPath = realpath($args["world"]); if($inputPath === false){ die("Cannot find input world at location: " . $args["world"]); } $backupPath = $args["backup"]; if((!@mkdir($backupPath, 0777, true) and !is_dir($backupPath)) or !is_writable($backupPath)){ die("Backup file path " . $backupPath . " is not writable (permission error or doesn't exist), aborting"); } $oldProviderClasses = WorldProviderManager::getMatchingProviders($inputPath); if(count($oldProviderClasses) === 0){ die("Unknown input world format"); } if(count($oldProviderClasses) > 1){ die("Ambiguous input world format: matched " . count($oldProviderClasses) . " (" . implode(array_keys($oldProviderClasses)) . ")"); } $oldProviderClass = array_shift($oldProviderClasses); /** @var WorldProvider $oldProvider */ $oldProvider = new $oldProviderClass($inputPath); $converter = new FormatConverter($oldProvider, $writableFormats[$args["format"]], realpath($backupPath), GlobalLogger::get()); $converter->execute();