SOLVED Demande sur le serveur.dat


  • Bonjour à tous j'aimerais savoir si avec un mod on peut ajouter une adresse de serveur dans l'onglet multijoueur ? Si oui comment ?


  • @'yveslefou':

    Bonjour à tous j'aimerais savoir si avec un mod on peut ajouter une adresse de serveur dans l'onglet multijoueur ? Si oui comment ?

    Oui je croit regarde le GuiMultiplayer


  • @'yveslefou':

    Bonjour à tous j'aimerais savoir si avec un mod on peut ajouter une adresse de serveur dans l'onglet multijoueur ? Si oui comment ?

    Oui tu peux, tu dois avoir des tutos sur le forum.
    Tu en a un déjà pour mettre un raccourcie vers Teamspeak tu as juste a prendre ce code est modifier pour connecté à ton serveur.
    cadeau: https://www.minecraftforgefrance.fr/showthread.php?tid=2386


  • @'floriangabet':

    @'yveslefou':

    Bonjour à tous j'aimerais savoir si avec un mod on peut ajouter une adresse de serveur dans l'onglet multijoueur ? Si oui comment ?

    Oui tu peux, tu dois avoir des tutos sur le forum.
    Tu en a un déjà pour mettre un raccourcie vers Teamspeak tu as juste a prendre ce code est modifier pour connecté à ton serveur.
    cadeau: https://www.minecraftforgefrance.fr/showthread.php?tid=2386

    Je suis obligé de passer par un changement du gui, je peux pas juste ajouter ajouter une information dans le fichier ?


  • Honnêtement… Tu peu (enfin je connais pas le fonctionnement précis du fichier mais j'imagine qu'il lit des informations basique), mais se sera beaucoup plus compliqué.

    Modifié le Gui, ta un tuto tout prêt, tu copie/colle/adapte et c'est bon.

    Modifier le fichier il faut que tu créer une class custom qui puissent :

    • Localiser le fichier (bon courage : chemin relatif obligatoire)
    • Lire le fichier et le mettre en mémoire
    • Checker la présence ou non de ton serveur dans la liste
    • Recopier comme il se doit le fichier (si ton mod supprime la liste existante des serveurs, les gens n'en voudront pas)
    • Ajoutez éventuellement la/les lignes nécessaire pour ajoutez ton serveur

    C'est de mon point de vue beaucoup plus compliqué si tu n'y connais pas grand chose en gestion de fichier Java...


  • Ça doit être moins compliqué que ça, Minecraft doit avoir une fonction pour ajouter un serveur au fichier, faut la trouver (regarder du côté du gui qui permet d'ajouter un serveur).

  • Moddeurs confirmés Rédacteurs Administrateurs

    File serverDatFile = new File(Minecraft.getMinecraft().mcDataDir, "servers.dat");
    boolean found = false;
    NBTTagCompound serverNbt = CompressedStreamTools.read(serverDatFile);
    NBTTagList serverList = serverNbt.getTagList("servers", 10);
    for (int i = 0; i < serverList.tagCount(); ++i)
    {
        ServerData data = ServerData.getServerDataFromNBTCompound(nbttaglist.getCompoundTagAt(i)));
        if(data.serverName.equals("nom de ton serveur"))
        {
            found = true;
        }
    
    }
    if(!found)
    {
        ServerData data = new ServerData("nom de ton serveur", "ip: port");
        serverList.appendTag(serverdata.getNBTCompound());
        serverNbt.setTag("servers", serverList );
        CompressedStreamTools.safeWrite(serverNbt, serverDatFile);
    }
    

    Non, rien de compliqué.


  • @Robin4002 : Rien n'est compliqué en prog, quand tu connais les class x) Mais les class tel que ServerData ou CompressedStreamTools sont si peu utilisés que peu de monde peut y arrivé. Moi même je ne connaissais pas ces classes qui simplifie grandement la tâche ^^'


  • @'robin4002':

    File serverDatFile = new File(Minecraft.getMinecraft().mcDataDir, "servers.dat");
    boolean found = false;
    NBTTagCompound serverNbt = CompressedStreamTools.read(serverDatFile);
    NBTTagList serverList = nbttagcompound.getTagList("servers", 10);
    for (int i = 0; i < serverList.tagCount(); ++i)
    {
        ServerData data = ServerData.getServerDataFromNBTCompound(nbttaglist.getCompoundTagAt(i)));
        if(data.serverName.equals("nom de ton serveur"))
        {
            found = true;
        }
    
    }
    if(!found)
    {
        ServerData data = new ServerData("nom de ton serveur", "ip: port");
        serverList.appendTag(serverdata.getNBTCompound());
        serverNbt.setTag("servers", nbttaglist);
        CompressedStreamTools.safeWrite(serverNbt, serverDatFile);
    }
    

    Non, rien de compliqué.

    Oh merci je vais essayé cela tout de suite ^^


  • @Jodge il suffit de regarder comment fait mc dans ces cas là, c'est plus simple que de faire quelque chose à partir de 0 ^^


  • @'robin4002':

    File serverDatFile = new File(Minecraft.getMinecraft().mcDataDir, "servers.dat");
    boolean found = false;
    NBTTagCompound serverNbt = CompressedStreamTools.read(serverDatFile);
    NBTTagList serverList = nbttagcompound.getTagList("servers", 10);
    for (int i = 0; i < serverList.tagCount(); ++i)
    {
        ServerData data = ServerData.getServerDataFromNBTCompound(nbttaglist.getCompoundTagAt(i)));
        if(data.serverName.equals("nom de ton serveur"))
        {
            found = true;
        }
    
    }
    if(!found)
    {
        ServerData data = new ServerData("nom de ton serveur", "ip: port");
        serverList.appendTag(serverdata.getNBTCompound());
        serverNbt.setTag("servers", nbttaglist);
        CompressedStreamTools.safeWrite(serverNbt, serverDatFile);
    }
    

    Non, rien de compliqué.

    Pourrais tu m'expliquer s'il te plait la ligne :

    [font=monospaceNBTTagList][font=monospace serverList ][font=monospace=][font=monospace nbttagcompound][font=monospace.][font=monospacegetTagList][font=monospace(][font=monospace"servers"][font=monospace,] [font=monospace10][font=monospace);]

    [font=monospacecar je ne la comprend pas et j'ais toujours une erreur dessus.]

  • Moddeurs confirmés Rédacteurs Administrateurs

    Cela sert à obtenir la tag list nommé servers.

    Quelle est l'erreur ?


  • @'robin4002':

    Cela sert à obtenir la tag list nommé servers.

    Quelle est l'erreur ?

    L'erreur est nbttagcompound cannot be resolved et il me propose de le changer en NBTTagCompound et alors l'erreur devient : Cannot make a static reference to the non-static method getTagList(String, int) from the type NBTTagCompound

  • Moddeurs confirmés Rédacteurs Administrateurs

    remplaces par serverNbt


  • @'robin4002':

    remplaces par serverNbt

    Ah oui merci et j'ais une derniére erreur à ```java
    serverNbt.setTag("servers", nbttaglist);

  • Moddeurs confirmés Rédacteurs Administrateurs

    serverList devrait passer.


  • @'robin4002':

    serverList  devrait passer.

    non cela donne comme erreur : Default constructor cannot handle exception type IOException thrown by implicit super constructor. Must define an explicit constructor

    à CompressedStreamTools.read(serverDatFile);
    et à CompressedStreamTools.safeWrite(serverNbt, serverDatFile);

  • Moddeurs confirmés Rédacteurs Administrateurs

    il faut mettre tout le code dans un bloc try catch.


  • @'robin4002':

    il faut mettre tout le code dans un bloc try catch.

    package fr.extazilia.extaziliamod.common;
    
    import java.io.File;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.multiplayer.ServerData;
    import net.minecraft.nbt.CompressedStreamTools;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagList;
    
    public class test {
    
    File serverDatFile = new File(Minecraft.getMinecraft().mcDataDir, "servers.dat");
    boolean found = false;
    NBTTagCompound serverNbt = CompressedStreamTools.read(serverDatFile);
    NBTTagList serverList = serverNbt.getTagList("servers", 10);{
    for (int i = 0; i < serverList.tagCount(); ++i)
    {
       ServerData data = ServerData.getServerDataFromNBTCompound(serverList.getCompoundTagAt(i));
       if(data.serverName.equals("Extazilia serveur principal"))
       {
           found = true;
       }
    
    }
    if(!found)
    {
       ServerData data1 = new ServerData("Extazilia serveur principal", "ip: port");
       serverList.appendTag(data1.getNBTCompound());
       serverNbt.setTag("servers", serverList);
       CompressedStreamTools.safeWrite(serverNbt, serverDatFile);
    }
    }}
    
  • Moddeurs confirmés Rédacteurs Administrateurs

    ….

    ....

    ....

    Comment veux-tu que ce code fonctionne s'il n'est même pas à l'intérieur d'une fonction ?