MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Système de nom et prénom à la place du pseudo

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8
    155 Messages 8 Publieurs 32.8k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • jglrxavpokJ Hors-ligne
      jglrxavpok Modérateurs
      dernière édition par

      Pour le GameProfile, oui

      Pour la map côté serveur, dans ton proxy serveur (par exemple), fais une map et ajoute lui du contenu lorsque tu reçois un packet pour les noms.

      Modérateur sur MFF. 
      Mon Github: http://github.com/jglrxavpok
      Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

      1 réponse Dernière réponse Répondre Citer 0
      • GabsG Hors-ligne
        Gabs
        dernière édition par robin4002

        @‘jglrxavpok’:

        Pour le GameProfile, oui

        Pour la map côté serveur, dans ton proxy serveur (par exemple), fais une map et ajoute lui du contenu lorsque tu reçois un packet pour les noms.

        Du coup ça rend ça:

        ServerProxy:

        
        package com.CSC.net.proxy;
        
        import java.io.File;
        import java.util.HashMap;
        import java.util.UUID;
        
        import com.CSC.net.properties.EnumRank;
        
        public class ServerProxy extends CommonProxy {
        
            public static final HashMap<String, String> map = new HashMap<String, String>();
        
            @Override
            public void preInit(File configFile) {
                super.preInit(configFile);
                // code
            }
        
            @Override
            public void init() {
                super.init();
            }
        }
        

        Classe gui:

        package com.CSC.net.GUI;
        
        import java.io.File;
        import java.io.IOException;
        import java.util.Date;
        import java.util.UUID;
        
        import org.lwjgl.input.Keyboard;
        
        import net.minecraft.client.Minecraft;
        import net.minecraft.client.gui.GuiButton;
        import net.minecraft.client.gui.GuiScreen;
        import net.minecraft.client.gui.GuiSelectWorld;
        import net.minecraft.client.gui.GuiTextField;
        import net.minecraft.util.EnumChatFormatting;
        import net.minecraft.util.ResourceLocation;
        
        import com.CSC.net.Main;
        import com.CSC.net.proxy.ServerProxy;
        import com.mojang.authlib.GameProfile;
        
        public class PrenomGui extends GuiScreen {
        
            private static boolean erreur;
        
            public static boolean b;
        
            private int valider;
        
            private int nom;
        
            private int prenom;
        
            public static GuiTextField text;
        
            public static GuiTextField text2;
        
            public PrenomGui() {
        
            }
        
            @Override
            public void initGui() {
        
                valider = 0;
        
                nom = 1;
        
                prenom = 2;
        
                text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64, 20);
        
                text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64, 20);
        
                text.setFocused(false);
        
                text2.setFocused(true);
        
                text.setMaxStringLength(20);
        
                text2.setMaxStringLength(20);
        
                this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40, 20, "Valider"));
        
                super.initGui();
            }
        
            @Override
            public void mouseClicked(int i, int j, int k) {
                text.mouseClicked(i, j, k);
                text2.mouseClicked(i, j, k);
                try {
                    super.mouseClicked(i, j, k);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        
            @Override
            protected void keyTyped(char typedChar, int keyCode) throws IOException {
        
                text.textboxKeyTyped(typedChar, keyCode);
                text2.textboxKeyTyped(typedChar, keyCode);
                super.keyTyped(typedChar, keyCode);
            }
        
            @Override
            protected void actionPerformed(GuiButton button) throws IOException {
        
                switch (button.id) {
                case 0:
                    if (!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("")
                            && text2.getText().length() > 3) {
                        if (!ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID()))// crash car mc
                                                                                                              // est client et
                                                                                                              // il faut du
                                                                                                              // serveur
                                                                                                              // surement /*\
                                                                                                              // Ligne 100
                        {
                            System.out.println(b);
                            b = false;
                            ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(),
                                    text2.getText() + "_" + text.getText());
                            System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID()));
                            erreur = false;
                            mc.displayGuiScreen(new GuiSelectWorld(this));
                        } else {
                            ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID());
                            System.out.println(b);
                            b = false;
                            ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(),
                                    text2.getText() + "_" + text.getText());
                            System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID()));
                            erreur = false;
                            mc.displayGuiScreen(new GuiSelectWorld(this));
                        }
                    } else if (text.getText().equals("72") && !text2.getText().equals("") && text2.getText().length() > 3) {
                        if (!ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) {
                            System.out.println(b);
                            b = false;
                            ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText());
                            erreur = false;
                            mc.displayGuiScreen(new GuiSelectWorld(this));
                        } else {
                            ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID());
                            System.out.println(b);
                            b = false;
                            ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText());
                            erreur = false;
                            mc.displayGuiScreen(new GuiSelectWorld(this));
                        }
                    } else {
                        erreur = true;
                    }
                    break;
                default:
                    erreur = false;
                    break;
                }
        
                super.actionPerformed(button);
            }
        
            @Override
            public void updateScreen() {
                super.updateScreen();
            }
        
            public void drawScreen(int mouseX, int mouseY, float partialTick) {
        
                this.drawDefaultBackground();
        
                text.drawTextBox();
                text2.drawTextBox();
        
                this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Nom", width / 2 - 80, 135, 0);
        
                this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0);
        
                super.drawScreen(mouseX, mouseY, partialTick);
        
                if (erreur) {
                    this.drawString(fontRendererObj, "§cVotre nom et/ou prénom est/sont vide ou trop court !",
                            this.width / 2 - 110, this.height / 2 - 50, 0);
                }
            }
        
            @Override
            public void onGuiClosed() {
        
            }
        }
        

        Event:

        @SubscribeEvent
        public void test(PlayerEvent.NameFormat e)
        {
            if(PrenomGui.b)
            {
                e.displayname = ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID());
                System.out.println(e.displayname);
            }
            else
            {
                PrenomGui.b = false;
            }
        }
        
        1 réponse Dernière réponse Répondre Citer 0
        • LeBossMax2L Hors-ligne
          LeBossMax2
          dernière édition par

          Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.
          Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
           - Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
           - Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.

          1 réponse Dernière réponse Répondre Citer 0
          • GabsG Hors-ligne
            Gabs
            dernière édition par

            @‘LeBossMax2’:

            Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.  
            Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
             - Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
             - Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.

            Je suis sur le menu principal donc j’enregistrer le nom côté client c’est a dire que le server proxy on laisse, je met ma map dans mon guiscreen je put donc l’id du joueur avec son nom_prénom et une fois que il se connecte au serveur j’envoie son nom_prénom par un packet au serveur c’est ça?

            1 réponse Dernière réponse Répondre Citer 0
            • LeBossMax2L Hors-ligne
              LeBossMax2
              dernière édition par

              @‘floriangabet’:

              @‘LeBossMax2’:

              Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.  
              Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
               - Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
               - Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.

              Je suis sur le menu principal donc j’enregistrer le nom côté client c’est a dire que le server proxy on laisse, je met ma map dans mon guiscreen je put donc l’id du joueur avec son nom_prénom et une fois que il se connecte au serveur j’envoie son nom_prénom par un packet au serveur c’est ça?

              Oui et non : Coté client : tu laisse le serveur proxy, tu n’a pas besoin d’une map vu que tu n’a qu’un nom à enregistrer tu met juste une variable de type String. Et ne la met pas dans ton guiscreen car quand le joueur aura fermé le gui, tu n’aura plus le nom. Il faut donc l’enregistrer quelque par comme sur le client proxy, si tu veux. ( et pas besion de l’id du joueur coté client)
              Ensuite tu envoi juste le nom_prenom par un packet quand le joueur se connecte et coté serveur, tu ajoute le nom_prenom avec l’id du joueur dans la map du serveur proxy.

              1 réponse Dernière réponse Répondre Citer 0
              • GabsG Hors-ligne
                Gabs
                dernière édition par

                @‘LeBossMax2’:

                @‘floriangabet’:

                @‘LeBossMax2’:

                Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.  
                Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
                 - Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
                 - Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.

                Je suis sur le menu principal donc j’enregistrer le nom côté client c’est a dire que le server proxy on laisse, je met ma map dans mon guiscreen je put donc l’id du joueur avec son nom_prénom et une fois que il se connecte au serveur j’envoie son nom_prénom par un packet au serveur c’est ça?

                Oui et non : Coté client : tu laisse le serveur proxy, tu n’a pas besoin d’une map vu que tu n’a qu’un nom à enregistrer tu met juste une variable de type String. Et ne la met pas dans ton guiscreen car quand le joueur aura fermé le gui, tu n’aura plus le nom. Il faut donc l’enregistrer quelque par comme sur le client proxy, si tu veux. ( et pas besion de l’id du joueur coté client)
                Ensuite tu envoi juste le nom_prenom par un packet quand le joueur se connecte et coté serveur, tu ajoute le nom_prenom avec l’id du joueur dans la map du serveur proxy.

                D’accord je vois,

                le seul truc que je comprends pas c’est: je dois utiliser obligatoirement cet event pour le changement de pseudo: PlayerEvent.NameFormat .

                Mais toi tu me dis d’envoyer côté client le string du nom_prénom quand le joueur se connecte et côté serveur ajouter le nom_prénom et l’UUID du joueur dans la map mais pour cela je dois utiliser cet event : PlayerEvent.PlayerLoggedInEvent . Comment je peux faire du coup ?

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002R Hors-ligne
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                  dernière édition par

                  Tu peux très bien faire les deux.
                  Envoyer le nom lors du login au serveur puis avec PlayerEvent.NameFormat changer le nom.

                  Je ne vois pas ce qui cause problème.

                  1 réponse Dernière réponse Répondre Citer 0
                  • GabsG Hors-ligne
                    Gabs
                    dernière édition par

                    Bon je sais pas trop se que j’ai fais dites moi si c’est presque ça ou si je suis loin:

                    Events:

                    
                    @SubscribeEvent
                    public void changedisplayname(PlayerEvent.NameFormat e)
                    {
                    if(PrenomGui.b)
                    {
                    e.displayname = ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID());
                    System.out.println(e.displayname);
                    }
                    else
                    {
                    PrenomGui.b = false;
                    }
                    
                    }
                    
                    @SubscribeEvent
                    public void onconnection(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent e)
                    {
                    
                    EntityPlayerMP playermp = (EntityPlayerMP)e.player;
                    
                    Main.network.sendTo(new PacketNameClient(ServerProxy.name), playermp);
                    }
                    
                    

                    Packets:

                    
                    package com.CSC.net.packet;
                    
                    import com.CSC.net.proxy.ServerProxy;
                    
                    import io.netty.buffer.ByteBuf;
                    import net.minecraftforge.fml.common.network.ByteBufUtils;
                    import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
                    import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
                    import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
                    import net.minecraftforge.fml.relauncher.Side;
                    import net.minecraftforge.fml.relauncher.SideOnly;
                    
                    public class PacketNameClient implements IMessage{
                    
                    private String string;
                    
                    public PacketNameClient(String s)
                    {
                    this.string = s;
                    }
                    
                    public PacketNameClient()
                    {
                    
                    }
                    
                    @Override
                    public void fromBytes(ByteBuf buf) 
                    {
                    this.string = ByteBufUtils.readUTF8String(buf);
                    }
                    
                    @Override
                    public void toBytes(ByteBuf buf) 
                    {
                    ByteBufUtils.writeUTF8String(buf, string);
                    }
                    
                    public static class Handler implements IMessageHandler <packetnameclient, imessage="">{
                    @SideOnly(Side.CLIENT)
                    @Override
                       public IMessage onMessage(PacketNameClient message, MessageContext ctx) 
                       {
                    
                    System.out.println(message.string);
                    
                    return null;
                    
                       }
                    }
                    
                    }
                    
                    
                    
                    package com.CSC.net.packet;
                    
                    import com.CSC.net.proxy.ServerProxy;
                    
                    import io.netty.buffer.ByteBuf;
                    import net.minecraftforge.fml.common.network.ByteBufUtils;
                    import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
                    import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
                    import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
                    import net.minecraftforge.fml.relauncher.Side;
                    import net.minecraftforge.fml.relauncher.SideOnly;
                    
                    public class PacketNameServer implements IMessage{
                    
                    private String string1;
                    
                    private String string2;
                    
                    public PacketNameServer(String s1, String s2)
                    {
                    this.string1 = s1;
                    this.string2 = s2;
                    }
                    
                    public PacketNameServer()
                    {
                    }
                    
                    @Override
                    public void fromBytes(ByteBuf buf) {
                    this.string1 = ByteBufUtils.readUTF8String(buf);
                    this.string2 = ByteBufUtils.readUTF8String(buf);
                    }
                    
                    @Override
                    public void toBytes(ByteBuf buf) {
                    ByteBufUtils.writeUTF8String(buf, string1);
                    ByteBufUtils.writeUTF8String(buf, string2);
                    }
                    
                    public static class Handler implements IMessageHandler <packetnameserver, imessage="">{
                    @SideOnly(Side.SERVER)
                    @Override
                       public IMessage onMessage(PacketNameServer message, MessageContext ctx) 
                       {
                    
                    ServerProxy.map.put(message.string1, message.string2);
                    
                    return null;
                    
                       }
                    }
                    
                    }
                    
                    

                    Guiscreen:

                    
                    package com.CSC.net.GUI;
                    
                    import java.io.File;
                    import java.io.IOException;
                    import java.util.Date;
                    import java.util.UUID;
                    
                    import org.lwjgl.input.Keyboard;
                    
                    import net.minecraft.client.Minecraft;
                    import net.minecraft.client.gui.GuiButton;
                    import net.minecraft.client.gui.GuiScreen;
                    import net.minecraft.client.gui.GuiSelectWorld;
                    import net.minecraft.client.gui.GuiTextField;
                    import net.minecraft.util.EnumChatFormatting;
                    import net.minecraft.util.ResourceLocation;
                    
                    import com.CSC.net.Main;
                    import com.CSC.net.packet.PacketNameServer;
                    import com.CSC.net.proxy.ServerProxy;
                    import com.mojang.authlib.GameProfile;
                    
                    public class PrenomGui extends GuiScreen {
                    
                    private static boolean erreur;
                    
                    public static boolean b;
                    
                    private int valider;
                    
                    private int nom;
                    
                    private int prenom;
                    
                    public static GuiTextField text;
                    
                    public static GuiTextField text2;
                    
                    public PrenomGui() {
                    
                    }
                    
                    @Override
                    public void initGui() {
                    
                    valider = 0;
                    
                    nom = 1;
                    
                    prenom = 2;
                    
                    text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64,
                    20);
                    
                    text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64,
                    20);
                    
                    text.setFocused(false);
                    
                    text2.setFocused(true);
                    
                    text.setMaxStringLength(20);
                    
                    text2.setMaxStringLength(20);
                    
                    this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40,
                    20, "Valider"));
                    
                    super.initGui();
                    }
                    
                    @Override
                    public void mouseClicked (int i , int j, int k) { 
                    text.mouseClicked (i, j, k); 
                    text2.mouseClicked (i, j, k); 
                    try {
                    super.mouseClicked (i, j, k);
                    } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    } 
                    } 
                    
                    @Override
                    protected void keyTyped(char typedChar, int keyCode) throws IOException {
                    
                    text.textboxKeyTyped(typedChar, keyCode);
                    text2.textboxKeyTyped(typedChar, keyCode);
                    super.keyTyped(typedChar, keyCode);
                    }
                    
                    @Override
                    protected void actionPerformed(GuiButton button) throws IOException {
                    
                    switch (button.id) {
                    case 0:
                    if (!text.getText().equals("") && text.getText().length() > 3
                    && !text2.getText().equals("")
                    && text2.getText().length() > 3) {
                    System.out.println(b);
                    b = false;
                    ServerProxy.name = text2.getText() + "_" + text.getText();
                    Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), ServerProxy.name));
                    System.out.println(ServerProxy.name);
                    erreur = false;
                    mc.displayGuiScreen(new GuiSelectWorld(this));
                    }
                    else if(text.getText().equals("72") && !text2.getText().equals("")
                    && text2.getText().length() > 3)
                    {
                    System.out.println(b);
                    b = false;
                    ServerProxy.name = text2.getText();
                    Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), ServerProxy.name));
                    System.out.println(ServerProxy.name);
                    erreur = false;
                    mc.displayGuiScreen(new GuiSelectWorld(this));
                    }
                    else {
                    erreur = true;
                    }
                    break;
                    default:
                    erreur = false;
                    break;
                    }
                    
                    super.actionPerformed(button);
                    }
                    
                    @Override
                    public void updateScreen() {
                    super.updateScreen();
                    }
                    
                    public void drawScreen(int mouseX, int mouseY, float partialTick) {
                    
                    this.drawDefaultBackground();
                    
                    text.drawTextBox();
                    text2.drawTextBox();
                    
                    this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY +"Nom", width / 2 - 80, 135, 0);
                    
                    this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0);
                    
                    super.drawScreen(mouseX, mouseY, partialTick);
                    
                    if (erreur) {
                    this.drawString(fontRendererObj,
                    "§cVotre nom et/ou prénom est/sont vide ou trop court !",
                    this.width / 2 - 110, this.height / 2 - 50, 0);
                    }
                    }
                    
                    @Override
                    public void onGuiClosed() {
                    
                    }
                    }
                    
                    

                    Registers Packets:

                    
                     network.registerMessage(PacketNameClient.Handler.class, PacketNameClient.class, 3, Side.CLIENT);
                    
                            network.registerMessage(PacketNameServer.Handler.class, PacketNameServer.class, 4, Side.SERVER);
                    
                    

                    ServerProxy:

                    
                    package com.CSC.net.proxy;
                    
                    import java.io.File;
                    import java.util.HashMap;
                    import java.util.UUID;
                    
                    import com.CSC.net.properties.EnumRank;
                    
                    public class ServerProxy extends CommonProxy{
                    
                    public static HashMap <string, string="">map = new HashMap<string, string="">();
                    
                    public static String name;
                    
                    @Override
                    public void preInit(File configFile) {
                    super.preInit(configFile);
                    //code
                    }
                    
                    @Override
                    public void init() {
                    super.init();
                    }
                    
                    }
                    
                    

                    Merci d’avance !</string,></string,></packetnameserver,></packetnameclient,>

                    1 réponse Dernière réponse Répondre Citer 0
                    • GabsG Hors-ligne
                      Gabs
                      dernière édition par

                      Help ?

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002R Hors-ligne
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                        dernière édition par

                        Je viens de faire quelque vérification, PlayerEvent.NameFormat est un event commun (client et serveur) donc ce que tu as fait actuellement ne risque pas de fonctionner.

                        Il faudrait plutôt :

                        • garder dans une variable client le pseudo changé et l’envoyer au serveur lors de la connexion (voir simplement proposer le changement de pseudo uniquement si on est sur le serveur et l’envoyer directement).
                        • sauvegarder côté serveur le pseudo dans une map de joueur + l’enregistrer dans le monde ou enregistrer directement dans le nbt du joueur (pas besoin de map alors)
                        • envoyer également au client son pseudo custom lors de la connexion.
                        1 réponse Dernière réponse Répondre Citer 1
                        • GabsG Hors-ligne
                          Gabs
                          dernière édition par

                          @‘robin4002’:

                          Je viens de faire quelque vérification, PlayerEvent.NameFormat est un event commun (client et serveur) donc ce que tu as fait actuellement ne risque pas de fonctionner.

                          Il faudrait plutôt :

                          • garder dans une variable client le pseudo changé et l’envoyer au serveur lors de la connexion (voir simplement proposer le changement de pseudo uniquement si on est sur le serveur et l’envoyer directement).
                          • sauvegarder côté serveur le pseudo dans une map de joueur + l’enregistrer dans le monde ou enregistrer directement dans le nbt du joueur (pas besoin de map alors)
                          • envoyer également au client son pseudo custom lors de la connexion.

                          Je vais faire comme tu as dis ça a l’air plus simple. “(voir simplement proposer le changement de pseudo uniquement si on est sur le serveur et l’envoyer directement)”
                          Donc j’ouvre mon gui quand je me connecte.
                          Une fois ouvert je choisis mon nom puis prénom, je valide…
                          J’envois donc un packet au serveur contenant deux string, L’UUID et le nom et le prénom espacé d’un tiré du 8 (Nom + “_” + Prénom)
                          Dans ce packet j’ajoute tout ça dans une hashmap qui se situe dans le ServerProxy.
                          L’event NameFormat récupére donc le nom et prénom du joueur via la hashmap
                          et j’ai pas fais le reste…

                          Je crash au moment de validé mon nom prénom. (au moment ou j’envois ça au serveur avec le packet)

                          Je vous passe mon gui et mon packet:

                          GUI:

                          
                          package com.CSC.net.GUI;
                          
                          import java.io.IOException;
                          
                          import com.CSC.net.Main;
                          import com.CSC.net.packet.PacketNameServer;
                          import com.CSC.net.proxy.ServerProxy;
                          
                          import net.minecraft.client.Minecraft;
                          import net.minecraft.client.gui.GuiButton;
                          import net.minecraft.client.gui.GuiScreen;
                          import net.minecraft.client.gui.GuiSelectWorld;
                          import net.minecraft.client.gui.GuiTextField;
                          import net.minecraft.util.EnumChatFormatting;
                          
                          public class GuiJoinServer extends GuiScreen
                          {
                          private static boolean erreur;
                          
                          public static boolean b;
                          
                          private int valider;
                          
                          private int nom;
                          
                          private int prenom;
                          
                          public static GuiTextField text;
                          
                          public static GuiTextField text2;
                          
                          public GuiJoinServer() {
                          
                          }
                          
                          @Override
                          public void initGui() {
                          
                          valider = 0;
                          
                          nom = 1;
                          
                          prenom = 2;
                          
                          text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64,
                          20);
                          
                          text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64,
                          20);
                          
                          text.setFocused(false);
                          
                          text2.setFocused(true);
                          
                          text.setMaxStringLength(20);
                          
                          text2.setMaxStringLength(20);
                          
                          this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40,
                          20, "Valider"));
                          
                          super.initGui();
                          }
                          
                          @Override
                          public void mouseClicked (int i , int j, int k) { 
                          text.mouseClicked (i, j, k); 
                          text2.mouseClicked (i, j, k); 
                          try {
                          super.mouseClicked (i, j, k);
                          } catch (IOException e) {
                          e.printStackTrace();
                          } 
                          } 
                          
                          @Override
                          protected void keyTyped(char typedChar, int keyCode) throws IOException {
                          
                          text.textboxKeyTyped(typedChar, keyCode);
                          text2.textboxKeyTyped(typedChar, keyCode);
                          super.keyTyped(typedChar, keyCode);
                          }
                          
                          @Override
                          protected void actionPerformed(GuiButton button) throws IOException {
                          
                          switch (button.id) {
                          case 0:
                          if (!text.getText().equals("") && text.getText().length() > 3
                          && !text2.getText().equals("")
                          && text2.getText().length() > 3) {
                          System.out.println(b);
                          b = false;
                          ServerProxy.name = text2.getText() + "_" + text.getText();
                          Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText()));
                          System.out.println(ServerProxy.name);
                          erreur = false;
                          mc.thePlayer.closeScreen();
                          }
                          // else if(text.getText().equals("72") && !text2.getText().equals("")
                          // && text2.getText().length() > 3)
                          // {
                          // System.out.println(b);
                          // b = false;
                          // ServerProxy.name = text2.getText();
                          // Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), ServerProxy.name));
                          // System.out.println(ServerProxy.name);
                          // erreur = false;
                          // mc.thePlayer.closeScreen();
                          // }
                          // else {
                          // erreur = true;
                          // }
                          break;
                          default:
                          erreur = false;
                          break;
                          }
                          
                          super.actionPerformed(button);
                          }
                          
                          @Override
                          public void updateScreen() {
                          super.updateScreen();
                          }
                          
                          public void drawScreen(int mouseX, int mouseY, float partialTick) {
                          
                          this.drawDefaultBackground();
                          
                          text.drawTextBox();
                          text2.drawTextBox();
                          
                          this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY +"Nom", width / 2 - 80, 135, 0);
                          
                          this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0);
                          
                          super.drawScreen(mouseX, mouseY, partialTick);
                          
                          if (erreur) {
                          this.drawString(fontRendererObj,
                          "§cVotre nom et/ou prénom est/sont vide ou trop court !",
                          this.width / 2 - 110, this.height / 2 - 50, 0);
                          }
                          }
                          
                          @Override
                          public void onGuiClosed() {
                          
                          }
                          }
                          
                          

                          Packet:

                          
                          package com.CSC.net.packet;
                          
                          import com.CSC.net.proxy.ServerProxy;
                          
                          import io.netty.buffer.ByteBuf;
                          import net.minecraftforge.fml.common.network.ByteBufUtils;
                          import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
                          import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
                          import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
                          import net.minecraftforge.fml.relauncher.Side;
                          import net.minecraftforge.fml.relauncher.SideOnly;
                          
                          public class PacketNameServer implements IMessage{
                          
                          private String string1;
                          
                          private String string2;
                          
                          public PacketNameServer(String s1, String s2)
                          {
                          this.string1 = s1;
                          this.string2 = s2;
                          }
                          
                          public PacketNameServer()
                          {
                          }
                          
                          @Override
                          public void fromBytes(ByteBuf buf) {
                          this.string1 = ByteBufUtils.readUTF8String(buf);
                          this.string2 = ByteBufUtils.readUTF8String(buf);
                          }
                          
                          @Override
                          public void toBytes(ByteBuf buf) {
                          ByteBufUtils.writeUTF8String(buf, string1);
                          ByteBufUtils.writeUTF8String(buf, string2);
                          }
                          
                          public static class Handler implements IMessageHandler <packetnameserver, imessage="">{
                          @SideOnly(Side.SERVER)
                          @Override
                             public IMessage onMessage(PacketNameServer message, MessageContext ctx) 
                             {
                          
                          ServerProxy.map.put(message.string1, message.string2);
                          
                          return null;
                          
                             }
                          }
                          
                          }
                          
                          

                          Crash:

                          
                          [20:25:39] [Netty Server IO #1/ERROR] [FML]: There was a critical exception handling a packet on channel csc:
                          java.lang.NoSuchMethodError: com.CSC.net.packet.PacketNameServer$Handler.onMessage(Lcom/CSC/net/packet/PacketNameServer;Lnet/minecraftforge/fml/common/network/simpleimpl/MessageContext;)Lnet/minecraftforge/fml/common/network/simpleimpl/IMessage;
                          at com.CSC.net.packet.PacketNameServer$Handler.onMessage(PacketNameServer.java:1) ~[PacketNameServer$Handler.class:?]
                          at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:37) ~[SimpleChannelHandlerWrapper.class:?]
                          at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:17) ~[SimpleChannelHandlerWrapper.class:?]
                          at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) ~[SimpleChannelInboundHandler.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) ~[DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) ~[DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[MessageToMessageDecoder.class:4.0.15.Final]
                          at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) ~[DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) ~[DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:4.0.15.Final]
                          at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:4.0.15.Final]
                          at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:88) [FMLProxyPacket.class:?]
                          at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:144) [NetworkManager.class:?]
                          at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:469) [NetworkManager.class:?]
                          at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final]
                          at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:398) [NetworkDispatcher.class:?]
                          at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:226) [NetworkDispatcher.class:?]
                          at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:49) [NetworkDispatcher.class:?]
                          at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final]
                          at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:4.0.15.Final]
                          at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:312) [LocalChannel.class:4.0.15.Final]
                          at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:44) [LocalChannel.class:4.0.15.Final]
                          at io.netty.channel.local.LocalChannel$6.run(LocalChannel.java:298) [LocalChannel$6.class:4.0.15.Final]
                          at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) [SingleThreadEventExecutor.class:4.0.15.Final]
                          at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) [NioEventLoop.class:4.0.15.Final]
                          at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:4.0.15.Final]
                          at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
                          [20:25:39] [Server thread/INFO]: floriangabet lost connection: TextComponent{text='A fatal error has occured, this connection is terminated', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null, insertion=null}}
                          [20:25:39] [Server thread/INFO]: floriangabet a quitté la partie
                          [20:25:39] [Server thread/INFO]: Stopping singleplayer server as player logged out
                          [20:25:39] [Server thread/INFO]: Stopping server
                          [20:25:39] [Server thread/INFO]: Saving players
                          [20:25:39] [Server thread/INFO]: Saving worlds
                          [20:25:39] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld
                          [20:25:39] [Server thread/INFO]: Saving chunks for level 'New World'/Nether
                          [20:25:39] [Server thread/INFO]: Saving chunks for level 'New World'/The End
                          [20:25:40] [Server thread/INFO] [FML]: Unloading dimension 0
                          [20:25:40] [Server thread/INFO] [FML]: Unloading dimension -1
                          [20:25:40] [Server thread/INFO] [FML]: Unloading dimension 1
                          [20:25:40] [Server thread/INFO] [FML]: Applying holder lookups
                          [20:25:40] [Server thread/INFO] [FML]: Holder lookups applied
                          
                          

                          Merci :)</packetnameserver,>

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002R Hors-ligne
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                            dernière édition par

                            Retires le @SideOnly(Side.SERVER)

                            1 réponse Dernière réponse Répondre Citer 0
                            • GabsG Hors-ligne
                              Gabs
                              dernière édition par

                              @‘robin4002’:

                              Retires le @SideOnly(Side.SERVER)

                              Ah ouais merci 🙂

                              Donc je suis bon je crois il me manque plus que a save ça dans le worldsaveddata.

                              Tu peux me donner un peu plus d’indice pour la worldsaved s’il te plait ?

                              En tout cas merci 😄

                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002R Hors-ligne
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                dernière édition par

                                https://www.minecraftforgefrance.fr/showthread.php?tid=2444

                                1 réponse Dernière réponse Répondre Citer 0
                                • GabsG Hors-ligne
                                  Gabs
                                  dernière édition par

                                  @‘robin4002’:

                                  https://www.minecraftforgefrance.fr/showthread.php?tid=2444

                                  Merci,
                                  C’est bien comme ça:

                                  
                                  package com.CSC.net.save;
                                  
                                  import java.util.Iterator;
                                  import java.util.Map.Entry;
                                  
                                  import com.CSC.net.Events.Events;
                                  import com.CSC.net.Events.Events.Position;
                                  import com.CSC.net.proxy.ServerProxy;
                                  
                                  import net.minecraft.nbt.NBTTagCompound;
                                  import net.minecraft.nbt.NBTTagList;
                                  import net.minecraft.world.World;
                                  import net.minecraft.world.WorldSavedData;
                                  import net.minecraft.world.storage.MapStorage;
                                  import net.minecraftforge.common.DimensionManager;
                                  
                                  public class NameSave extends WorldSavedData{
                                  
                                  public static NameSave instance;
                                  
                                  /**
                                  /* Ce constructeur est obligatoire
                                  */
                                  
                                  public static NameSave load(World w) {
                                  if(DimensionManager.getWorlds().length < 1) return null;
                                  MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); //On récupère la mapStorage de la dimension
                                  final String KEY = Events.Key; // Si vous avez choisis de faire une fonction static String. Quoiqu'il en soit, la variable KEY que nous utiliserons ici représente votre clé. Si vous utilisez un attribut static, utilisez le directement.
                                  NameSave result = (NameSave)storage.loadData(NameSave.class, KEY);//On charge nos données
                                  if (result == null) { //Si nos données n'existe pas, …
                                  result = new NameSave(KEY);// Alors on les crée ...
                                  storage.setData(KEY, result);// Et on les ajoutes à la mapStorage.
                                  }
                                  
                                  return result; //On retourne notre objet qui représente les données a sauvegarder
                                  }
                                  
                                  public NameSave(String key) {
                                  super(key);
                                  instance = this;
                                  
                                  }
                                  
                                  @Override
                                  public void readFromNBT(NBTTagCompound compound) {
                                  NBTTagList keyList = (NBTTagList)compound.getTag("keyList");
                                  for(int i = 0; i < keyList.tagCount(); i++) {
                                  NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
                                  ServerProxy.map.put(keyTag.getString("uuid"), keyTag.getString("name"));
                                  }
                                  }
                                  @Override
                                  public void writeToNBT(NBTTagCompound compound) {
                                  NBTTagList keyList = new NBTTagList();
                                  Iterator<entry<string, string="">> iterator = ServerProxy.map.entrySet().iterator();
                                  while(iterator.hasNext()) {
                                  NBTTagCompound keyTag = new NBTTagCompound();
                                  Entry <string, string="">entry = iterator.next();
                                  keyTag.setString("uuid", entry.getKey().toString());
                                  keyTag.setString("name", entry.getKey().toString());
                                  keyList.appendTag(keyTag);
                                  }
                                  compound.setTag("keyList", keyList);
                                  }
                                  
                                  }
                                  
                                  

                                  EDIT:

                                  Le markdirty génère un crash.

                                  Packet:

                                  
                                  package com.CSC.net.packet;
                                  
                                  import com.CSC.net.proxy.ServerProxy;
                                  import com.CSC.net.save.NameSave;
                                  
                                  import io.netty.buffer.ByteBuf;
                                  import net.minecraft.client.Minecraft;
                                  import net.minecraftforge.fml.common.network.ByteBufUtils;
                                  import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
                                  import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
                                  import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
                                  import net.minecraftforge.fml.relauncher.Side;
                                  import net.minecraftforge.fml.relauncher.SideOnly;
                                  
                                  public class PacketNameServer implements IMessage{
                                  
                                  private String string1;
                                  
                                  private int i;
                                  
                                  private String string2;
                                  
                                  public PacketNameServer(String s1, String s2, Integer in)
                                  {
                                  this.string1 = s1;
                                  this.string2 = s2;
                                  this.i = in;
                                  }
                                  
                                  public PacketNameServer()
                                  {
                                  }
                                  
                                  @Override
                                  public void fromBytes(ByteBuf buf) {
                                  this.string1 = ByteBufUtils.readUTF8String(buf);
                                  this.string2 = ByteBufUtils.readUTF8String(buf);
                                  this.i = buf.readInt();
                                  }
                                  
                                  @Override
                                  public void toBytes(ByteBuf buf) {
                                  ByteBufUtils.writeUTF8String(buf, string1);
                                  ByteBufUtils.writeUTF8String(buf, string2);
                                  buf.writeInt(i);
                                  }
                                  
                                  public static class Handler implements IMessageHandler <packetnameserver, imessage="">{
                                  @Override
                                     public IMessage onMessage(PacketNameServer message, MessageContext ctx) 
                                     {
                                  switch(message.i)
                                  {
                                  case 1:
                                  ServerProxy.map.put(message.string1, message.string2);
                                  NameSave.instance.markDirty(); //
                                  break;
                                  case 2:
                                  ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID());
                                  NameSave.instance.markDirty();//
                                  break;
                                  default:
                                  break;
                                  }
                                  
                                  return null;
                                  
                                     }
                                  }
                                  
                                  }
                                  
                                  

                                  Crash:

                                  
                                  [22:14:03] [Netty Server IO #1/ERROR] [FML]: SimpleChannelHandlerWrapper exception
                                  java.lang.NullPointerException
                                  at com.CSC.net.packet.PacketNameServer$Handler.onMessage(PacketNameServer.java:58) ~[PacketNameServer$Handler.class:?]
                                  at com.CSC.net.packet.PacketNameServer$Handler.onMessage(PacketNameServer.java:1) ~[PacketNameServer$Handler.class:?]
                                  at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:37) ~[SimpleChannelHandlerWrapper.class:?]
                                  at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:17) ~[SimpleChannelHandlerWrapper.class:?]
                                  at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) ~[SimpleChannelInboundHandler.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [MessageToMessageDecoder.class:4.0.15.Final]
                                  at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:4.0.15.Final]
                                  at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:4.0.15.Final]
                                  at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:88) [FMLProxyPacket.class:?]
                                  at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:144) [NetworkManager.class:?]
                                  at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:469) [NetworkManager.class:?]
                                  at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:398) [NetworkDispatcher.class:?]
                                  at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:226) [NetworkDispatcher.class:?]
                                  at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:49) [NetworkDispatcher.class:?]
                                  at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final]
                                  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:4.0.15.Final]
                                  at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:312) [LocalChannel.class:4.0.15.Final]
                                  at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:44) [LocalChannel.class:4.0.15.Final]
                                  at io.netty.channel.local.LocalChannel$6.run(LocalChannel.java:298) [LocalChannel$6.class:4.0.15.Final]
                                  at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) [SingleThreadEventExecutor.class:4.0.15.Final]
                                  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) [NioEventLoop.class:4.0.15.Final]
                                  at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:4.0.15.Final]
                                  at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
                                  
                                  

                                  Register NameSave:

                                  
                                  if(NameSave.instance != null)
                                          {
                                          NameSave.load(event.getServer().getEntityWorld());
                                          }
                                  

                                  Mon gui:

                                  
                                  package com.CSC.net.GUI;
                                  
                                  import java.io.IOException;
                                  
                                  import com.CSC.net.Main;
                                  import com.CSC.net.packet.PacketNameServer;
                                  import com.CSC.net.proxy.ServerProxy;
                                  import com.CSC.net.save.NameSave;
                                  
                                  import net.minecraft.client.Minecraft;
                                  import net.minecraft.client.gui.GuiButton;
                                  import net.minecraft.client.gui.GuiScreen;
                                  import net.minecraft.client.gui.GuiSelectWorld;
                                  import net.minecraft.client.gui.GuiTextField;
                                  import net.minecraft.util.EnumChatFormatting;
                                  
                                  public class GuiJoinServer extends GuiScreen
                                  {
                                  private static boolean erreur;
                                  
                                  public static boolean b;
                                  
                                  private int valider;
                                  
                                  private int nom;
                                  
                                  private int prenom;
                                  
                                  public static GuiTextField text;
                                  
                                  public static GuiTextField text2;
                                  
                                  public GuiJoinServer() {
                                  
                                  }
                                  
                                  @Override
                                  public void initGui() {
                                  
                                  valider = 0;
                                  
                                  nom = 1;
                                  
                                  prenom = 2;
                                  
                                  text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64,
                                  20);
                                  
                                  text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64,
                                  20);
                                  
                                  text.setFocused(false);
                                  
                                  text2.setFocused(true);
                                  
                                  text.setMaxStringLength(20);
                                  
                                  text2.setMaxStringLength(20);
                                  
                                  this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40,
                                  20, "Valider"));
                                  
                                  super.initGui();
                                  }
                                  
                                  @Override
                                  public void mouseClicked (int i , int j, int k) { 
                                  text.mouseClicked (i, j, k); 
                                  text2.mouseClicked (i, j, k); 
                                  try {
                                  super.mouseClicked (i, j, k);
                                  } catch (IOException e) {
                                  e.printStackTrace();
                                  } 
                                  } 
                                  
                                  @Override
                                  protected void keyTyped(char typedChar, int keyCode) throws IOException {
                                  
                                  text.textboxKeyTyped(typedChar, keyCode);
                                  text2.textboxKeyTyped(typedChar, keyCode);
                                  super.keyTyped(typedChar, keyCode);
                                  }
                                  
                                  @Override
                                  protected void actionPerformed(GuiButton button) throws IOException {
                                  
                                  switch (button.id) {
                                  case 0:
                                  if (!text.getText().equals("") && text.getText().length() > 3
                                  && !text2.getText().equals("")
                                  && text2.getText().length() > 3 && !ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) {
                                  System.out.println(b);
                                  b = false;
                                  ServerProxy.name = text2.getText() + "_" + text.getText();
                                  Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText(), 1));
                                  System.out.println(ServerProxy.name);
                                  System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID()));
                                  erreur = false;
                                  mc.thePlayer.closeScreen();
                                  }
                                  else if(!text.getText().equals("") && text.getText().length() > 3
                                  && !text2.getText().equals("")
                                  && text2.getText().length() > 3 && ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) {
                                  System.out.println(b);
                                  b = false;
                                  
                                  ServerProxy.name = text2.getText() + "_" + text.getText();
                                  Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText(), 2));// 2 = remove / 1 = add
                                  Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText(), 1));
                                  System.out.println(ServerProxy.name);
                                  System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID()));
                                  erreur = false;
                                  mc.thePlayer.closeScreen();
                                  }
                                  else if(text.getText().equals("72") && !text2.getText().equals("")
                                  && text2.getText().length() > 3 && !ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID()))
                                  {
                                  System.out.println(b);
                                  b = false;
                                  ServerProxy.name = text2.getText();
                                  Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText(), 1));
                                  System.out.println(ServerProxy.name);
                                  erreur = false;
                                  mc.thePlayer.closeScreen();
                                  }
                                  else if(text.getText().equals("72") && !text2.getText().equals("")
                                  && text2.getText().length() > 3 && ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID()))
                                  {
                                  System.out.println(b);
                                  b = false;
                                  ServerProxy.name = text2.getText();
                                  Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText(), 2));
                                  Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText(), 1));
                                  System.out.println(ServerProxy.name);
                                  erreur = false;
                                  mc.thePlayer.closeScreen();
                                  }
                                  else {
                                  erreur = true;
                                  }
                                  break;
                                  default:
                                  erreur = false;
                                  break;
                                  }
                                  
                                  super.actionPerformed(button);
                                  }
                                  
                                  @Override
                                  public void updateScreen() {
                                  super.updateScreen();
                                  }
                                  
                                  public void drawScreen(int mouseX, int mouseY, float partialTick) {
                                  
                                  this.drawDefaultBackground();
                                  
                                  text.drawTextBox();
                                  text2.drawTextBox();
                                  
                                  this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY +"Nom", width / 2 - 80, 135, 0);
                                  
                                  this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0);
                                  
                                  super.drawScreen(mouseX, mouseY, partialTick);
                                  
                                  if (erreur) {
                                  this.drawString(fontRendererObj,
                                  "§cVotre nom et/ou prénom est/sont vide ou trop court !",
                                  this.width / 2 - 110, this.height / 2 - 50, 0);
                                  }
                                  }
                                  
                                  @Override
                                  public void onGuiClosed() {
                                  
                                  }
                                  }
                                  
                                  ```</packetnameserver,></string,></entry<string,>
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • robin4002R Hors-ligne
                                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                    dernière édition par

                                    Ton instance n’est jamais initialisé.

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • GabsG Hors-ligne
                                      Gabs
                                      dernière édition par

                                      @‘robin4002’:

                                      Ton instance n’est jamais initialisé.

                                      Pourtant elle est initialisé la:

                                      
                                      if(NameSave.instance != null)
                                              {
                                              NameSave.load(event.getServer().getEntityWorld());
                                              }
                                      

                                      J’ai remplacer le != par == pour voir si ça régler mon problème, j’ai un autre crash mais maintenant quand je me connecte:

                                      
                                      [23:35:49] [Server thread/ERROR] [FML]: Fatal errors were detected during the transition from SERVER_ABOUT_TO_START to SERVER_STARTING. Loading cannot continue
                                      [23:35:49] [Server thread/ERROR] [FML]: 
                                      mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available
                                      FML{8.0.37.1334} [Forge Mod Loader] (forgeSrc-1.8-11.14.1.1334.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available
                                      Forge{11.14.1.1334} [Minecraft Forge] (forgeSrc-1.8-11.14.1.1334.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available
                                      csc{1.0} [Cite Sous Controle] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Errored
                                      [23:35:49] [Server thread/ERROR] [FML]: The following problems were captured during this phase
                                      [23:35:49] [Server thread/ERROR] [FML]: Caught exception from csc
                                      java.lang.ClassCastException: com.CSC.net.save.KeySave cannot be cast to com.CSC.net.save.NameSave
                                      at com.CSC.net.save.NameSave.load(NameSave.java:31) ~[bin/:?]
                                      at com.CSC.net.Main.onServerStarting(Main.java:186) ~[bin/:?]
                                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
                                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45]
                                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
                                      at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
                                      at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:518) ~[forgeSrc-1.8-11.14.1.1334.jar:?]
                                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
                                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45]
                                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
                                      at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
                                      at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
                                      at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) ~[forgeSrc-1.8-11.14.1.1334.jar:?]
                                      at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:187) ~[forgeSrc-1.8-11.14.1.1334.jar:?]
                                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
                                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45]
                                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
                                      at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
                                      at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
                                      at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
                                      at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:118) [LoadController.class:?]
                                      at net.minecraftforge.fml.common.Loader.serverStarting(Loader.java:738) [Loader.class:?]
                                      at net.minecraftforge.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:319) [FMLCommonHandler.class:?]
                                      at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:132) [IntegratedServer.class:?]
                                      at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:500) [MinecraftServer.class:?]
                                      at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
                                      
                                      

                                      Ligne 186 main class:

                                      
                                              if(NameSave.instance == null)
                                              {
                                              NameSave.load(event.getServer().getEntityWorld());// ici
                                              }
                                      

                                      Ligne 31 namesave

                                      
                                      public static NameSave load(World w) {
                                      if(DimensionManager.getWorlds().length < 1) return null;
                                      MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage();
                                      final String KEY = Events.Key;
                                      NameSave result = (NameSave)storage.loadData(NameSave.class, KEY);// ICI
                                      if (result == null) {
                                      result = new NameSave(KEY);
                                      storage.setData(KEY, result);
                                      }
                                      
                                      return result;
                                      }
                                      
                                      
                                      1 réponse Dernière réponse Répondre Citer 0
                                      • robin4002R Hors-ligne
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                        dernière édition par

                                        storage.loadData(NameSave.class, KEY) renvoie visiblement un objet com.CSC.net.save.KeySave et non com.CSC.net.save.NameSave donc le cast échoue.

                                        Tu peux envoyer les deux classes en question ?

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • GabsG Hors-ligne
                                          Gabs
                                          dernière édition par

                                          @‘robin4002’:

                                          storage.loadData(NameSave.class, KEY) renvoie visiblement un objet com.CSC.net.save.KeySave et non com.CSC.net.save.NameSave donc le cast échoue.

                                          Tu peux envoyer les deux classes en question ?

                                          oui tien:

                                          
                                          package com.CSC.net.save;
                                          
                                          import java.util.Iterator;
                                          import java.util.UUID;
                                          import java.util.Map.Entry;
                                          
                                          import javafx.geometry.Pos;
                                          
                                          import com.CSC.net.Events.Events;
                                          import com.CSC.net.Events.Events.Position;
                                          import com.CSC.net.properties.EnumRank;
                                          import com.CSC.net.proxy.ServerProxy;
                                          
                                          import net.minecraft.nbt.NBTTagCompound;
                                          import net.minecraft.nbt.NBTTagList;
                                          import net.minecraft.world.World;
                                          import net.minecraft.world.WorldSavedData;
                                          import net.minecraft.world.storage.MapStorage;
                                          import net.minecraftforge.common.DimensionManager;
                                          
                                          public class KeySave
                                          extends WorldSavedData
                                          {
                                          
                                          public static KeySave instance;
                                          
                                          /**
                                          /* Ce constructeur est obligatoire
                                          */
                                          
                                          public static KeySave load(World w) {
                                          if(DimensionManager.getWorlds().length < 1) return null;
                                          MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); //On récupère la mapStorage de la dimension
                                          final String KEY = Events.Key; // Si vous avez choisis de faire une fonction static String. Quoiqu'il en soit, la variable KEY que nous utiliserons ici représente votre clé. Si vous utilisez un attribut static, utilisez le directement.
                                          KeySave result = (KeySave)storage.loadData(KeySave.class, KEY);//On charge nos données
                                          if (result == null) { //Si nos données n'existe pas, …
                                          result = new KeySave(KEY);// Alors on les crée ...
                                          storage.setData(KEY, result);// Et on les ajoutes à la mapStorage.
                                          }
                                          
                                          return result; //On retourne notre objet qui représente les données a sauvegarder
                                          }
                                          
                                          public KeySave(String key) {
                                          super(key);
                                          instance = this;
                                          
                                          }
                                          
                                          @Override
                                          public void readFromNBT(NBTTagCompound compound) {
                                          NBTTagList keyList= (NBTTagList)compound.getTag("keyList");
                                          for(int i = 0; i < keyList.tagCount(); i++) {
                                          NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
                                          Events.doorsPositions.add(new Position(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z"), keyTag.getInteger("dimension")));
                                          }
                                          }
                                          @Override
                                          public void writeToNBT(NBTTagCompound compound) {
                                          NBTTagList keyList = new NBTTagList();
                                          Iterator <position>iterator = Events.doorsPositions.iterator();
                                          Position pos;
                                          NBTTagCompound keyTag;
                                          while(iterator.hasNext()) {
                                          pos = iterator.next();
                                          keyTag = new NBTTagCompound();
                                          keyTag.setInteger("x", pos.getX());
                                          keyTag.setInteger("y", pos.getY());
                                          keyTag.setInteger("z", pos.getZ());
                                          keyTag.setInteger("dimension", pos.dimensionId);
                                          keyList.appendTag(keyTag);
                                          }
                                          compound.setTag("keyList", keyList);
                                          }
                                          }
                                          
                                          
                                          
                                          package com.CSC.net.save;
                                          
                                          import java.util.Iterator;
                                          import java.util.Map.Entry;
                                          
                                          import com.CSC.net.Events.Events;
                                          import com.CSC.net.Events.Events.Position;
                                          import com.CSC.net.proxy.ServerProxy;
                                          
                                          import net.minecraft.nbt.NBTTagCompound;
                                          import net.minecraft.nbt.NBTTagList;
                                          import net.minecraft.world.World;
                                          import net.minecraft.world.WorldSavedData;
                                          import net.minecraft.world.storage.MapStorage;
                                          import net.minecraftforge.common.DimensionManager;
                                          
                                          public class NameSave extends WorldSavedData{
                                          
                                          public static NameSave instance;
                                          
                                          /**
                                          /* Ce constructeur est obligatoire
                                          */
                                          
                                          public static NameSave load(World w) {
                                          if(DimensionManager.getWorlds().length < 1) return null;
                                          MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); //On récupère la mapStorage de la dimension
                                          final String KEY = Events.Key; // Si vous avez choisis de faire une fonction static String. Quoiqu'il en soit, la variable KEY que nous utiliserons ici représente votre clé. Si vous utilisez un attribut static, utilisez le directement.
                                          NameSave result = (NameSave)storage.loadData(NameSave.class, KEY);//On charge nos données
                                          if (result == null) { //Si nos données n'existe pas, …
                                          result = new NameSave(KEY);// Alors on les crée ...
                                          storage.setData(KEY, result);// Et on les ajoutes à la mapStorage.
                                          }
                                          
                                          return result; //On retourne notre objet qui représente les données a sauvegarder
                                          }
                                          
                                          public NameSave(String key) {
                                          super(key);
                                          instance = this;
                                          
                                          }
                                          
                                          @Override
                                          public void readFromNBT(NBTTagCompound compound) {
                                          NBTTagList keyList = (NBTTagList)compound.getTag("keyList");
                                          for(int i = 0; i < keyList.tagCount(); i++) {
                                          NBTTagCompound keyTag = keyList.getCompoundTagAt(i);
                                          ServerProxy.map.put(keyTag.getString("uuid"), keyTag.getString("name"));
                                          }
                                          }
                                          @Override
                                          public void writeToNBT(NBTTagCompound compound) {
                                          NBTTagList keyList = new NBTTagList();
                                          Iterator<entry<string, string="">> iterator = ServerProxy.map.entrySet().iterator();
                                          while(iterator.hasNext()) {
                                          NBTTagCompound keyTag = new NBTTagCompound();
                                          Entry <string, string="">entry = iterator.next();
                                          keyTag.setString("uuid", entry.getKey().toString());
                                          keyTag.setString("name", entry.getKey().toString());
                                          keyList.appendTag(keyTag);
                                          }
                                          compound.setTag("keyList", keyList);
                                          }
                                          
                                          }
                                          
                                          
                                          
                                            @EventHandler
                                              public void onServerStarting(FMLServerStartingEvent event)
                                               {
                                                  if(KeySave.instance == null)
                                                  {
                                                  KeySave.load(event.getServer().getEntityWorld());
                                                  }
                                                  if(NameSave.instance == null)
                                                  {
                                                  NameSave.load(event.getServer().getEntityWorld());
                                                  }
                                          
                                              }
                                          
                                          ```</string,></entry<string,></position>
                                          1 réponse Dernière réponse Répondre Citer 0
                                          • robin4002R Hors-ligne
                                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                            dernière édition par

                                            Pourquoi avoir deux WorldSavedData ?
                                            Tu peux tout mettre dans le même.

                                            Et si en veux vraiment deux, il faut une clé différente.

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 7
                                            • 8
                                            • 5 / 8
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB