Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED [+/- Résolu] Transfert du contenu d'une variable serveur vers client

    1.7.x
    1.7.10
    6
    10
    2699
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • JustPingo
      JustPingo last edited by

      Salut !

      J’aimerais qu’à la connexion au serveur, le serveur envoie le contenue d’une variable vers le client. Cependant, je n’ai aucune idée de comment gérer les paquets de cette manière avec Forge.

      Pouvez-vous m’éclairer ? Merci d’avance.

      1 Reply Last reply Reply Quote 0
      • Gugu
        Gugu last edited by

        Tu peux utiliser l’event  [size=smallEntityJoinWorldEvent
        ]
        Après, il suffit d’envoyer un packet

        1 Reply Last reply Reply Quote 0
        • JustPingo
          JustPingo last edited by

          Oui, c’était la question du Packet qui me posait problème, mais je n’avais pas vu qu’il y avait ce tuto dans tutoriels des membres.

          Merci quand même ^^

          1 Reply Last reply Reply Quote 0
          • JustPingo
            JustPingo last edited by

            En fait c’est pas du tout résolu.

            Je souhaite transférer une liste d’objets.
            J’ai pour cela procédé ainsi :

            package pingo.una.common;
            
            import io.netty.buffer.ByteBuf;
            
            import java.io.ByteArrayInputStream;
            import java.io.ByteArrayOutputStream;
            import java.io.ObjectInputStream;
            import java.io.ObjectOutputStream;
            import java.util.List;
            
            import net.minecraft.client.Minecraft;
            import cpw.mods.fml.common.network.ByteBufUtils;
            import cpw.mods.fml.common.network.simpleimpl.IMessage;
            import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
            import cpw.mods.fml.common.network.simpleimpl.MessageContext;
            
            public class TransferSatellites implements IMessage {
            
            public List <satellite>satellites;
            
                public TransferSatellites() { }
            
                public TransferSatellites(List <satellite>sat) {
                    this.satellites = sat;
                }
            
            @SuppressWarnings("unchecked")
            @Override
            public void fromBytes(ByteBuf buf) {
            String serialized = ByteBufUtils.readUTF8String(buf);
            try {
                byte b[] = serialized.getBytes(); 
                ByteArrayInputStream bi = new ByteArrayInputStream(b);
                ObjectInputStream si = new ObjectInputStream(bi);
                this.satellites = (List<satellite>) si.readObject();
            } catch (Exception e) {
            System.out.println(e);
            }
            }
            
            @Override
            public void toBytes(ByteBuf buf) {
            String serialized = "";
            try {
               ByteArrayOutputStream bo = new ByteArrayOutputStream();
               ObjectOutputStream so = new ObjectOutputStream(bo);
               so.writeObject(this.satellites);
               so.flush();
               serialized = bo.toString();
            } catch (Exception e) {
            
            } 
            ByteBufUtils.writeUTF8String(buf, serialized);
            }
            
            public static class Handler implements IMessageHandler <transfersatellites, imessage="">{
            
            @Override
            public IMessage onMessage(TransferSatellites message, MessageContext ctx) {
            System.out.println("Received satellites " + Minecraft.getMinecraft().theWorld.isRemote);
            UberNetworkingAntennas.satellites = message.satellites;
            System.out.println(UberNetworkingAntennas.satellites == null);
            return null;
            }
            
                }
            
            }
            
            

            Cependant, à l’envoi les données partent, elles arrivent, mais il n’arrive pas à dé-sérialiser l’objet :

            java.io.InvalidClassException: java.util.ArrayList; local class incompatible: stream classdesc serialVersionUID = 8664875232659988799, local class serialVersionUID = 8683452581122892189
            
            

            Savez-vous pourquoi ?

            Merci d’avance !</transfersatellites,></satellite></satellite></satellite>

            1 Reply Last reply Reply Quote 0
            • jglrxavpok
              jglrxavpok Modérateurs last edited by

              Va falloir que tu écrives la liste élément par élément. La sérialisation ne passera pas.

              Par exemple, écrit un int avec le nombre d’éléments puis écrit chacun des éléments à la suite.

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                Ta classe Satellite contient quoi ? Car sinon tu pourrais passer par un NBT.
                C’est ce qu’on a fait avec Kévin pour le projecteur de Nanotech :
                https://github.com/FFMT/nanotech_mod/blob/nanotechmod3/src/fr/mcnanotech/kevin_68/nanotechmod/core/network/packets/PacketSpotLightKey.java
                https://github.com/FFMT/nanotech_mod/blob/nanotechmod3/src/fr/mcnanotech/kevin_68/nanotechmod/core/utils/SpotLightEntry.java

                1 Reply Last reply Reply Quote 0
                • JustPingo
                  JustPingo last edited by

                  Ma classe Satellite contient d’autres classes contenant d’autres classes. Donc impossible.

                  Mais de toute façon, j’ai trouvé une solution plus légère et qui ne passe pas par les packets.

                  Merci quand même ^^

                  1 Reply Last reply Reply Quote 0
                  • mindany2
                    mindany2 last edited by

                    Et quelle est-elle, je ne m’y connais pas beaucoup (et je ne dois pas être le seul) et je sens que ce genre de problème peu arriver ^^

                    1 Reply Last reply Reply Quote 0
                    • JustPingo
                      JustPingo last edited by

                      Ça n’a rien à voir, j’ai complètement revu la gestion de stockage des satellites. Rien d’utile pour quelqu’un d’autre.

                      Envoyé de mon iPhone en utilisant Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • T
                        toss last edited by

                        Coucou, encore une fois je vais rediriger vers mon github ^^

                        - Le repo: 
                        https://github.com/toss-dev/Magic_Crusade_Mod

                        Bon alors, l’envoie de données client / server c’est compliqué, mais chez forge (desfois, très rarement), ils sont gentils. Ils ont filé des fonctions / objets proposé pour faciliter l’utilisation des packets

                        fr.toss.common.packet balades toi ici pour la création et l’enregistrement des packets

                        Balades toi un peu n’importe où ou pour voir leur utilisation concrète,  genre dans fr.toss.client.gui j’envoie pas mal de données au serveur

                        (Si tu piges pas un truc dis le moi, je t’ai rien vraiment expliqué là en faite :p)

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Design by Woryk
                        Contact / Mentions Légales / Faire un don

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB