Problème de pickup dans inventaire custom



  • Bonjour,

    j'ai un problème de drop sur mon inventaire custom je passe par l'event EntityItemPickupEvent mais ceci ne fonctionne pas tout le temps car par moment le drop passe en priorité sur l'inventaire de base.

    Et le second problème et que je n'arrive pas à trouvé un moyen de vérifié si l'entité que je ramasse est déjà stocké dans un slot pour l'ajouté a celui ci au lieu de remplir a chaque fois un slot vide…

    Voici mon code actuelle

    @SubscribeEvent
     public void Drop(EntityItemPickupEvent event)
     {
       if ((event.entityLiving instanceof EntityPlayer))
       {
         int j = 0;
         for (int i = 11; (i <= 50) && (j == 0); i++)
         {
          EntityPlayer player = (EntityPlayer)event.entity;
          ExtendedEntityPropCaracteristique ext = ExtendedEntityPropCaracteristique.get(player);
    
        if (ext.inventory.getStackInSlot(i) == null)
        {    
             ext.inventory.setInventorySlotContents(i, event.item.getEntityItem());
         event.item.setDead();
                 System.out.println(event.item.getEntityItem().getDisplayName());
                 System.out.println(i);
                 j = 1;
        }
        else
            {
            event.setCanceled(true);
            }
         }
       }
     }
    

    Voila merci d'avance pour votre aide.


  • Administrateurs

    Salut,
    Si tu veux que l'inventaire de base soit remplit avant le tient, il faut d'abord vérifier s'il y a de place dans ce dernier.
    Et si oui, il faut rien faire (le code qui remplit l'inventaire de base est appelé après EntityItemPickupEvent).

    Pour stacker avec un item existant, il faut vérifier si l'item en question est déjà présent dans l'inventaire. Rien de compliqué.

    (le mot drop n'est pas du tout adapté à la situation. drop = laisser tomber. Là on parle du ramassage, donc pickup serait plus adapté comme nom de fonction et pour le titre de la discussion).



  • Merci mais je voudrais ignoré le pick up dans l'inventaire de base.

    et pour stacker je ne trouve pas la fonction pour vérifier si l'item est déjà présent …



  • InventoryPlayer#hasItem, il me semble


  • Administrateurs

    Ou encore :
    if(ext.inventory.getStackInSlot(i) != null && ext.inventory.getStackInSlot(i).getItem() == event.item.getEntityItem().getItem())



  • Merci pour ton aide Robin,

    Je suis vraiment bête je n'avais pas fait attention que  ext.inventory.getStackInSlot(i) avait des sous fonction 😢

    Tout fonctionne merci beaucoup j'ai enfin finit complètement mon inventaire custom !!!!! et il marche en multijoueur 😄