MFF

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

    Extended Entity Properties

    Planifier Épinglé Verrouillé Déplacé Les entités
    1.7.2
    127 Messages 21 Publieurs 39.8k Vues 5 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.
    • bin4r1sB Hors-ligne
      bin4r1s
      dernière édition par

      Retourne false, mais j’ai trouvé d’ou vient le bug :
      Je voulais envoyer (packet) un tableau de byte, mais je ne trouvais pas (sur internet) comment récupérer alors j’ai tenté des choses hasardeuses :

      
      @Override
      
          public void fromBytes(ByteBuf buf) 
          {
              mana = buf.readShort();
              playerMaxMana = buf.readShort();
              buf.readBytes(levels); // ICI
          }
      

      Donc si quelqu’un sait comment faire…

      Mes mods:

      • New Ores
      • More Dragons
      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

        Pour envoyer un tableau il faut passer par des boucles for.
        Dans un premier temps tu envoie la taille du tableau :

        buf.writeInt(tonTableau.length);
        

        puis tu écris toutes les valeurs :

        for(int i = 0; i > tonTableau.length;i++)
        {
              buf.writeByte(tonTableau*);
        }
        

        Et pour le lire de l’autre côté tu l’initialises et tu fais une boucle for en fonction de sa taille :

        int size = buf.readInt();
        tonTableau = new Byte;
        for(int i = 0; i > size;i++)
        
        {
              tonTableau* = buf.readByte();
        }
        
        1 réponse Dernière réponse Répondre Citer 0
        • RedRelayR Hors-ligne
          RedRelay Moddeurs confirmés
          dernière édition par

          Pourquoi ne pas passer par un NBTTagList ?
          Si c’est un tableau d’entier, il y a aussi une méthode pour écrire directement un tableau d’entier.

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

            Merci maintenant ça marche, mais ça fait laguer mon ordi O_O et en plus, à chaque fois que j’utilise mon item, la console me sort :

            
            [10:26:01] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 100 packets have leaked. Top offenders
            
            [10:26:01] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 100
            [10:26:05] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 200 packets have leaked. Top offenders
            [10:26:05] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 200
            [10:26:08] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 300 packets have leaked. Top offenders
            [10:26:08] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 300
            [10:26:11] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 400 packets have leaked. Top offenders
            [10:26:11] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 400
            [10:26:13] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 500 packets have leaked. Top offenders
            [10:26:13] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 500
            [10:26:16] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 600 packets have leaked. Top offenders
            [10:26:16] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 600
            
            

            Mes mods:

            • New Ores
            • More Dragons
            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

              Oula, envoie tout ton code, visiblement tu as des paquets qui se perdent.

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

                PlayerData.java (le code intéressant) :

                
                public final void sync() 
                {
                    PacketData$01 packet = new PacketData$01(this.mana, this.playerMaxMana, this.spell_levels, this.mana_regen_ticks);
                   Dragons.network.sendToServer(packet);
                
                    if (!player.worldObj.isRemote) 
                    {
                        EntityPlayerMP player1 = (EntityPlayerMP) player;
                        Dragons.network.sendTo(packet, player1);
                    }
                }
                

                PacketData$01.java :

                
                package fr.MrBlockTNT.Dragons.network;
                
                import fr.MrBlockTNT.Dragons.event.PlayerData;
                import io.netty.buffer.ByteBuf;
                import net.minecraft.client.Minecraft;
                import net.minecraft.client.network.NetHandlerPlayClient;
                import net.minecraft.entity.player.EntityPlayer;
                import net.minecraft.network.NetHandlerPlayServer;
                import cpw.mods.fml.common.network.simpleimpl.IMessage;
                import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
                import cpw.mods.fml.common.network.simpleimpl.MessageContext;
                import cpw.mods.fml.relauncher.Side;
                import cpw.mods.fml.relauncher.SideOnly;
                
                public class PacketData$01 implements IMessage
                {
                private short mana, playerMaxMana;
                private int regen_ticks;
                private byte[] levels;
                
                    public PacketData$01() { }
                
                    public PacketData$01(short mana, short playerMaxMana, byte[] levels, int r_ticks) 
                    {
                        this.mana = mana;
                        this.playerMaxMana = playerMaxMana;
                        this.levels = levels;
                        this.regen_ticks = r_ticks;
                    }
                
                    @Override
                    public void fromBytes(ByteBuf buf) 
                    {
                        mana = buf.readShort();
                        playerMaxMana = buf.readShort();
                        byte size = buf.readByte();
                        levels = new byte;
                        for(int i = 0; i < size; i++)
                        levels* = buf.readByte();
                        regen_ticks = buf.readInt();
                    }
                
                    @Override
                    public void toBytes(ByteBuf buf) 
                    {
                    buf.writeShort(mana);
                    buf.writeShort(playerMaxMana);
                    buf.writeByte(levels.length);
                    for(int i = 0; i < levels.length; i++)
                    buf.writeByte(levels*);
                    buf.writeInt(regen_ticks);
                    }
                
                    public static class Handler implements IMessageHandler <packetdata$01, imessage="">{
                
                        @Override
                        public IMessage onMessage(PacketData$01 message, MessageContext ctx) 
                        {
                        if(ctx.netHandler instanceof NetHandlerPlayServer)
                        {
                        PlayerData dat = PlayerData.get(getClientPlayer());
                        dat.update(message.mana, message.playerMaxMana, message.levels, message.regen_ticks);
                        }
                        else if(ctx.netHandler instanceof NetHandlerPlayClient)
                        {
                        PlayerData dat = PlayerData.get(getClientPlayer());
                        dat.update(message.mana, message.playerMaxMana, message.levels, message.regen_ticks);
                        }
                            return null;
                        }
                
                        @SideOnly(Side.CLIENT)
                        public EntityPlayer getClientPlayer()
                        {
                        return Minecraft.getMinecraft().thePlayer;
                        }
                    }
                }
                ```</packetdata$01,>

                Mes mods:

                • New Ores
                • More Dragons
                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

                  if(ctx.netHandler instanceof NetHandlerPlayServer)
                  {
                  PlayerData dat = PlayerData.get(getClientPlayer());

                  ??!!??

                  Et autre problème, le nom de la classe. Mettre un $ dans le nom est une très mauvaise idée.

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

                    En fait, je ne voyais pas trop comment récupérer le joueur pour le côté serveur 😞 mais je viens de me rendre compte que c’est complètement c** stupide puisque le serveur ne pourra pas le récupérer (SideOnly). Une idée ? (J’avais aussi pensé à envoyer l’entity player mais il semblerait que je ne puisse pas (et puis ça serai trop lourd…)).

                    Sinon pour le nom je voulais un séparateur entre le nom du packet et son index x)

                    Mes mods:

                    • New Ores
                    • More Dragons
                    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

                      PlayerData dat = PlayerData.get(((NetHandlerPlayServer)netHandler).playerEntity);

                      Le $ est utilisé pour les noms des classes lorsque tu utilise des sous classe.
                      Par exemple si tu fais :

                      public class BlaBla
                      {
                           public static class AutreClasse
                           {
                           }
                      }
                      

                      Lors de la compilation ça va créer deux fichiers .class :
                      BlaBla.class
                      BlaBla$AutreClasse.class

                      Donc c’est très déconseillé de mettre des $ dans le nom de la classe, ça risque de créer des problèmes avec ça.

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

                        Ah d’accord, merci 🙂 je vais changer ça.

                        EDIT :
                        Ah ben en fait je perds toujours des packets 😞 . Nouveau code :

                        
                        @Override
                        
                        public IMessage onMessage(PacketData_01 message, MessageContext ctx) 
                        {
                                 if(ctx.netHandler instanceof NetHandlerPlayServer)
                                {
                                         PlayerData dat = PlayerData.get(((NetHandlerPlayServer)ctx.netHandler).playerEntity);
                                         dat.update(message.mana, message.playerMaxMana, message.levels, message.regen_ticks);
                                }
                                else if(ctx.netHandler instanceof NetHandlerPlayClient)
                                {
                                         PlayerData dat = PlayerData.get(getClientPlayer());
                                         dat.update(message.mana, message.playerMaxMana, message.levels, message.regen_ticks);
                                }
                                return null;
                        }
                        
                        

                        Mes mods:

                        • New Ores
                        • More Dragons
                        1 réponse Dernière réponse Répondre Citer 0
                        • bin4r1sB Hors-ligne
                          bin4r1s
                          dernière édition par

                          Up, help svp  😞

                          Mes mods:

                          • New Ores
                          • More Dragons
                          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

                            Ta fonction dat.update fait quoi ?

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

                              Elle met juste à jour les propriétés du joueur.

                              Mes mods:

                              • New Ores
                              • More Dragons
                              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

                                Un copier/coller de la fonction aurait été utile. Car je suspecte que tu renvoie un paquet à chaque fois, enfin je ne vois pas d’autres explications.

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

                                  
                                  public void update(short mana, short playerMaxMana, byte[] levels, int regen)
                                  
                                  {
                                         this.mana = mana;
                                         this.playerMaxMana = playerMaxMana;
                                         this.spell_levels = levels;
                                         this.mana_regen_ticks = regen;
                                  }
                                  

                                  En effet ta théorie sur le fait que je renvoie le packet à chaque fois n’est pas impossible. Je check ça.

                                  EDIT : Rien trouvé 😞 (Enfin intelligible pour moi)

                                  Code (peut-être auras-tu plus de chance 🙂 ) :
                                  PlayerData.java
                                  PacketData_01.java
                                  CommonProxy.java

                                  Il y a quelques erreurs dans un constructeur et la méthode update notamment car je suis en train de mettre en place quelque chose.

                                  Mes mods:

                                  • New Ores
                                  • More Dragons
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • bin4r1sB Hors-ligne
                                    bin4r1s
                                    dernière édition par

                                    Up 😢

                                    Mes mods:

                                    • New Ores
                                    • More Dragons
                                    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 ne vois pas d’erreur non plus 😕
                                      Sinon envoie un zip de ton dossier src, je vais faire des tests en local.

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

                                        Regarde tes MPs

                                        Mes mods:

                                        • New Ores
                                        • More Dragons
                                        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 l’ai vu, il me faut juste le temps de regarder.
                                          J’édite mon message dès que c’est bon (d’ici midi, et si j’ai pas trouvé pour midi je regarderais cette aprèm).

                                          En semaine mon temps est très limité.

                                          Finalement ça a été assez rapide. Le problème c’est que les paquets qui partent du serveur se perdent, le client ne sait pas quoi en faire.
                                          Dans ta classe principale tu as ça actuellement :

                                          ​        // Network
                                          
                                                  network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID + ":CHANNEL_1");
                                                  network.registerMessage(PacketData_01.Handler.class, PacketData_01.class, 0, Side.SERVER);
                                          

                                          Donc si le paquet par du client vers le serveur le serveur sait ce qu’il doit faire.
                                          Mais dans l’autre sens non.
                                          Solution ? Il suffit d’ajouter cette ligne en plus :

                                          ​        network.registerMessage(PacketData_01.Handler.class, PacketData_01.class, 0, Side.CLIENT);
                                          
                                          1 réponse Dernière réponse Répondre Citer 0
                                          • bin4r1sB Hors-ligne
                                            bin4r1s
                                            dernière édition par

                                            Merci je teste 🙂

                                            EDIT :
                                            Super ça marche ! Un grand merci 🙂

                                            Mes mods:

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB