MFF

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

    OnMessage : récupérer une tileEntity

    Planifier Épinglé Verrouillé Déplacé Résolu 1.9.x et 1.10.x
    1.10.x
    6 Messages 3 Publieurs 1.4k 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.
    • Cl00e9mentC Hors-ligne
      Cl00e9ment
      dernière édition par

      Bonjour,
      Je travaille en ce moment sur la synchronisation client/server a[color=#333333vec les packets]%(#333333)[. À la réception d’un packet, quand je veux récupérer une tileEntity je procède de cette façon :

      public static class Handler implements IMessageHandler <packetclienttoserver, imessage="">{
      ]
              @Override
              public IMessage onMessage (PacketClientToServer message, MessageContext ctx){
      
                  // args est un tableau de String dans PacketClientToServer
                  // je l'utilise pour faire transiter des données par les packets
      
                  int x = Integer.valueOf (message.args [0]);
                  int y = Integer.valueOf (message.args [1]);
                  int z = Integer.valueOf (message.args [2]);
      
                  TileEntity tileEntity = ctx.getServerHandler().playerEntity.worldObj.getTileEntity (new BlockPos (x, y, z));
                  return null;
              }
      [color=#333333    }
      

      ]
      Malheureusement je peux utiliser cette technique uniquement côté server : ctx.getServerHandler()
      car côté client on ne peux pas faire ça :

      [color=#333333```java
      public static class Handler implements IMessageHandler <packetservertoclient, imessage=“”>{
      ]
              @Override
              public IMessage onMessage ([color=#333333PacketServerToClient] message, MessageContext ctx){

      int x = Integer.valueOf (message.args [0]);
                  int y = Integer.valueOf (message.args [1]);
                  int z = Integer.valueOf (message.args [2]);

      TileEntity tileEntity = ctx.getClientHandler().playerEntity.worldObj.getTileEntity (new BlockPos (x, y, z));
                  // ctx.getClientHandler().playerEntity -> impossible

      return null;

      }
      [color=#333333    }

      
      Ma question est donc : Comment récupérer une TileEntity en connaissant ses coordonnées à la réception d'un packet côté client ?
      Merci de l'aide que vous pourrez m'apporter.</packetservertoclient,></packetclienttoserver,>
      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

        Salut,
        Utilises Minecraft.getMinecraft().theWorld pour avoir le monde côté client 😉
        Attention par contre, il faudra ajouter un @SideOnly(Side.CLIENT) au dessus de la fonction onMessage pour éviter un crash lors du chargement du mod sur un serveur.

        1 réponse Dernière réponse Répondre Citer 1
        • Cl00e9mentC Hors-ligne
          Cl00e9ment
          dernière édition par

          Super !
          Ça fonctionne parfaitement. Et merci de la réactivité ! 😄

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

            Juste je vois que tu utilises un tableau pour les cordonnées mais tu peux directement utiliser un BlockPos, car le PacketBuffer permet décrire et lire les BlockPos pour envoyer/recevoir le packet.

            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

              @‘AymericRed’:

              Juste je vois que tu utilises un tableau pour les cordonnées mais tu peux directement utiliser un BlockPos, car le PacketBuffer permet décrire et lire les BlockPos pour envoyer/recevoir le packet.

              Non, un tableau de String est l’idéal car j’utilise cette classe pour une dizaines de packets différents (oui mon mod est galère à synchroniser  :s   (ça fait 2 mois que je bosse la synchronisation)). Donc un tableau de String est exactement ce qu’il faut : pour chaque packet différent je remplis mon tableau avec les données que je veux. Quand je reçois mon packet, je fais un switch pour savoir quelle type de packet c’est, et ensuite pour chaque cas, je fais ce que j’ai à faire avec les données stockées dans le tableau.

              Sinon, je me demandais :
              Si j’envoie un certain nombre de packets à la suite, est ce que je suis assuré qu’il vont arriver dans le même ordre ?

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

                Ah d’accord ^^ Tu me diras cest vrai que j’aime pas avoir 36 000 paquets non plus.
                Je dirais que si Mc est bien fait oui mais en fait je sais pas ^^

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                1 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                • Premier message
                  Dernier message
                Design by Woryk
                ContactMentions Légales

                MINECRAFT FORGE FRANCE © 2024

                Powered by NodeBB