27 votes

Existe-t-il un moyen d'obtenir le dernier jar du serveur via une URL qui ne change pas ?

J'écris un script bash pour gérer une installation de serveur vanilla sur mon eeePC. Pour l'instant, j'ai utilisé http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar pour obtenir le jar de minecraft_server. Il semble que seule la version 1.5.2 du serveur soit récupérée au lieu de la version 1.6.2.

Avez-vous une idée de la façon dont je peux obtenir la dernière version stable via une url similaire ?

43voto

Emma Points 19

Instructions complètes

J'ai récemment décompilé le lanceur pour cette raison précise, afin de gérer les mises à jour automatiques de mon wrapper de serveur avec leur nouvelle convention de dénomination.

J'ai trouvé le fichier qu'ils utilisent pour savoir quelle est la version actuelle et l'URL de celle-ci :

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

Ce fichier comprend les éléments suivants (à partir de cette réponse) :

"latest": {
    "snapshot": "1.9-pre3",
    "release": "1.8.9"
},
"versions": [
    {
        "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"
    },
    ...
]

Ce fichier contient également un tableau "versions". Faites une boucle dans ce tableau pour trouver la version que vous recherchez dans le fichier id champ. Il s'agit aussi généralement de la première entrée de ce tableau, de sorte que vous pouvez l'adresser de la manière suivante versions[0] . Saisissez le url et récupère ce fichier qui contient la clé utile suivante :

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

Par conséquent, l'URL dont vous avez besoin est contenue dans downloads.server.url .

Résumé


Instructions périmées - pour la postérité seulement

Vous pouvez ensuite l'utiliser pour extrapoler la dernière version pour la version et les instantanés en utilisant ce schéma :

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

En utilisant cette méthode, vous n'avez pas besoin de télécharger le fichier jar/exe à chaque fois, juste le fichier json et ensuite, s'il a été modifié, vous pouvez récupérer le jar approprié.

3voto

Bryan Downing Points 101

Vous pouvez utiliser jsawk pour obtenir le dernier numéro de version du jar à partir de la version de Minecraft JSON :

#!/bin/bash
VER=`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

Exige :

2voto

Jeroko Points 141

Je vais même jeter mon chapeau dans le ring ! Très similaire au modèle ci-dessus, avec quelques extras.

#!/bin/bash

tmpfile=/tmp/minecrafttempfile.tmp
downloadurl="https://minecraft.net/download"
serverurl=""
loc=$([[ -n $1 ]] && echo $1 || echo "/tmp/minecraft_server.jar")

if [[ -a $loc ]]; then
        echo "$loc exists -- moving to ${loc}.old"
        mv $loc ${loc}.old
fi

echo "Grabbing minecraft download page..."

curl $downloadurl > $tmpfile

echo "Getting download URL for minecraft server..."

serverurl=`egrep -io 'https.*versions\/(.*)\/minecraft_server.\1.jar' $tmpfile`

echo "URL = "$serverurl

echo "Downloading server jar..."

wget -q -O $loc $serverurl

https://github.com/cptskyhawk/LinuxMinecraftTools

2voto

Xandaros Points 101

Voici un moyen simple et léger de l'obtenir en deux lignes de python :

from requests import get
open("minecraft_server.jar", "wb").write(get(get(get("https://launchermeta.mojang.com/mc/game/version_manifest.json").json()["versions"][0]["url"]).json()["downloads"]["server"]["url"]).content)
  1. Obtient la dernière version du manifeste de Mojang.
  2. Obtient les données de version de cette demande
  3. Récupère l'url de téléchargement du serveur à partir de cette requête
  4. Écrit dans un fichier appelé "minecraft_server.jar".

1voto

informatik01 Points 707

J'ai une configuration de serveur qui se met à jour chaque nuit avec une commande webget.exe plus tôt. Ce changement m'a amené à faire un programme qui scrape la page de téléchargement après un *server.exe et le télécharge en tant que minecraft_server.exe.

Je l'ai modifié pour qu'il prenne un paramètre "jar" afin qu'il obtienne *server.jar à la place et le télécharge en tant que minecraft_server.jar.

L'exe zippé est ici : http://halsvik.net/downloads/GetLatestMinecraftServer.zip

Si vous téléchargez le programme, exécutez-le sans aucun paramètre : GetLatestMinecraftServer.exe

Si vous voulez le fichier serveur jar à la place, utilisez : GetLatestMinecraftServer.exe jar

Le code source est le suivant :

 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(data);
            var links = Misc.GetStringsBetween(page, "<a href=\"", "\""); //Custom method to get matches

            bool match = false;
            foreach (var item in links)
            {
                if (item.ToLower().Contains("server") && item.ToLower().Contains(ext))
                {
                    var filename = "minecraft_server" +ext;
                    var fn = Path.GetFullPath(filename);
                    while (File.Exists(filename + ".old")) File.Delete(filename + ".old");
                    if (File.Exists(fn)) File.Move(fn, fn + ".old");

                    try
                    {
                        var comp = false;
                        wc.DownloadProgressChanged += (o, e) =>
                        {
                            Console.Write("#"); //Indicate something is downloading
                        };
                        wc.DownloadFileCompleted += (o, e) =>
                        {
                            comp = true;
                        };
                        wc.DownloadFileAsync(new Uri(item), filename);

                        //Wait for download to complete
                        while (!comp)
                        {
                            Console.Write("."); //Indicate time is going
                            Thread.Sleep(1000);
                        }

                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Download of " + item + " failed. " +ex.Message);
                        return;
                    }
                    Console.WriteLine("Download OK");
                    match = true;
                    break;
                }
            }

            if (!match)
            {
                Console.WriteLine("Could not find minecraft server on http://minecraft.net/download");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Something failed. " + ex.ToString());

        }
    }

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X