Last active
August 2, 2021 17:46
-
-
Save TheNewHEROBRINEX/bb5a57cd109a26762ca4212be501437f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function message { | |
echo "[*] $1" | |
} | |
message "PocketMine-MP sta per essere installato nella cartella corrente (`pwd`)" | |
read -p "Premi invio per iniziare l'installazione... | |
" | |
message "Download dei binari PHP..." | |
wget https://jenkins.pmmp.io/job/PHP-8.0-Linux-x86_64/lastSuccessfulBuild/artifact/PHP_Linux-x86_64.tar.gz | |
tar xzf PHP_Linux-x86_64.tar.gz | |
rm PHP_Linux-x86_64.tar.gz | |
message "Download dello start.sh" | |
wget https://raw.githubusercontent.com/pmmp/PocketMine-MP/master/start.sh | |
chmod u+x start.sh | |
cat << \EOF > installer.php | |
<?php | |
system("rm installer.php"); | |
for ($page = 1; ; $page++) { | |
$curl = curl_init("https://api.github.com/repos/pmmp/PocketMine-MP/releases?per_page=5000&page=$page"); | |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($curl, CURLOPT_USERAGENT, "PocketMine-MP installer by TheNewHEROBRINEX"); | |
$result = curl_exec($curl); | |
if ($result === false) { | |
error("Impossibile eseguire curl."); | |
} | |
$json_releases = json_decode($result, true); | |
if ($json_releases === null) { | |
error("Impossibile gestire la risposta di github."); | |
} | |
if ($json_releases === []) { | |
break; | |
} | |
$releases = array_merge($releases ?? [], parse_json_releases($json_releases)); | |
} | |
foreach ($releases as $id => $release) { | |
writeLine(str_pad("($id) ", 7) . $release["desc"]); | |
} | |
writeLine(); | |
$id = getInput("Quale release vuoi installare? [0]", "0", "0-" . (count($releases) - 1)); | |
if (!ctype_digit($id) or !isset($releases[(int)$id])) { | |
error("La release $id non esiste. L'ultima è stata selezionata automaticamente.", false); | |
$id = 0; | |
} | |
system("wget " . $releases[(int)$id]["download"] . " -O PocketMine-MP.phar"); | |
message("Installazione completata. Per startare il server fai ./start.sh"); | |
function parse_json_releases(array $json_releases): array { | |
foreach ($json_releases as $json_release) { | |
$release = []; | |
$release["desc"] = $json_release["name"] . " – " . trim(explode("\n", $json_release["body"])[0], "*\r\n"); | |
if (count($json_release["assets"]) === 0) { | |
continue; | |
} | |
foreach ($json_release["assets"] as $asset) { | |
if (preg_match("/\bPocketMine-MP.*\.phar\b/", $asset["name"])) { | |
$release["download"] = $asset["browser_download_url"]; | |
$releases[] = $release; | |
break; | |
} | |
} | |
} | |
return $releases; | |
} | |
//adapted from https://github.com/pmmp/PocketMine-MP/blob/master/src/pocketmine/wizard/SetupWizard.php | |
function writeLine(string $line = ""): void{ | |
echo $line . PHP_EOL; | |
} | |
function _readLine(): string{ | |
return trim((string) fgets(STDIN)); | |
} | |
function message(string $message): void{ | |
writeLine("[*] " . $message); | |
} | |
function error(string $message, bool $fatal = true): void { | |
writeLine("[!] " . $message); | |
if($fatal){ | |
exit(1); | |
} | |
} | |
function getInput(string $message, string $default = "", string $options = ""): string{ | |
$message = "[?] " . $message; | |
if($options !== "" or $default !== ""){ | |
$message .= " (" . ($options === "" ? $default : $options) . ")"; | |
} | |
$message .= ": "; | |
echo $message; | |
$input = _readLine(); | |
return $input === "" ? $default : $input; | |
} | |
EOF | |
./bin/php7/bin/php installer.php |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment