1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

Résolu Problème de codage avec le BlockPos

Discussion dans 'Aide à la création de mod' créé par vbfc70, 27 Sept 2015.

  1. vbfc70

    vbfc70 Nouveau

    Inscrit:
    27 Sept 2015
    Messages:
    7
    Points:
    0
    Sexe:
    Homme
    Bonjour,
    J'ai trouvé de superbe nouveauté avec la version 1.8 mais jouant avec des mods, j'aurais aimé les mettre à jour. Je me suis donc renseigné sur les nouveautés de codages et j'ai réussi à refaire une bonne partie de mon mods (surtout avec les modèles pour les blocks et items) mais mon plus gros souci et avec le BlockPos qui remplace int x, int y, int z.
    Code (cpp):
     void packetForClientNode(DataInputStream stream, NetworkManager manager, EntityPlayer player) {
            EntityPlayer clientPlayer = (EntityPlayer) player;
            int x = 0, y = 0, z = 0, dimention = 0;
            try {
                x = stream.readInt();
                y = stream.readInt();
                z = stream.readInt();
                dimention = stream.readByte();

                if (clientPlayer.dimension == dimention) {
                    TileEntity entity = clientPlayer.worldObj.getTileEntity(x, y, z);
                    if (entity != null && entity instanceof INodeEntity) {
                        INodeEntity node = (INodeEntity) entity;
                        if (node.getNodeUuid().equals(stream.readUTF())) {
                            node.serverPacketUnserialize(stream);
                            if (0 != stream.available()) {
                                Utils.println("0 != stream.available()");
                            }
                        } else {
                            Utils.println("Wrong node UUID warning");
                            int dataSkipLength = stream.readByte();
                            for (int idx = 0; idx < dataSkipLength; idx++) {
                                stream.readByte();
                            }
                        }
                    }
                } else
                    Utils.println("No node found for " + x + " " + y + " " + z);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    J'aimerais donc savoir comment le BlockPos fonctionne et savoir comment modifier cette partie de code pour ne plus avoir d'erreur au niveau du .getTileEntity(x,y,z).
    Merci d'avance à tous ceux qui pourront m'aider
     
  2. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 567
    Points:
    185
    Sexe:
    Homme
    Mauvaise section, je déplace.
     
  3. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 108
    Points:
    229
    Sexe:
    Homme
    new BlockPos(x, y, z)
     
    • J'approuve J'approuve x 1
  4. vbfc70

    vbfc70 Nouveau

    Inscrit:
    27 Sept 2015
    Messages:
    7
    Points:
    0
    Sexe:
    Homme
    Je veux bien faire un new BlockPos (x,y,z) mais comment je défini les x,y et z ensuite?
    et après dans la partie de code qui suit j''ai: Utils.println("No node found for " + x + " " + y + " " + z); du coup mon x,y,z ne sont plus défini avec le BlockPos...
     
  5. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 108
    Points:
    229
    Sexe:
    Homme
    x y et z définis depuis le paquet non ?
    Code (cpp):
                x = stream.readInt();
                y = stream.readInt();
                z = stream.readInt();
     
    • J'approuve J'approuve x 1
  6. vbfc70

    vbfc70 Nouveau

    Inscrit:
    27 Sept 2015
    Messages:
    7
    Points:
    0
    Sexe:
    Homme
    Oui oui x,y,z défini depuis les paquets donc j'ai juste à ajouter une ligne avant le if avec: new BlockPos(x,y,z); et mettre BlockPos dans mon .getTileEntity ce qui donne un .getTileEntity(BlockPos);?
    Et une dernière question: à chaque fois que je vais avoir besoin du BlockPos il faut que je déclare mon BlockPos à chaque fois? :s
     
  7. vbfc70

    vbfc70 Nouveau

    Inscrit:
    27 Sept 2015
    Messages:
    7
    Points:
    0
    Sexe:
    Homme
    Est ce que le code modifié ainsi irait:
    Code (cpp):
     if (clientPlayer.dimension == dimention) {
                    new BlockPos(x,y,z);
                    TileEntity entity = clientPlayer.worldObj.getTileEntity(BlockPos);
                    if (entity != null && entity instanceof INodeEntity) {
                        INodeEntity node = (INodeEntity) entity;
                        if (node.getNodeUuid().equals(stream.readUTF())) {
                            node.serverPacketUnserialize(stream);
                            if (0 != stream.available()) {
                                Utils.println("0 != stream.available()");
                            }
                        } else {
                            Utils.println("Wrong node UUID warning");
                            int dataSkipLength = stream.readByte();
                            for (int idx = 0; idx < dataSkipLength; idx++) {
                                stream.readByte();
                            }
                        }
                    }
     
  8. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 108
    Points:
    229
    Sexe:
    Homme
    Code (cpp):
     void packetForClientNode(DataInputStream stream, NetworkManager manager, EntityPlayer player) {
            EntityPlayer clientPlayer = (EntityPlayer) player;
            int x = 0, y = 0, z = 0, dimention = 0;
            try {
                x = stream.readInt();
                y = stream.readInt();
                z = stream.readInt();
                dimention = stream.readByte();

                if (clientPlayer.dimension == dimention) {
                    TileEntity entity = clientPlayer.worldObj.getTileEntity(new BlockPos(x, y, z));
                    if (entity != null && entity instanceof INodeEntity) {
                        INodeEntity node = (INodeEntity) entity;
                        if (node.getNodeUuid().equals(stream.readUTF())) {
                            node.serverPacketUnserialize(stream);
                            if (0 != stream.available()) {
                                Utils.println("0 != stream.available()");
                            }
                        } else {
                            Utils.println("Wrong node UUID warning");
                            int dataSkipLength = stream.readByte();
                            for (int idx = 0; idx < dataSkipLength; idx++) {
                                stream.readByte();
                            }
                        }
                    }
                } else
                    Utils.println("No node found for " + x + " " + y + " " + z);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    Comme ça. Ce que tu viens de faire dans le dernier message ne fonctionnera pas.
     
  9. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 567
    Points:
    185
    Sexe:
    Homme
    Bonjour.
    @vbfc70 attention, le double-post est interdit.
    Je t'invite à aller (re-)lire les règles.


    Cordialement,
    Seblor.
     
  10. vbfc70

    vbfc70 Nouveau

    Inscrit:
    27 Sept 2015
    Messages:
    7
    Points:
    0
    Sexe:
    Homme
    Un grand merci Robbin4002, maintenant je comprend mieux l'utilisation de ce BlockPos qui pose tellement de souci dans la 1.8 d'après les différentes lectures que j'ai pu faire.
     

Partager cette page