Domanda:
C'è un modo per ottenere l'ultimo jar del server tramite un URL che non cambia?
Seriouslysean
2013-07-08 23:15:55 UTC
view on stackexchange narkive permalink

Sto scrivendo uno script bash per gestire l'installazione di un server vanilla sul mio eeePC. In questo momento sto usando http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar per ottenere il jar minecraft_server. Sembra che stia ottenendo solo la versione server 1.5.2 invece della versione server 1.6.2.

Qualche idea su come posso ottenere l'ultima versione stabile tramite un URL simile?

Mojang sta cambiando la propria infrastruttura per consentire a più versioni di essere facilmente accessibili nel nuovo launcher, quindi sembra che il loro schema URL stia cambiando per supportarlo, lasciando intatti gli URL pre-1.6. Potrebbe essere necessario analizzare un URL di monitoraggio degli aggiornamenti ora per trovare l'URL della versione stabile più recente. (Tutto solo istruito a indovinare fino a quando non posso tornare alla mia installazione e guardare cosa sta facendo il nuovo launcher per estrarre gli aggiornamenti del client e vedere se questo si traduce in URL jar del server.)
Grazie per le informazioni! Ho fatto un po 'di ricerche da solo, ma ancora niente da mostrare. Ti farò sapere se scopro qualcosa.
Undici risposte:
Richard Benson
2013-07-10 22:29:35 UTC
view on stackexchange narkive permalink

Istruzioni complete

Recentemente ho decompilato il programma di avvio proprio per questo motivo, per gestire gli aggiornamenti automatici per il mio server wrapper con la loro nuova convenzione di denominazione.

Ho trovato il file che usano per capire qual è la versione corrente e l'URL ad essa:

https://launchermeta.mojang.com/mc/game/version_manifest.json

Questo file include quanto segue (a partire da questa risposta):

  "latest": {"snapshot": "1.9-pre3", "release": "1.8.9"}, " versioni ": [{" id ":" 1.13.1 "," type ":" release "," url ":" https://launchermeta.mojang.com/v1/packages/c0f1e6239a16681ffbfa68fc469038643304d5a9/1.13.1.json " , "time": "2018-08-30T09: 49: 34 + 00: 00", "releaseTime": "2018-08-22T14: 03: 42 + 00: 00"}, ...]  

Anche quel file ha un array "versioni". Fai scorrere questo per trovare la versione che stai cercando nel campo id . Di solito è anche la prima voce in questo array, quindi puoi indirizzarlo versioni [0] . Prendi il valore url e recupera il file che contiene la seguente chiave utile:

  "downloads": {"client": {"sha1": "8de235e5ec3a7fce168056ea395d21cbdec18d7c", "size": 16088559, "url": "https://launcher.mojang.com/v1/objects/8de235e5ec3a7fce168056ea395d21cbdec18d7c/client.jar"}, "server": {"sha1": "fe123682e9cb30031eae351764f63500" 33832589, "url": "https://launcher.mojang.com/v1/objects/fe123682e9cb30031eae351764f653500b7396c9/server.jar"}},  

Pertanto, l'URL di cui hai bisogno è contenuto in downloads.server.url.

Summary


Istruzioni obsolete - solo per i posteri

Che puoi quindi utilizzare per estrapolare l'ultima versione per il rilascio e le istantanee utilizzando questo schema:

  https://s3.amazonaws.com/Minecraft.Download/versions/ "+ Ver + "/ minecraft_server." + Ver + ".jar  

Utilizzando questo metodo non è necessario scaricare il file jar / exe ogni volta, solo il file json e poi se è cambiato , puoi prendere il barattolo appropriato.

+64 per la migliore risposta possibile!
Questo è esattamente il genere di cose che mi aspettavo esistesse. Buon lavoro!
ESATTAMENTE quello che stavo cercando, grazie mille!
ERRORE 403: vietato
AccessDeniedAccess DeniedBDFFB0CBC19A9EFDhTsBwKk0fJ + SFOQ6nqEVBqIMhOSQxttXnxfOOXnWtAPnbT9pgpgDWNHTVQeSt + 3xIqG6MeWbl0g = https://s3.amazownions.1iarda/
@AaronFranke sembra essere cambiato di recente ed è un po 'più coinvolto.Proverò a modificare la risposta.
Jason Cox
2013-07-11 08:37:48 UTC
view on stackexchange narkive permalink

Puoi utilizzare jsawk per estrarre l'ultimo numero di versione del jar dalla versione di Minecraft JSON:

  #! / bin / bashVER = `curl -s https: //launchermeta.mojang.com/mc/game/version_manifest.json | jsawk -n 'out (this.latest.release)' `wget https://s3.amazonaws.com/Minecraft.Download/versions/$VER/minecraft_server.$VER.jar

Richiede:

A cosa serve SpiderMonkey?
jsawk usa SpiderMonkey (interprete js) - ecco maggiori informazioni: https://github.com/micha/jsawk
jsawk sembra fantastico, dove posso trovarlo per Windows?
cptskyhawk
2013-11-05 05:18:42 UTC
view on stackexchange narkive permalink

Lancio persino il cappello sul ring! Molto simile al precedente, con alcuni extra.

  #! / Bin / bashtmpfile = / tmp / minecrafttempfile.tmpdownloadurl = "https://minecraft.net/download" serverurl = "" loc = $ ([[-n $ 1]] && echo $ 1 || echo "/tmp/minecraft_server.jar")if [[-a $ loc]]; quindi echo "$ loc esiste - passaggio a $ {loc} .old" mv $ loc $ {loc} .oldfiecho "Afferrare la pagina di download di Minecraft ..." curl $ downloadurl > $ tmpfileecho "Ottenere l'URL di download per il server Minecraft .. . "serverurl =` egrep -io 'https. * versioni \ / (. *) \ / minecraft_server. \ 1.jar' $ tmpfile`echo "URL =" $ serverurlecho "Download in corso jar del server ..." wget -q - O $ loc $ serverurl  

https://github.com/cptskyhawk/LinuxMinecraftTools

Wolf5
2013-07-10 03:58:48 UTC
view on stackexchange narkive permalink

Ho una configurazione del server che si aggiorna ogni notte con un comando webget.exe in precedenza. La modifica mi ha portato a creare un programma che raschia la pagina di download dopo un * server.exe e lo scarica come minecraft_server.exe.

L'ho modificato per inserire un parametro "jar" in modo che ottenga * server.jar invece e lo scarica come minecraft_server.jar.

L'exe zippato è qui: http://halsvik.net/downloads/GetLatestMinecraftServer.zip

Se scarichi il programma, eseguilo senza alcun parametro: GetLatestMinecraftServer.exe

Se vuoi invece il file del server jar usa: GetLatestMinecraftServer.exe jar

