Drop random et mort par joueur



  • Bonjour, je travaillais sur mon mod et j'ai voulu faire en sorte que les poulpes ait une chance de drop deux items en plus de celui vanilla( avec peu de chance de drop sur un de mes 2 items ) donc j'ai essayé ceci :

    @SubscribeEvent
      public void onLivingDrops(LivingDropsEvent event)
      {
          if(event.entity instanceof EntitySquid) 
          {
          Random rand = new Random();
          int randInt = rand.nextInt(30);
          if(randInt > 29)
          {
          EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY,
          event.entity.posZ,
        new ItemStack(ewifaction.ewilitemachine, 1));
      event.drops.add(newdrop);
          }
          else
          {
          EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY,
          event.entity.posZ,
        new ItemStack(ewifaction.SquidFood, 1));
      event.drops.add(newdrop);
          }
          }
    

    le problème est que ce code de fonctionne pas et j'ai un autre problème ; je veux que le drop ne s'effectue que si le mob est tué par  un joueur mais je n'y arrive pas.
    Merci d'avance pour votre aide.



  • Je sais comment rajouter un drop pour un mob en 1.9, je te donne le code après, juste une question PORQUOI CONTINUER DE CODER EN 1.7.10 ?!



  • car la 1.7.10 est la version sur la qu'elle j'ai commencé le jeu et donc que je l'affectionne tous particulièrement, de plus je trouve les nouvelles versions un peu inutiles bien que je suis contient que les API forge etc s'améliore avec mais le vanilla : sérieux des lamas, des ours polaires ? et je ne supporte pas le pvp 1.9.



  • Donc, je ne sais pas si le code fonctionne en 1.7.10, personnellement je l'ai fait en 1.9 sur des creeper pour faire spawner quelque fois l'item



  • et tu as utilisé le même code que moi ou un autre ?



  • J'en utilise un autre, je pense, le temps d'ouvrir eclipse pour moi. xD voila le code que j'utilise :

    public class Drop
    {
    
        public final Random rand = new Random();
         @SubscribeEvent
            public void onLivingDrops(LivingDropsEvent event)
            {
             if(event.getEntity() instanceof EntityCreeper)
             {
                EntityItem newdrop = new EntityItem(event.getEntity().worldObj, event.getEntity().posX, event.getEntity().posY, event.getEntity().posZ,
    new ItemStack(ItemsMod.dust, rand.nextInt(2), 0)); // 2 = le max de drop
                event.getDrops().add(newdrop);
             }
             if(event.getEntity() instanceof EntityDragon)
             {
                EntityItem newdrop = new EntityItem(event.getEntity().worldObj, event.getEntity().posX, event.getEntity().posY, event.getEntity().posZ,
    new ItemStack(ItemsMod.sup, rand.nextInt(10), 0));
                event.getDrops().add(newdrop);
             }
            }
    }
    

    J'ai crée une nouvelle classe dans le package de ton mod



  • Le code que tu ma envoyer fonctionne en 1.7.10 sous cette forme :

    public final Random rand = new Random();
    @SubscribeEvent
      public void onLivingDrops(LivingDropsEvent event)
      {
            if(event.entity instanceof EntitySquid)
            {
               EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY, event.entity.posZ,
    new ItemStack(ewifaction.mobsoul, rand.nextInt(1), 0));
               event.drops.add(newdrop);
            }
    

    le problème est que la il a 50% de chance 1 et 50% de chance de drop 0 mais se qu'il ai par exemple 5% de drop 1 et 95% de drop 1



  • peu etre que le 0 derrière signifie quelque chose, mais je ne sais pas quoi désoler ;c


  • Administrateurs

    Le deuxième argument d'item stack c'est la quantité.
    Généré des item stack de quantité 0 c'est pas vraiment une bonne idée …

      @SubscribeEvent
     public void onLivingDrops(LivingDropsEvent event)
     {
           if(event.entity instanceof EntitySquid && event.source.getEntity instanceof EntityPlayer)
           {
              EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY, event.entity.posZ,
    new ItemStack(ewifaction.mobsoul));
              if(event.entity.worldObj.rand.nextFloat() < 0.95F) // 95% de chance
              {
                   event.drops.add(newdrop);
              }
           }
    }
    


  • Oui j'ai réussi a aboutir a se code qui fonctionne : ```java
     @SubscribeEvent
      public void onLivingDrops(LivingDropsEvent event)
      {
    Random rand = new Random();
            if(event.entity instanceof EntitySquid)
            {
            int randInt = rand.nextInt(20);
            if(randInt == 19)
            {
            EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY,
          event.entity.posZ,
        new ItemStack(ewifaction.ewilitemachine, 1));
      event.drops.add(newdrop);
            }
            else
            {
            EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY,
          event.entity.posZ,
        new ItemStack(ewifaction.SquidFood, 1));
      event.drops.add(newdrop);
            }
            }

    il me manque juste la méthode pour savoir check si le mob a était tué par un joueur :
    ```java
    if(randInt == 19 && ) // après le && sa ira mais je ne vois pas quoi mettre
    


  • Merci j'ai fait ça  : ```java
    @SubscribeEvent
    public void onLivingDrops(LivingDropsEvent event)
    {
          if(event.entity instanceof EntityZombie || event.entity instanceof EntitySkeleton || event.entity instanceof EntitySpider || event.entity instanceof EntityCreeper || event.entity instanceof EntityCaveSpider  && event.source.getEntity() instanceof EntityPlayer)
          {
             EntityItem newdrop = new EntityItem(event.entity.worldObj, event.entity.posX, event.entity.posY, event.entity.posZ,
    new ItemStack(ewifaction.sool));
             if(event.entity.worldObj.rand.nextFloat() < 0.05F)
             {
                  event.drops.add(newdrop);
             }
          }

    et tous fonctionne bon jeu a vous et encore merci de votre aide