MFF

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

    OnItemRightClick sur une entity.

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    125 Messages 8 Publieurs 21.6k 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Pas facile à faire. Avec l’event de mort il faut check ses items de l’inventaire pour voir s’il a l’item en question, si c’est le cas le retirer de l’inventaire et le mettre dans une map de joueur, itemstack.
      Avec l’event de respawn, si le joueur est présent dans cette map on lui remet l’item associer et on retire l’entrée de la map.

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

        En gros faut faire sa sur deux event sur l’event de mort et de respawn si j’ai bien compris .

        EDIT: Est-ce que tu pourrais me redirigé vers un tutoriel ou alors m’aider ? 
        Merci 🙂

        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

          private Map <entityplayer, itemstack="">itemsToKeep = new HashMap<entityplayer, itemstack="">();
          
          @SubscribeEvent
          public void onDead(LivingDeathEvent event)
          {
          if(event.entityLiving instanceof EntityPlayer)
          {
          EntityPlayer player = (EntityPlayer)event.entityLiving;
          for(int i = 0; i < player.inventory.getSizeInventory(); i++)
          {
          ItemStack stack = player.inventory.getStackInSlot(i);
          if(stack != null && stack.getItem() == Item.getItemFromBlock(Blocks.dirt))
          {
          itemsToKeep.put(player, stack);
          player.inventory.setInventorySlotContents(i, null);
          }
          }
          }
          }
          
          @SubscribeEvent
          public void onRespawn(PlayerRespawnEvent event)
          {
          if(itemsToKeep.containsKey(event.player))
          {
          event.player.inventory.addItemStackToInventory(itemsToKeep.get(event.player));
          itemsToKeep.remove(event.player);
          }
          }
          ```</entityplayer,></entityplayer,>
          1 réponse Dernière réponse Répondre Citer 0
          • GabsG Hors-ligne
            Gabs
            dernière édition par

            Merci , mais tu n’as pas vraiment compris fin c’est presque sa je veux simplement faire l’inverse en gros l’item de terre je veux que il soit sauvegarder a chaque fois que on meurt et les autres que l’on a dans l’inventaire a la poubelle . et est-ce-que c’est possible de garder l’item en gros de faire un keepiventory mais juste sur l’item de terre en gros lorsque on respawn il revient directement dans l’inventaire mais que se soit le même item et pas un item give lors du respawn.

            “C’est un peu complexe et mal expliqué désolé :/”

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

              C’est le même stack, qui est d’abord enlevé lors de la mort puis remis dans l’inventaire du joueur lors du respawn.

              Moddeur 1.8

              Développeur Java

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

                Quand je respawn j’ai rien dans l’inventaire c’est pas normal si ?

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

                  Si tu as plusieurs stack il risque s’il y avoir un problème dans le code de Robin4002, par contre.

                  Moddeur 1.8

                  Développeur Java

                  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

                    Mon test à fonctionné exactement comme tu veux. J’avais du bois et un bloc de terre sur moi. Je suis mort, puis quand j’ai respawn le bloc de terre est revenu dans mon inventaire (je prend l’instance de l’itemstack donc même quantité et même tab nbt si présent).

                    Tu as mit quoi dans la condition ?
                    (en effet mon code ne fonctionne que avec un stack).

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

                      Moi marche pas comme ça en gros:

                      Alors j’ai 1 stack de bois comme toi et 1 stack de terre, je me /kill je respawn lors du respawn j’ai plus rien dans mon inventaire et quand je vais sur le lieux ou je suis mort je retrouve le stack de bois mais pas le stack de terre et moi se que je veux c’est que le stack de bois disparaisse et le stack de terre revienne dans mon inventaire.

                      Et comme code j’ai ça:

                      private Map <entityplayer, itemstack="">itemsToKeep = new HashMap<entityplayer, itemstack="">();
                      
                      @SubscribeEvent
                      public void onDead(LivingDeathEvent event)
                      {
                          if(event.entityLiving instanceof EntityPlayer)
                          {
                              EntityPlayer player = (EntityPlayer)event.entityLiving;
                              for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                              {
                                  ItemStack stack = player.inventory.getStackInSlot(i);
                                  if(stack != null && stack.getItem() == Item.getItemFromBlock(Blocks.dirt))
                                  {
                                      itemsToKeep.put(player, stack);
                                      player.inventory.setInventorySlotContents(i, null);
                                  }
                              }
                          }
                      }
                      
                      @SubscribeEvent
                      public void onRespawn(PlayerRespawnEvent event)
                      {
                          if(itemsToKeep.containsKey(event.player))
                          {
                              event.player.inventory.addItemStackToInventory(itemsToKeep.get(event.player));
                              itemsToKeep.remove(event.player);
                          }
                      }
                      
                      }
                      ```</entityplayer,></entityplayer,>
                      1 réponse Dernière réponse Répondre Citer 0
                      • SCAREXS Hors-ligne
                        SCAREX
                        dernière édition par

                        1 - Tu devrais utiliser les UUID plutôt que l’instance du joueur
                        2 - Ta HashMap devrait avoir une liste d’ItemStack car s’il y a plusieurs slots contenant de la dirt, seulement le dernier sera gardé
                        3 - Vérifie que l’inventaire du joueur n’est pas clear après l’appelle de l’événement

                        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
                        • GabsG Hors-ligne
                          Gabs
                          dernière édition par

                          Pour le 2 c’est pas garve car je vais changer par la suite je vais mettre un item de mon mod qui se stack par 1 et que le joueur aura qu’une fois pour la 3 l’inventaire n’est pas clear il me semble.

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

                            PlayerRespawnEvent est un event FML. As-tu enregistré ton GuiHandler dans le FMLEventBus ?

                            Moddeur 1.8

                            Développeur Java

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

                              J’ai ça chez moi:

                              @EventHandler
                              public void init(FMLInitializationEvent event) {
                              proxy.init(event);
                              NetworkRegistry.INSTANCE.registerGuiHandler(INSTANCE, proxy); 
                              MinecraftForge.EVENT_BUS.register(new EntityEvent());
                                  FMLCommonHandler.instance().bus().register(new EntityEvent());
                              
                              }
                              

                              PS: EntityEvent = la class avec onRespawn et onDead.

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

                                Ça devrait être bon, alors.

                                Moddeur 1.8

                                Développeur Java

                                1 réponse Dernière réponse Répondre Citer 1
                                • robin4002R Hors-ligne
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                  dernière édition par

                                  Non, ce ne sont que des event Forge.
                                  Je vais regarder de mon côté. Il faut clear pour chaque item si tu ne veux que rien reste.
                                  Et en effet scarex, mon code est perfectible (uuid et tableau comme tu as dit). Ce qu’il faudrait aussi faire c’est sauvegarder la HashMap dans la save au cas le joueur se déconnecte au lieu de respawn tout de suite et que le serveur est coupé entre temps.

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

                                    D’acc ^^ j’attend ton retour, merci à vous 😄

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

                                      Pourtant le package de PlayerRespawnEvent indique FML…

                                      Moddeur 1.8

                                      Développeur Java

                                      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

                                        Ah oui autant pour moi. Je suis en 1.8.9 donc tout passe par l’event bus de Forge.
                                        EDIT : ahhh c’est pour ça que ça ne fonctionne pas chez floriangabet.
                                        Dans ta classe principale mets :

                                        EntityEvent entityEvent = new EntityEvent();
                                        FMLCommonHandler.instance().bus().register(entityEvent );
                                        MinecraftForge.EVENT_BUS.register(entityEvent);
                                        

                                        Sinon tu aura deux instances différentes de EntityEvent, donc deux maps différentes.

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

                                          Je venais d’y penser…
                                          Sinon, tu peux aussi mettre la variable static.

                                          Moddeur 1.8

                                          Développeur Java

                                          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

                                            Oui, ça fonctionne aussi.
                                            Bon code modifier :

                                            private Map <uuid, itemstack[]="">itemsToKeep = new HashMap<uuid, itemstack[]="">();
                                            
                                            @SubscribeEvent
                                            public void onDead(LivingDeathEvent event)
                                            {
                                            if(event.entityLiving instanceof EntityPlayer)
                                            {
                                            EntityPlayer player = (EntityPlayer)event.entityLiving;
                                            ItemStack[] stackToKeep = new ItemStack[player.inventory.getSizeInventory()];
                                            for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                                            {
                                            ItemStack stack = player.inventory.getStackInSlot(i);
                                            if(stack != null)
                                            {
                                            if(stack.getItem() == Items.diamond_sword)
                                            {
                                            stackToKeep* = stack;
                                            }
                                            player.inventory.setInventorySlotContents(i, null);
                                            }
                                            }
                                            itemsToKeep.put(player.getGameProfile().getId(), stackToKeep);
                                            }
                                            }
                                            
                                            @SubscribeEvent
                                            public void onRespawn(PlayerRespawnEvent event)
                                            {
                                            if(itemsToKeep.containsKey(event.player.getGameProfile().getId()))
                                            {
                                            ItemStack[] stackToKeep = itemsToKeep.get(event.player.getGameProfile().getId());
                                            for(int i = 0; i < event.player.inventory.getSizeInventory(); i++)
                                            {
                                            event.player.inventory.setInventorySlotContents(i, stackToKeep*);
                                            }
                                            itemsToKeep.remove(event.player.getGameProfile().getId());
                                            }
                                            }
                                            

                                            UUID + tableau d’item stack.
                                            Donc prend en charge plusieurs items. Et supprimes les autres items. J’ai mit une épée en diamant, c’était pour m’assurer que les enchantements étaient gardé y comprit le nom custom.</uuid,></uuid,>

                                            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