• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Boucle dans un boolean

    1.7.x
    1.7.10
    5
    18
    1868
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Folgansky
      Folgansky Correcteurs last edited by

      Re, Je suis en difficulté avec un bloc.
      Fonctionnement voulu: Quand on clique dessus cela consomme un item (nécessaire d’avoir sur soi sinon rien ne se passe) et on a ensuite différentes issues suivant différentes proba.

      Certaines de ces issues doivent give le joueur d’un certain nombre d’item. Pour cela je pensais utiliser simplement une boucle for, puis j’ai testé la boucle while (sans toutfois vraiment la connaître).

      Voilà en tout le résultat actuel c’est que le joueur ne reçoit qu’un seul exemplaire de l’item au lieu de 500 (Le JackPot de la machine à sous en gros)

      Voici la fonction centrale:

      
          public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz)
          {
              Random rand = new Random();
              ItemStack jeton = new ItemStack(ModPg2.itemMetadata, 1, 4);
              if (player.inventory.hasItem(ModPg2.itemJackPot))            
              {
                  int randInt = rand.nextInt(1000);
                  if (randInt >= 0)
                  {   // 1/1000
                      int i = 1;
                      while(i < 500)
                      {
                          i += 1;
                          if (!player.inventory.addItemStackToInventory(jeton))
                          {
                              player.entityDropItem(jeton, 1);
                          }
                      }
      //                for(int j = 0 ; j < 500; ++j)
      //                {
      //                    if (!player.inventory.addItemStackToInventory(jeton))
      //                    {
      //                        player.entityDropItem(jeton, 1);
      //                    }                    
      //                }
                      if(!world.isRemote)
                      {
                          ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.DARK_RED + "JACKPOT !!!");
                          (player).addChatComponentMessage(comp);
                      }
                  }
                  if (randInt > 0 && randInt < 10)
                  {   // 10/1000
                      if(!world.isRemote)
                      {
                          ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.GRAY + "Gagné, moyen lot.");
                          (player).addChatComponentMessage(comp);
                      }
                      for(int j = 0 ; j < 25; ++j)
                      {
                          if (!player.inventory.addItemStackToInventory(jeton))
                          {
                              player.entityDropItem(jeton, 1);
                          }    
                      }
                  }
                  if (randInt >= 10 && randInt < 449)
                  {   // 100/1000
                      if(!world.isRemote)
                      {
                          ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.GRAY + "Gagné, petit lot.");
                          (player).addChatComponentMessage(comp);
                      }
                      if (!player.inventory.addItemStackToInventory(jeton))
                      {
                          player.entityDropItem(jeton, 1);
                      }    
                  }
                  if (randInt >= 450)
                  {   // 500/1000
                      if(!world.isRemote)
                      {
                          ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.GRAY + "Perdu");
                          (player).addChatComponentMessage(comp);
                      }
                  }
                  player.inventory.consumeInventoryItem(ModPg2.itemJackPot);
                  return true;
              }
              return false;
          }
      
      

      J’avoue tout de suite mes difficultés sur des fonctions à valeur booléenne, j’avais eu quelques soucis de Side aussi mais ça c’est réglé.

      1 Reply Last reply Reply Quote 0
      • AymericRed
        AymericRed last edited by

        Je ne vois pas pourquoi ça ne marche pas mais quand du ajouté le stack au joueur, fait jeton.copy()
        Sinon il y a une autre solution, plus simple, tu mets la stackSize et 500 et, normalement, les items sont répartis automatiquemen

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

        1 Reply Last reply Reply Quote 0
        • Dylem
          Dylem last edited by

          la ce que ton code fait c’est que le joueur drop 500 fois l’item s’il ne peut pas être ajouté à l’inventaire ? Ca a pas beaucoup de sens.
          Sinon suis le tuto en java du site du zéro ça peut t’être utile !

          Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

          1 Reply Last reply Reply Quote 0
          • Folgansky
            Folgansky Correcteurs last edited by

            ça a du sens si l’inventaire du type est plein. C’est un bout de code que robin avait donné sur un autre post.

            Je regarde pour le .copy() dont je ne connais pas le fonctionnement.

            Pour ce qui est du site du zéro, je vais dire à la fois oui et non, merci du conseil hein.

            1 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

              Le addItemStackToInventory doit être dans une condition if(!world.isRemote) (idem pour le drop)

              drop l’item dans une boucle qui va 0 à 500 n’est pas une bonne idée, tu vas causer des lags.

              1 Reply Last reply Reply Quote 0
              • Dylem
                Dylem last edited by

                J’ai testé ton code et ça marche, remplace juste le 1 par 0 dans player.entityDropItem (la valeur c’est la position par rapport au joueur donc si c’est pas sur 0 le joueur n’y est pas et ne peut pas drop l’item).

                Edit : voici ce que j’ai testé pour info :

                for(int j = 0 ; j < 500; ++j) {
                    if (!player.inventory.addItemStackToInventory(jeton))
                         player.entityDropItem(jeton, 0);               
                }
                

                Avec jeton un ItemStack d’Items.apple

                Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                1 Reply Last reply Reply Quote 0
                • Folgansky
                  Folgansky Correcteurs last edited by

                  Bah je suis d’accord Robin, pour rester fidèle à ton bout de code, mais bizarrement j’avais un problème de Side en faisant comme ça (allez comprendre)

                  Par contre Dylem, quand tu as testé ça t’a bien give les 500? oO  (en modifiant la condition, bien sûr)

                  Moi çe ne m’en give qu’un.

                  1 Reply Last reply Reply Quote 0
                  • Dylem
                    Dylem last edited by

                    @‘Toutoune1008’:

                    Bah je suis d’accord Robin, pour rester fidèle à ton bout de code, mais bizarrement j’avais un problème de Side en faisant comme ça (allez comprendre)

                    Par contre Dylem, quand tu as testé ça t’a bien give les 500? oO  (en modifiant la condition, bien sûr)

                    Moi çe ne m’en give qu’un.

                    oui ça a drop 500 pommes devant mes pieds instantanément. Ton problème ne vient donc pas de la (si tu as modifié 1 à 0, mais maintenant que j’y pense 1 devrait marcher aussi et spawn les pommes au milieu de ton corps)

                    Edit : Mais j’ai testé le code en 1.8.9, c’est peut-être pour ça ?

                    Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                    1 Reply Last reply Reply Quote 0
                    • Folgansky
                      Folgansky Correcteurs last edited by

                      Oui j’ai bien mis 0 qui correspond à la hauteur de drop simplement me semble.

                      Je suis en 1.7.10, pas en 1.8.9 Xd

                      La seule différence est que je give un item à metadata… Je poursuis mes tests

                      1 Reply Last reply Reply Quote 0
                      • Dylem
                        Dylem last edited by

                        Essaie de remplacer ton jeton par new ItemStack(Items.apple) comme ça si ça marche on sera sur que le problème vient du jeton 🙂

                        Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                        1 Reply Last reply Reply Quote 0
                        • Folgansky
                          Folgansky Correcteurs last edited by

                          Eh bien… Non… Rien n’a changé, ça ne me donne qu’une pomme. Belle, rouge mais bien seule x]
                          Je vais voir ça comme un problème insurmontable et botter en touche, je vais faire give un autre item qui aurra la valeur de 500.

                          C’est une contrainte que j’espèrais pouvoir contourner (ou simplement expliquer).

                          1 Reply Last reply Reply Quote 0
                          • SCAREX
                            SCAREX last edited by

                            Renvoi le code

                            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 Reply Last reply Reply Quote 0
                            • Folgansky
                              Folgansky Correcteurs last edited by

                              Voici la classe entière:

                              package fr.powergame.modpg2.common;
                              
                              import java.util.Random;
                              
                              import net.minecraft.block.Block;
                              import net.minecraft.block.material.Material;
                              import net.minecraft.entity.EntityLivingBase;
                              import net.minecraft.entity.player.EntityPlayer;
                              import net.minecraft.init.Items;
                              import net.minecraft.item.ItemStack;
                              import net.minecraft.tileentity.TileEntity;
                              import net.minecraft.util.ChatComponentText;
                              import net.minecraft.util.EnumChatFormatting;
                              import net.minecraft.util.MathHelper;
                              import net.minecraft.world.IBlockAccess;
                              import net.minecraft.world.World;
                              import net.minecraftforge.common.util.ForgeDirection;
                              import cpw.mods.fml.relauncher.Side;
                              import cpw.mods.fml.relauncher.SideOnly;
                              import fr.powergame.modpg2.client.TileEntityJackPot;
                              import fr.powergame.modpg2.proxy.ClientProxy;
                              
                              public class JackPot extends Block
                              {
                                  protected JackPot(Material mat)
                                  {
                                      super(mat);
                                  }
                              
                                  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);
                                  }
                              
                                  public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz)
                                  {
                                      Random rand = new Random();
                                      //ItemStack jeton = new ItemStack(ModPg2.itemMetadata, 1, 4);Items.apple
                                      ItemStack jeton = new ItemStack(Items.apple);
                                      if (player.inventory.hasItem(ModPg2.itemJackPot))            
                                      {
                                          int randInt = rand.nextInt(1000);
                                          if (randInt >= 0)
                                          {   // 1/1000
                                              player.triggerAchievement(ModPg2.achievementJackPot);
                                              for(int j = 0 ; j < 500; ++j)
                                              {
                                                  if (!player.inventory.addItemStackToInventory(jeton))
                                                  {
                                                      player.entityDropItem(jeton, 0);
                                                  }                    
                                              }
                                              if(!world.isRemote)
                                              {
                                                  ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.DARK_RED + "JACKPOT !!!");
                                                  (player).addChatComponentMessage(comp);
                                              }
                                          }
                                          if (randInt > 0 && randInt < 10)
                                          {   // 10/1000
                                              if(!world.isRemote)
                                              {
                                                  ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.GRAY + "Gagné, moyen lot.");
                                                  (player).addChatComponentMessage(comp);
                                              }
                                              for(int j = 0 ; j < 25; ++j)
                                              {
                                                  if (!player.inventory.addItemStackToInventory(jeton))
                                                  {
                                                      player.entityDropItem(jeton, 1);
                                                  }    
                                              }
                                          }
                                          if (randInt >= 10 && randInt < 449)
                                          {   // 100/1000
                                              if(!world.isRemote)
                                              {
                                                  ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.GRAY + "Gagné, petit lot.");
                                                  (player).addChatComponentMessage(comp);
                                              }
                                              if (!player.inventory.addItemStackToInventory(jeton))
                                              {
                                                  player.entityDropItem(jeton, 1);
                                              }    
                                          }
                                          if (randInt >= 450)
                                          {   // 500/1000
                                              if(!world.isRemote)
                                              {
                                                  ChatComponentText comp = new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power JackPot > " + EnumChatFormatting.GRAY + "Perdu");
                                                  (player).addChatComponentMessage(comp);
                                              }
                                          }
                                          player.inventory.consumeInventoryItem(ModPg2.itemJackPot);
                                          return true;
                                      }
                                      return false;
                                  }
                              
                                  public int damageDropped(int metadata)
                                  {
                                      return metadata;
                                  }
                              
                                  public boolean hasTileEntity(int metadata)
                                  {
                                      return true;
                                  }      
                              
                                  public TileEntity createTileEntity(World world, int metadata)
                                  {
                                      return new TileEntityJackPot();
                                  }
                              
                                  public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                                  {
                                      if(stack.getItemDamage() == 0)
                              
                                      {
                                          TileEntity tile = world.getTileEntity(x, y, z);
                                          if(tile instanceof TileEntityJackPot)
                                          {
                                              int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                                              ((TileEntityJackPot)tile).setDirection((byte)direction);
                                          }
                                      }
                                  }
                              
                                  @Override
                                  public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
                                  {
                                      if((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote && world.getBlockMetadata(x, y, z) == 0)
                                      {
                                          TileEntity tile = world.getTileEntity(x, y, z);
                                          if(tile instanceof TileEntityJackPot)
                                          {
                                              TileEntityJackPot tileDirectional = (TileEntityJackPot)tile;
                                              byte direction = tileDirectional.getDirection();
                                              direction++;
                                              if(direction > 3)
                                              {
                                                  direction = 0;
                                              }
                                              tileDirectional.setDirection(direction);
                                              return true;
                                          }
                                      }
                                      return false;
                                  }
                              
                                  public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
                                  {
                                      return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] {ForgeDirection.UP, ForgeDirection.DOWN} : ForgeDirection.VALID_DIRECTIONS;
                                  }
                              
                                  public boolean isOpaqueCube()
                                  {
                                      return false;
                                  }       
                              
                                  public boolean renderAsNormalBlock()
                                  {
                                      return false;
                                  }
                              
                                  public boolean canBeCollidedWith()
                                  {
                                      return true;
                                  }
                              
                                  @SideOnly(Side.CLIENT)
                                  public int getRenderType()
                                  {
                                      return ClientProxy.tesrRenderId;
                                  }    
                              }
                              
                              1 Reply Last reply Reply Quote 0
                              • SCAREX
                                SCAREX last edited by

                                Essaie de re-créer une instance d’ItemStack à chaque boucle

                                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 Reply Last reply Reply Quote 0
                                • Folgansky
                                  Folgansky Correcteurs last edited by

                                  Bingo Scarex ^^

                                  C’était bien ça, merci. (et étrange)

                                  1 Reply Last reply Reply Quote 0
                                  • AymericRed
                                    AymericRed last edited by

                                    Mettre le .copy() revenait à faire exactement la même chose.

                                    Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                    AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                    Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                    Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                    1 Reply Last reply Reply Quote 0
                                    • SCAREX
                                      SCAREX last edited by

                                      Aussi, c’est juste que 2 EntityItem ne peuvent pas partager une même instance d’ItemStack

                                      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 Reply Last reply Reply Quote 0
                                      • AymericRed
                                        AymericRed last edited by

                                        Ouais voilà sauf que là c’était pas 2 mais 500

                                        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                        1 Reply Last reply Reply Quote 0
                                        • 1 / 1
                                        • First post
                                          Last post
                                        Design by Woryk
                                        Contact / Mentions Légales

                                        MINECRAFT FORGE FRANCE © 2018

                                        Powered by NodeBB