MFF

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

    Détruire les entités d'item environnantes

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    14 Messages 3 Publieurs 2.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.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      Bonjour, je constate qu’il serait intéressant de rajouter une fonctionnalité à mon mod, un item qui permettent de faire disparaître des entités d’items au sol autour d’eux.

      En gros, ça pvp, ça fait un kill et ensuite ça veut empêcher la victime de revenir chercher son stuff.

      J’ai testé le système exposé dans l’un des tutos sur les items afin de détecter des entités environnantes, mon soucis doit être que je ne cherche pas à détecter la bonne chose, je ne comprend pas trop comment fonctionne la classe EntityItem.

      Voici mon code actuel:

      @Override
          public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
          {
              int metadata = stack.getItemDamage();
      
      //[…]
      
               if(metadata == 2)
              {
                  IEntitySelector filter;
                  filter = new IEntitySelector()
                  {
                      @Override
                      public boolean isEntityApplicable(Entity entity)
                      {
                          if(entity instanceof EntityItem)
                          {
                              return true;
                          }
                      return false;
                      }
                  };
                  @SuppressWarnings("rawtypes")
                  List entitythisList = player.worldObj.selectEntitiesWithinAABB(EntityLivingBase.class, player.boundingBox.expand(3.D, 1.0D, 3.0D), filter);
                  for(Object entity : entitythisList)
                  {                    
                      EntityItem item = (EntityItem)entity;
                      item.setDead();
                  }            
                  return false;
              }
      
      1 réponse Dernière réponse Répondre Citer 0
      • BrokenSwingB Hors-ligne
        BrokenSwing Moddeurs confirmés Rédacteurs
        dernière édition par

        
        List <entityitem>entitythisList = player.worldObj.selectEntitiesWithinAABB(EntityItem.class, new AxisalignedBB(player.getPosition()).expand(3.D, 1.0D, 3.0D));
        for(EntityItem entity : entitythisList)
        {
        entity.setDead();
        }
        
        

        Je peux pas vérifier si c’est marche mais ça devrait avec ça seulement
        (Adapte pour la 1.7) je suis sur portable, le java avec un correcteur d’orthographe c’est moyen</entityitem>

        1 réponse Dernière réponse Répondre Citer 0
        • FolganskyF Hors-ligne
          Folgansky Correcteurs
          dernière édition par

          ça me fait une erreur sur le getPosition, en me proposant de compléter avec un float en argument (ou de mettre “getBedLocation(…)”, merci Eclipse).

          J’ai essayé avec
          Vec3.createVectorHelper(player.posX, player.posY + (player.getEyeHeight() - player.getDefaultEyeHeight()), player.posZ)

          ou même 1.0F ou encore “hitX”

          ça marque en gros constructeur “AxisAlignedBB(Vec3)” indéfinis dans chaque cas.

          1 réponse Dernière réponse Répondre Citer 0
          • BrokenSwingB Hors-ligne
            BrokenSwing Moddeurs confirmés Rédacteurs
            dernière édition par

            Dès que suis sur mon PC, je te donne le code pour la 1.7

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

              List <entityitem>entitythisList = player.worldObj.selectEntitiesWithinAABB(EntityItem.class, new AxisalignedBB(player.getPosition()).expand(3.D, 1.0D, 3.0D));
              –->
              List <entityitem>entitythisList = player.worldObj.selectEntitiesWithinAABB(EntityItem.class, player.getBoudingBox().expand(3.D, 1.0D, 3.0D));</entityitem></entityitem>

              1 réponse Dernière réponse Répondre Citer 0
              • FolganskyF Hors-ligne
                Folgansky Correcteurs
                dernière édition par

                List <entityitem>entitythisList = player.worldObj.selectEntitiesWithinAABB(EntityItem.class, player.getBoundingBox().expand(3.D, 1.0D, 3.0D));
                            for(EntityItem entity : entitythisList)
                            {                    
                                entity.setDead();
                            }
                

                Erreur sur “selectEntitiesWithinAABB” car il veut rajouter le paramètre IEntitySelector.
                Ou bien changer par “getEntitiesWithinAABB”</entityitem>

                1 réponse Dernière réponse Répondre Citer 0
                • BrokenSwingB Hors-ligne
                  BrokenSwing Moddeurs confirmés Rédacteurs
                  dernière édition par

                  Remplace par getEntitiesWithinAABB dans ce cas

                  1 réponse Dernière réponse Répondre Citer 0
                  • FolganskyF Hors-ligne
                    Folgansky Correcteurs
                    dernière édition par

                    J’avais testé mais du coup ça me fait crash NPE sur la ligne
                    “List <entityitem>entitythisList = player.worldObj.getEntitiesWithinAABB(EntityItem.class, player.getBoundingBox().expand(3.D, 1.0D, 3.0D));”</entityitem>

                    1 réponse Dernière réponse Répondre Citer 0
                    • BrokenSwingB Hors-ligne
                      BrokenSwing Moddeurs confirmés Rédacteurs
                      dernière édition par

                      List <entityitem>entitythisList = player
                      .worldObj
                      .getEntitiesWithinAABB(EntityItem.class, player
                      .getBoundingBox()
                      .expand(3.D, 1.0D, 3.0D));
                      

                      Pour voir où est le NPE</entityitem>

                      1 réponse Dernière réponse Répondre Citer 0
                      • FolganskyF Hors-ligne
                        Folgansky Correcteurs
                        dernière édition par

                        Le NPE est sur l’expand

                        1 réponse Dernière réponse Répondre Citer 0
                        • BrokenSwingB Hors-ligne
                          BrokenSwing Moddeurs confirmés Rédacteurs
                          dernière édition par

                          Parce que player.getBoundingBox retourne null (ctrl + clic)

                          
                          List <entityitem>entities = player.worldObj.getEntitiesWithinAABB(EntityItem.class,
                          AxisAlignedBB.getBoundingBox(player.posX - 3, player.posY, player.posZ - 3,
                          player.posX + 3, player.posY + 2, player.posZ + 3));
                          for(EntityItem entity : entities) {
                          entity.setDead();
                          }
                          
                          ```</entityitem>
                          1 réponse Dernière réponse Répondre Citer 0
                          • FolganskyF Hors-ligne
                            Folgansky Correcteurs
                            dernière édition par

                            Ok c’est nice ça. Ce code est fonctionnel.

                            Du coup je me suis demandé comment rajouter un .class en plus comme argument, pour le moment la fonction que je voulais avoir est bien exécuté, mais bon ce principe de détecter ce qu’il y a dans une boundingBox d’un joueur ça offre pas mal de possibilités en fait.

                            J’ai tenté

                            […].getEntitiesWithinAABB(EntityItem.class || EntityAutre.class , […]
                            

                            Mais la fonction n’est pas bonne.
                            Il faudrait refaire une liste à chaque fois? Ou ça rejoint le ISelector?

                            1 réponse Dernière réponse Répondre Citer 0
                            • BrokenSwingB Hors-ligne
                              BrokenSwing Moddeurs confirmés Rédacteurs
                              dernière édition par

                              Avec un ISelector ça devrait marcher (flemme de tester) mais surtout n’utilise pas player.getBoundingBox()
                              Dans le sélecteur tu vérifie si l’entité est soit un item, soit un zombie, soit un chat, etc … tout ce que tu veux.

                              1 réponse Dernière réponse Répondre Citer 1
                              • FolganskyF Hors-ligne
                                Folgansky Correcteurs
                                dernière édition par

                                Ouki ça roule ^^

                                Merci pour le coup de main.

                                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