MFF

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

    Probleme avec un mob

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    38 Messages 5 Publieurs 7.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.
    • EmotionFoxE Hors-ligne
      EmotionFox
      dernière édition par

      Si justement je lui conseil de faire un tableau contenant l’inventaire du joueur et qui ce rafraichie à chaque fois qu’il prend des dégâts (donc avant ça mort) pour ensuite, utiliser ce tableau lors du spawn en le lisant un par un et en dropant l’item actuel du tableau au joueur quand l’entité “scorpion” est morte.

      Après je pense qu’il est possible de faire en sorte que le mob contienne les items dans sont propre genre d’inventaire mais que ce soit lui ou le programme ça reviens sensiblement au même, après si il veux que les items pops à l’endroit ou l’entité est morte (d’où l’envie que ce soit le monstre qui porte tout ça) il lui suffit de garder à elle aussi ces coordonnés  pour les utiliser plus tard.

      Après pour faire ce genre de chose il faut quand même un minimum de connaissance et comprendre quelque base mais je pense avoir bien aidé et avoir fournis une méthode fonctionnelle.

      Ps: Je donne pas la solution complète en un bloc, d’une parce que c’est pas très instructif (je préfère expliquer chaque manip) et de deux parce que je sais pas gérer les tableaux, notamment les lires donc je risque pas de t’aider à ce niveau désolé cependant internet doit contenir ce genre d’info ,)

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

        Moi j’aurai utilisé le LivingDeathEvent et dedans j’aurais récupéré les items du joueur pour les passer dans l’inventaire du mob.

        Site web contenant mes scripts : http://SCAREXgaming.github.io

        Pas de demandes de support par MP ni par skype SVP.
        Je n'accepte sur skype que l…

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

          Sauf qu’une fois mort les items sont aux sol est non dans l’inventaire je me trompe ?

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

            @‘EmotionFox’:

            Sauf qu’une fois mort les items sont aux sol est non dans l’inventaire je me trompe ?

            Non car l’event est déclenché avant ce qui se passe en vanilla (c’est pour ça que si on annule l’event, l’entité ne meurt pas)

            Site web contenant mes scripts : http://SCAREXgaming.github.io

            Pas de demandes de support par MP ni par skype SVP.
            Je n'accepte sur skype que l…

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

              • A Effacer-

              “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                @‘SCAREX’:

                Tu ne veux pas qu’il récupère que ces Items, que veux-tu qu’il récupère d’autre ?

                tout les item dans l inventaire du joueur bouffe, potion etc etc

                j ai réussi a créé le tableau:http://puu.sh/ihB1d/934e99f19e.png
                mais pas a le faire looter j’ai des array out of bounds exception lorsque le mob meurt je supprime le code du loot et je regarde ça demain a tête reposer trop longtemps que je me bat avec le même morceau de code vais tout casser xD

                “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                  Bon allez, je vais t’aider quand même j’aime pas voir les gens galérer 107 ans, l’essentiel c’est d’apprendre de ces erreurs alors relis le code jusqu’à le comprendre (les commentaires sont là pour ça).

                  public class TutoEventEmo
                  {
                  private BlockPos death; //Position joueur mort
                  private ItemStack inventory[] = {}; //Le tableau
                  
                  @SubscribeEvent
                  public void whenDeath(LivingDeathEvent e)
                  {
                  if(e.entity instanceof EntityPlayer)
                  {
                  EntityPlayer player = (EntityPlayer)e.entity;
                  death = player.getPosition();
                  
                  for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                  {
                  if(player.inventory.getStackInSlot(i) != null)
                  {
                  inventory = new ItemStack[] {player.inventory.getStackInSlot(i)}; //Ajouter tableau chaque item
                  }
                  }
                  
                  player.inventory.clear(); //Clear inventaire
                  }
                  }
                  
                  @SubscribeEvent
                  public void whenSpawn(Clone e)
                  {
                  if(e.wasDeath == true) //Si joueur est mort
                  {
                  for(int i = 0; i <= 5; i++)
                  {
                  if(i == 5)
                  {
                  EntityPlayer player = e.entityPlayer;
                  World world = player.worldObj;
                  EntityScorpion scorpion = new EntityScorpion(world);
                  
                  scorpion.setPosition(death.getX(), death.getY(), death.getZ());
                  world.spawnEntityInWorld(scorpion);
                  
                  if(scorpion.isDead) //Si scorpion est mort
                  {
                  for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                  {
                  player.dropItem(inventory*, true, false); //Drop item du tableau au joueur
                  }
                  }
                  }
                  }
                  }
                  }
                  }
                  

                  Voilà, ça devrait marcher après si il y à des erreurs dis le moi et j’essayerais de t’aider (je suis pas du tout familiarisé au tableau) ,)

                  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

                    J’aurai plutôt fait comme ça :

                    public class TutoEventEmo
                    {
                        private BlockPos death; //Position joueur mort
                        private ItemStack inventory[]; //Le tableau
                    
                        @SubscribeEvent
                        public void whenDeath(LivingDeathEvent e)
                        {
                            if(e.entity instanceof EntityPlayer)
                            {
                                EntityPlayer player = (EntityPlayer)e.entity;
                                death = player.getPosition();
                    
                    inventory = new ItemStack[player.inventory.getSizeInventory()];
                                for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                                {
                                    if(player.inventory.getStackInSlot(i) != null)
                                    {
                                        inventory* = player.inventory.getStackInSlot(i); //Ajouter tableau chaque item
                                    }
                                }
                    
                                player.inventory.clear(); //Clear inventaire
                            }
                        }
                    
                        @SubscribeEvent
                        public void whenSpawn(Clone e)
                        {
                            if(e.wasDeath == true) //Si joueur est mort
                            {
                                for(int i = 0; i <= 5; i++)
                                {
                                    if(i == 5)
                                    {
                                        EntityPlayer player = e.entityPlayer;
                                        World world = player.worldObj;
                                        EntityScorpion scorpion = new EntityScorpion(world);
                    
                                        scorpion.setPosition(death.getX(), death.getY(), death.getZ());
                                        world.spawnEntityInWorld(scorpion);
                    
                                        if(scorpion.isDead) //Si scorpion est mort
                                        {
                                            for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                                            {
                                                player.dropItem(inventory*, true, false); //Drop item du tableau au joueur
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    

                    ça fonctionnera un peu mieux …
                    Et la encore le code est perfectible, il faudrait mettre le tableau dans mob en question, sinon il va y avoir des problèmes.

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

                      j’ ai modifier le code car j avait des erreur a BlockPos et dans le dropItem mais ça fonctionne toujours pas et le mob spawn sur le joueur seulement quand il respawn T_T j’ai une idée pour corriger le spawn du mob par contre il drop toujours pas mon tableau

                      private ItemStack inventory[]; //Le tableau
                      
                      @SubscribeEvent
                      public void whenDeath(LivingDeathEvent e)
                      {
                      if(e.entity instanceof EntityPlayer)
                      {
                      EntityPlayer player = (EntityPlayer)e.entity;
                      
                      inventory = new ItemStack[player.inventory.getSizeInventory()];
                      for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                      {
                      if(player.inventory.getStackInSlot(i) != null)
                      {
                      inventory* = player.inventory.getStackInSlot(i); //Ajouter tableau chaque item
                      }
                      }
                      
                      player.inventory.clearInventory(null, -1); //Clear inventaire tout les item ingnore les metadata
                      }
                      }
                      
                      @SubscribeEvent
                      public void whenSpawn(Clone e)
                      {
                      if(e.wasDeath == true) //Si joueur est mort
                      {
                      for(int i = 0; i <= 5; i++)
                      {
                      if(i == 5)
                      {
                      EntityPlayer player = e.entityPlayer;
                      World world = player.worldObj;
                      //spawn entityReaper
                      EntityReaper var2 = new EntityReaper(e.entityLiving.worldObj);
                      var2.setLocationAndAngles(e.entityLiving.posX, e.entityLiving.posY, e.entityLiving.posZ, e.entityLiving.rotationYaw, e.entityLiving.rotationPitch);
                      e.entityLiving.worldObj.spawnEntityInWorld(var2);
                      
                      if(var2.isDead) //Si scorpion est mort
                      {
                      for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                      {
                      player.entityDropItem(inventory*, 0); //Drop item du tableau au joueur
                      }
                      }
                      }
                      }
                      }
                      }
                      }
                      

                      et quand j’utilise le DropItem() il me dit que les arguments son DropItem(Item, int) et considère que le tableau n’est pas un item

                      “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                        Ah oui effectivement t’es pas en 1.8 je viens de remarquer seulement ça maintenant, du coup je sais pas désolé mon code est fonctionnelle chez moi mais si on a pas la même version tu m’étonne, mais l’important est quand même là, tu connais les bases et sais comment tu doit faire. Essaye de te renseigner sur ce qui pose problème genre tuto, doc etc…

                        Ps: Si le monstre pop au joueur c’est parce que t’a pas gardé la pos lors de sa mort et que t’a pas changé les positions pour le spawn du monstre ,)

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

                          Pour le mob j ai déjà solutionné le problème mais pour le tableau ça marche pas T_T je comprend pas a quoi sert la float dans entityDropItem après le itemStack ;S

                          pour la fonction DropItem(Item,int) je sait que c’est Item, Nombre

                          je pense pas a une metadata en Float ce serait plutôt étrange ;S
                          peut être un probabilité de loot j’avoue que avec tout ces field ça me rend dingue U_u

                            if(var2.isDead) //Si Reaper est mort
                                             {
                                              System.out.println("lel");
                                                 for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                                                 {
                                                     player.entityDropItem(inventory*, 110); //Drop item du tableau au joueur
                                                     System.out.println(inventory*);
                                                 }
                                             }
                          

                          ne s’execute carrément pas a la mort du mob je creuse un peu on est pret du but

                          “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                            Le float est un offset sur l’axe Y, met celui-ci à 0 çà devrait fonctionner.

                            Site web contenant mes scripts : http://SCAREXgaming.github.io

                            Pas de demandes de support par MP ni par skype SVP.
                            Je n'accepte sur skype que l…

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

                              if(var2.isDead) //Si Reaper est mort
                              {
                              System.out.println("lel");
                              for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                              {
                              player.entityDropItem(inventory*, 110); //Drop item du tableau au joueur
                              System.out.println(inventory*);
                              }
                              }
                              

                              ce code a l’air de ne pas s’executer la mort du Mob :S

                              “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                                Explique moi clairement dans l’ordre des choses ce que tu veux qu’il se passe car je comprends pas trop, voici comment je le comprends :

                                1. Le joueur meurt
                                2. Une nouvelle entité est créée
                                3. L’inventaire du joueur est transféré dans celui du mob

                                Site web contenant mes scripts : http://SCAREXgaming.github.io

                                Pas de demandes de support par MP ni par skype SVP.
                                Je n'accepte sur skype que l…

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

                                  Il a était clair au début je trouve :

                                  1. Quand le joueur meurt un monstre apparait sur sa dépouille
                                  2. Quand le joueur respawn et tue le monstre il récupère tout sont inventaire précédemment perdue et non dropé au sol (pour donner un effet de, c’est le monstre qui a tout mangé)

                                  Essaye

                                  if(var2.getHealth() == 0) //Si vie monstre = 0
                                  

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

                                    j’y avait pas pensez au gethealth j’essaye de-suite

                                    ca fonctionne pas je me demande si le if was dead y est pas pour quelque choses puisque le joueur respawn la condition est rompue le joueur est vivant donc pas moyen d’exécuter le code en desous
                                    Edit: j’ai fait des test et a la condition if(var2.isdead ou var2.getHealth == 0) la condition ne s exécute jamais même si je la déplace en dehors du if wasDead je vais essaye de réécrire différemment le truc pour voir si ça marche

                                           if(e.wasDeath == true) //Si joueur est mort
                                           {
                                               for(int i = 0; i <= 5; i++)
                                               {
                                                   if(i == 5)
                                                   {
                                                       EntityPlayer player = e.entityPlayer;
                                                       World world = player.worldObj;
                                    
                                    EntityReaper var2 = new EntityReaper(e.entityLiving.worldObj);
                                           var2.setLocationAndAngles(e.entityLiving.posX, e.entityLiving.posY, e.entityLiving.posZ, e.entityLiving.rotationYaw, e.entityLiving.rotationPitch);
                                           e.entityLiving.worldObj.spawnEntityInWorld(var2);
                                    
                                                       if(var2.getHealth() == 0) //Si Reaper est mort
                                                       {
                                                        System.out.println("lel");
                                                           for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                                                           {
                                                               player.entityDropItem(inventory*, 110); //Drop item du tableau au joueur
                                                               System.out.println(inventory*);
                                                           }
                                                       }
                                                   }
                                               }
                                           }
                                    

                                    “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                                      j ai essayer ça toujours rien

                                      if(e.entityLiving instanceof EntityReaper) //Si Reaper est mort
                                      {
                                      if(!e.entityLiving.worldObj.isRemote){
                                      System.out.println("lel");
                                      for(int j = 0; j < inventory.length; j++) //Selon taille du tableau
                                      {
                                      player.entityDropItem(inventory*, 0); //Drop item du tableau au joueur
                                      System.out.println(inventory*);
                                      }
                                      }}
                                      

                                      je pense que le Clone event ne va pas avec T_T et si je le met dans un LivingDeadEvent j ai un cannot cast EntityReaper to EntityPlayer

                                      “Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire wo…

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

                                        En faite je me rend compte du probléme, dans le “LivingDeathEvent” en dehors de :

                                        if(e.entity instanceof EntityPlayer}
                                        

                                        Tape une nouvelle condition :

                                        if(e.entity instanceof EntityReaper)
                                        {
                                        if(var2.isDead)
                                        {}
                                        

                                        Et tout le reste à l’intérieur en oubliant pas de déplacer

                                        private EntityReaper var2
                                        

                                        Tout en haut puis de le définir au final à sont endroit initial dans la condition if(e.entity instanceof EntityReaper) :

                                        var2 = new EntityReaper(e.entityLiving.worldObj);
                                        

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

                                          En faite je suis désolé l’erreur viens de “moi”, aucun besoin d’utiliser l’event du respawn juste (j’ai fais l’erreur en pensant que le spawn du mob devait ce faire au spawn du joueur) :

                                          public class EmoBaseEvent
                                          {
                                             private ItemStack inventory[] = {}; // Le tableau
                                          
                                             @SubscribeEvent
                                             public void whenDeath(LivingDeathEvent e)
                                             {
                                                 EntityPlayer player = (EntityPlayer)e.entity;
                                                 World world = player.worldObj;
                                                 EntityScorpion scorpion = new EntityScorpion(world);
                                                 BlockPos death = player.getPosition();
                                          
                                                 if(e.entity instanceof EntityPlayer)
                                                 {
                                                     inventory =  new ItemStack[player.inventory.getSizeInventory()];
                                          
                                                     for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                                                     {
                                                         if(player.inventory.getStackInSlot(i) != null)
                                                         {
                                                             inventory* = player.inventory.getStackInSlot(i); // Ajouter tableau chaque item
                                                         }
                                                     }
                                          
                                                     player.inventory.clear(); // Clear inventaire
                                                     scorpion.setPosition(death.getX(), death.getY(), death.getZ());
                                                     world.spawnEntityInWorld(scorpion);
                                                 }
                                          
                                                 if(e.entity instanceof EntityReaper)
                                                 {
                                                     for(int j = 0; j < inventory.length; j++) // Selon taille du tableau
                                                     {
                                                         player.dropItem(inventory*, true, false); // Drop item du tableau au joueur
                                                     }
                                                 }
                                             }
                                          }
                                          

                                          Après si tu compte faire pop régulièrement des monstres “Reaper” il serait préférable d’ajouter une condition avec une boolean.

                                          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

                                            Il reste des problèmes avec ce code. Le tableau n’est pas vidé. Si plusieurs joueurs meurt, le contenu de l’un va effacer celui de l’autre.
                                            Il faudrait tout stocker dans l’entité, envoie-moi un zip ou un 7z de ton dossier src je vais regarder de mon côté demain.

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB