MFF

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

    Problème de drop random Item sur block

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    11 Messages 4 Publieurs 2.7k 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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      Salut tout le monde
      J’ai crée un nouveau block qui est censé soit me donner un item random parmis un tableau mais le problème est que c’est toujours le même item uqi est droppé. Par-exemple j’ai beau posé 3 block valise sur la même map, que je fasse clic droit sur le premier, le deuxième ou le dernier ils donneront toujours le même item.
      Je sais que c’est sûrement une erreur un peu débile mais je n’arrive tout de même pas à la voir ^^
      Voici mon code :

      
      package fr.mrplaigon.dyingcraft.common.block;
      
      import java.util.Random;
      
      import net.minecraft.block.material.Material;
      import net.minecraft.client.Minecraft;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.entity.item.EntityItem;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.init.Items;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.ChatComponentTranslation;
      import net.minecraft.util.EnumChatFormatting;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      import fr.mrplaigon.dyingcraft.client.core.ClientProxy;
      import fr.mrplaigon.dyingcraft.common.handler.ItemHandler;
      import fr.mrplaigon.dyingcraft.common.tileentity.TileEntityValise;
      
      public class Valise extends DyingCraftBlock 
      {
      private Random rand = new Random();
      private Item[] listItems = new Item[]
      {
      Items.gold_nugget, Items.blaze_rod, Items.apple, Items.stick
      };
      private Item droppedItem = listItems[rand.nextInt(listItems.length)];
      
      public Valise(Material material) 
      {
      super(material);
      }
      
      public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
          {
              this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
          }
      
      @Override
          public TileEntity createTileEntity(World world, int metadata)
          {
              return new TileEntityValise();
          }
      
          @Override
          public boolean hasTileEntity(int metadata)
          {
              return true;
          }
      
      public boolean isOpaqueCube() 
      {
      return false;
      }
      
      public boolean renderAsNormalBlock() 
      {
      return false;
      }
      
      public int getRenderType() 
      {
      return ClientProxy.tesrRenderId;
      }
      
      public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
          {
                  TileEntity tile = world.getTileEntity(x, y, z);
                  if(tile instanceof TileEntityValise)
                  {
                      int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                      ((TileEntityValise)tile).setDirection((byte)direction);
                  }
          }
      
      public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
      {
      TileEntity tile = world.getTileEntity(x, y, z);
      if(tile instanceof TileEntityValise)
      {
      if(((TileEntityValise)tile).isChecked())
      {
      player.addChatComponentMessage(new ChatComponentTranslation(EnumChatFormatting.AQUA + "Cette valise a déjà été fouillée. Revenez plus tard", new Object[0]));
      }
      else
      {
      if (!world.isRemote) 
      {
      if(player.inventory.addItemStackToInventory(new ItemStack(droppedItem))) 
      {
      System.out.println("Item bien reçu");
      } 
      else if(!player.inventory.addItemStackToInventory(new ItemStack(droppedItem))) 
      {
      player.dropItem(droppedItem, 1);
      System.out.println("Item bien droppé");
      }
      }
      }
      }
      return true;
      }
      }
      
      1 réponse Dernière réponse Répondre Citer 0
      • DiangleD Hors-ligne
        Diangle
        dernière édition par

        il drop quel item pour le coup ?

        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 Item droppedItem = listItems[rand.nextInt(listItems.length)];
          Devrait être une variable local dans ta fonction onBlockActivated.
          Car actuellement la valeur est initialisé en même temps que le bloc et ne change plus le temps que le jeu n’est pas relancé.

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

            @‘robin4002’:

            private Item droppedItem = listItems[rand.nextInt(listItems.length)];
            Devrait être une variable local dans ta fonction onBlockActivated.
            Car actuellement la valeur est initialisé en même temps que le bloc et ne change plus le temps que le jeu n’est pas relancé.

            Ok ça marche super merci Robin
            Et Diangle c’était souvent la blaze rod qu’il me droppait 🙂

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

              J’avais juste une autre question au passage avant de passer ça en résolu.
              Quand je fais clique droit plusieurs y’a que 2 ou 3 fois où l’item apparaît dans mon inventaire. Les autre fois je suis obligé de déco-reco pour voir ce qui m’a été givé. Je crois qu’il faut mettre à jour l’inventaire mais je ne me souviens plus de la méthode exacte.
              Merci d’avance

              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

                player.inventory.makeDirty() ? Je ne suis pas sûr.

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

                  Tu mets if(player.adddItem…) et ensuite tu fais else if(!player.addItem…) ça doit être juste un else car là tu ajoutes 2 fois l’Item.

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

                    Voici ma méthode actuelle toujours avec le même problème de mise à joru de l’inventaire :

                    
                    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                    {
                    TileEntity tile = world.getTileEntity(x, y, z);
                    if(tile instanceof TileEntityValise)
                    {
                    if(((TileEntityValise)tile).isChecked())
                    {
                    player.addChatComponentMessage(new ChatComponentTranslation(EnumChatFormatting.AQUA + "Cette valise a déjà été fouillée. Revenez plus tard", new Object[0]));
                    }
                    else
                    {
                    if (!world.isRemote)
                    {
                    Item droppedItem = listItems[rand.nextInt(listItems.length)];
                    if (player.inventory.addItemStackToInventory(new ItemStack(droppedItem)))
                    {
                    //player.dropItem(droppedItem, 1);
                    System.out.println("Item bien reçu ?");
                    player.inventory.markDirty();
                    }
                    }
                    }
                    }
                    return true;
                    }
                    

                    Ok, c’est bon prob réglé juste la condition du isRemote à changer 🙂

                    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

                      if (!player.inventory.addItemStackToInventory(new ItemStack(droppedItem)))
                      {
                           player.dropItem(droppedItem, 1);
                      }
                      player.inventory.markDirty();
                      

                      Sinon tu vire le !world.isRemote, ça règle aussi le problème.

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

                        Non ça ne le règle pas car la méthode dropItem bug lorsqu’elle est appelée par les 2 Sides. Sa fait apparaître 2 fois l’item mais y’en a 1 qui est bugué et non-ramassable. Je viens de tester à l’instant.

                        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, pour le spawn d’une entité il faut toujours la condition.

                          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