Il codice sorgente è questo:

  static void Main (string [] args) {try {var ext = ".exe"; if (args.Length > 0) {ext = "." + args [0]; } var wc = new System.Net.WebClient (); var url = "http://minecraft.net/download"; var data = wc.DownloadData (url); var page = Encoding.UTF8.GetString (dati); var links = Misc.GetStringsBetween (page, "<a href = \" "," \ ""); // Metodo personalizzato per ottenere corrispondenze bool match = false; foreach (var item in links) {if (item.ToLower (). Contains ("server") && item.ToLower (). Contiene (ext)) {var filename = "minecraft_server" + ext; var fn = Path.GetFullPath (nomefile); while (File.Exists (nomefile + ".old")) File.Delete (nomefile + ".old"); if (File.Exists (fn)) File.Move (fn, fn + ".old"); prova {var comp = false; wc.DownloadProgressChanged + = (o, e) = > {Console.Write ("#"); // Indica che qualcosa sta scaricando};
wc.DownloadFileCompleted + = (o, e) = > {comp = true; }; wc.DownloadFileAsync (new Uri (item), filename); // Attendi il completamento del download mentre (! Comp) {Console.Write ("."); // Indica che il tempo sta andando Thread.Sleep (1000); }} catch (eccezione ex) {Console.WriteLine ("Download di" + elemento + "non riuscito." + ex.Message); ritorno; } Console.WriteLine ("Download OK"); match = true; rompere; }} if (! match) {Console.WriteLine ("Impossibile trovare il server Minecraft su http://minecraft.net/download"); }} catch (eccezione ex) {Console.WriteLine ("Something failed." + ex.ToString ()); }}  
Sfortunatamente sto eseguendo il mio server su una macchina Linux, ma ho deciso di affrontarlo con una soluzione simile. Grazie mille per aver dedicato del tempo a scrivere questo!
Spongman
2013-08-20 09:40:17 UTC
view on stackexchange narkive permalink

ecco la mia orribile versione di sed.

meno corretta della versione di Jason, sopra. ma meno dipendenze.

  #! / bin / bashwget -qN https://launchermeta.mojang.com/mc/game/version_manifest.jsonMCVER=`sed -n -e '/ \ " ultime \ "/, /} / s /.* \" snapshot \ ": \" \ ([^ \ "] * \) \". * / \ 1 / p '< version_manifest.json`wget -N https: //s3.amazonaws.com/Minecraft.Download/versions/$MCVER/minecraft_server.$MCVER.jar  
Questo è il tipo di sceneggiatura che ho finito per scrivere! Grazie per aver dedicato del tempo per aggiungere questo alla mia domanda, è davvero utile.
Zuntaruk
2017-12-25 10:16:47 UTC
view on stackexchange narkive permalink

Per coloro che stanno guardando questo, ho anche trovato un modo utilizzando grep invece di sed per estrarre la versione utilizzando quanto segue:

grep -oP "\" release \ ": \" \ K \ d {1,2} \. \ d {1,2} \. \ d {1,2} "version_manifest.json

Il file è estratto dagli esempi precedenti.

https://launchermeta.mojang.com/mc/game/version_manifest.json

Personalmente ho trovato l'uso del comando grep sopra un po 'più pulito.

jones77
2020-01-19 01:32:08 UTC
view on stackexchange narkive permalink

Il seguente script bash usa jq & curl per:

  • scarica il file delle versioni manifest
  • estrai l'URL dell'ultimo file manifest
  • scarica il file manifest più recente
  • estrai l'URL del file jar del server
  • scarica il server.jar su minecraft_server.$version.jar
  • collega simbolicamente server.jar a minecraft_server.$version.jar

Usalo in combinazione con uno script di avvio di Minecraft che utilizza il collegamento simbolico server.jar .

  #! / usr / bin / env bash
#
imposta -o errexit

declare -r version_manifest_url = "\
https://launchermeta.mojang.com/mc/game/version_manifest.json "
dichiarare -r tmp = "/ tmp / version_manifest.json"

# Trova l'URL di download dell'ultima versione.
ultima_versione = $ (curl -Ss -o "$ tmp" "$ version_manifest_url" \
    && jq .latest.release -r "$ tmp")
latest_manifest_url = $ (cat "$ tmp" | jq -r ".versions [] \
    | seleziona (contiene ({tipo: \ "release \", id: \ "$ latest_version \"})) \
    | .url ")

# Scarica l'ultima versione solo se il nome del file di destinazione non esiste.
dichiarare -r manifest = "/ tmp / manifest. $ latest_version.json"
curl -Ss -o "$ manifest" "$ latest_manifest_url"

dichiarare -r jar_url = $ (jq -r ".downloads.server.url" "$ manifest")

echo "ultima versione: $ latest_version"
echo "manifest url: $ latest_manifest_url"
echo "URL di download: $ jar_url"

declare -r jar = "minecraft_server. $ latest_version.jar"
curl -Ss -o "$ jar" "$ jar_url"

# Simbolicamente collegamento server.jar all'ultima versione.
dichiarare -r symlink = "server.jar"
rm -f "$ collegamento simbolico"
ln -s "$ jar" "$ symlink"

 
Louhbo
2019-04-24 23:39:02 UTC
view on stackexchange narkive permalink

Questo è il mio tentativo.

  #! / bin / bash

#Pulisci vecchi file

rm / minecraft / temp / *

# Ottieni il file version_manifest da Mojang

wget -P / minecraft / temp https://launchermeta.mojang.com/mc/game/version_manifest.json

# Analizza i file version e version.json in variabili

URL = $ (jq -r '.versions [0] .url' /minecraft/temp/version_manifest.json)
VER = $ (jq -r '.versions [0] .id' /minecraft/temp/version_manifest.json)

# Ottieni il file json specifico della versione da analizzare

wget -P / minecraft / temp "$ URL"

# Aggiungi .json alla fine della versione da utilizzare per analizzare il file json

VER2 = "$ VER.json"

# Analizza il file version.json per ottenere l'URL di download del server

SERVERURL = $ (jq -r '.downloads.server.url' / minecraft / temp / $ VER2)

#Scarica il file server.jar

wget -P / minecraft / temp $ SERVERURL

# Effettua il backup del vecchio file minecraft_server.jar

mv /minecraft/minecraft_server.jar /minecraft/minecraft_server.jar.old

# Sposta il file del server scaricato nel file minecraft_server.jar nella directory di minecraft

mv /minecraft/temp/server.jar /minecraft/minecraft_server.jar

echo "Minecraft aggiornato alla versione $ VER"
 
Vincent Le Dû
2020-03-03 16:15:41 UTC
view on stackexchange narkive permalink

I miei 50ct a questo vecchio thread. Il mio obiettivo:

  • evitare le dipendenze
  • mantienilo semplice

Le mie 3 righe per scaricare l'ultima istantanea:

  #! / bin / bash
MC_VERSION_URLS = $ (curl -s https://launchermeta.mojang.com/mc/game/version_manifest.json | python -c 'import json, sys, base64; obj = json.load (sys.stdin); print obj ["versioni"] [0] ["url"] ')

MC_LATEST_SNAPSHOT = $ (curl -s $ MC_VERSION_URLS | python -c 'import json, sys, base64; obj = json.load (sys.stdin); print obj ["downloads"] ["server"] ["url"]')

wget $ MC_LATEST_SNAPSHOT
 
Michael Reilly
2020-03-27 22:23:49 UTC
view on stackexchange narkive permalink

Funziona per bedrock, modifica per Java Ed:

  url = $ (curl https://www.minecraft.net/en-us/download/server/bedrock/ | grep "linux / bedrock-server-" | egrep -o 'https?: // [^ "] + ')

echo $ url
 

Produrrà l'URL all'ultima versione.

Perth
2017-02-28 09:14:55 UTC
view on stackexchange narkive permalink

Ha colto la brillante risposta di Richard Benson e si è scatenato. https://github.com/sc-perth/BashScripts/blob/master/minecraft_updater.sh Testato funzionante sulla mia istanza DigitalOcean Ubuntu 16.04.Grazie Richard!

Lo script, per impostazione predefinita, verificherà se stai eseguendo la versione più recente e ti farà sapere.Lo scaricherà anche se specifichi l'argomento -d | --download.Installerà anche l'aggiornamento, se modifichi lo script per adattarlo al tuo ambiente & abilita questa funzione.Farà la stessa cosa anche per qualsiasi versione specificata, dopo aver convalidato la versione.Non funziona per le istantanee, solo per le versioni.

DIPENDENZE:

jq, wget Potrebbe essere necessario installarli, il resto probabilmente lo avrete.

bash, (e) grep, basename, dirname, chown, chmod, tar w / gzip, find, printf



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...