Choix entre deux random



  • Voila, pour mon mod, je souhaite crée un StickOfRandom ou, à chaque clique de souris un évent "random" paris ce que j'ai programmé ce produit. Je m'explique :

    package com.tuto.mod.items;
    
    import java.util.Random;
    
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.item.EntityTNTPrimed;
    import net.minecraft.entity.item.EntityXPOrb;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ActionResult;
    import net.minecraft.util.EnumActionResult;
    import net.minecraft.util.EnumHand;
    import net.minecraft.world.World;
    
    public class Stick extends Item
    {
        public final Random rand = new Random();
    
        public Stick()
        {
        this.setMaxDamage(20);
        this.maxStackSize = 1;
        }
    
        @Override
           public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
           {
               if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT
               {
                   rand.nextInt(1);
                 **  if (rand.)**
                   {
                       EntityTNTPrimed entityTNT = new EntityTNTPrimed(world); // instance de la class de l'entité
                       entityTNT.setPosition(player.posX, player.posY, player.posZ); // je lui dit la position a la quelle elle doit spawner
                       world.spawnEntityInWorld(entityTNT); // je fait spawn l'entité
                   }
    
                 **  if (rand.)**
                   {
                       EntityItem entityItem = new EntityItem(world); // instance de la class de l'entité
                       entityItem.setPosition(player.posX, player.posY, player.posZ); // je lui dit la position a la quelle elle doit spawner
                       world.spawnEntityInWorld(entityItem); // je fait spawn l'entité
                   }
               }
               itemStack.damageItem(1, player);
               return new ActionResult(EnumActionResult.PASS, itemStack);
           }
    
    }
    

    Comme je pense que vous l'avez vu, je ne sais pas quoi mettre après le random, je veux qu'un choix entre deux nombre 0 et 1, lorsque 0 est choisi, le cas 1 avec la tnt est activé, mais lorsque 1 est choisi, le cas 2 avec un Item.
    Un truc du style : If (numéro random entre 0 et 1) == 0 alors …..
    Autre question, pour ma 2eme condition (spawn Item), comment on met l'Item que l'on veut ?
    Je ne sais pas si vous avez compris mais bon ...
    Je vous dit de suite, je ne sais pas bien coder en java (vous devez le voir à mes scripts, si il y a plusieurs erreur merci de me le dire et me faire part par exemple d'un script tous fait 😄

    Merci de vos éventuels réponses

    Tituya</itemstack>


  • Administrateurs

    Salut,

    if(rand.nextInt(1) == 0)
    {
        // code
    }
    else
    {
        // code
    }
    
    1. Utilises plutôt :
      EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ClassePrincipale.item));
      sinon ton entité item n'aura pas d'item.


  • Merci, quand tu me dis ça c'est logique 😄 je test demain pour voir, mon ordi est éteint___Et si je veux rajouter d'autres random, le unluck (TNT), le médium (diamant), le rare (poudre de topaze) et le legendaire (Topaze) je fait comment, le else est deja occupe donc ?___Enfin, chaque item on la même valeur, c'est juste un random



  • Tu fais un "int i = rand.nextInt(nb de cas possible);" et ensuite avec des if et else if, selon la valeur de i tu fais quelque chose.

    PS: Double poste interdit en - de 24h, faut éditer les messages.



  • Je ne comprend pas ce que tu veux dire avec ton int, je ne sais pas où le mettre moi xD voila mon code :

    package com.tuto.mod.items;
    
    import java.util.Random;
    
    import com.tuto.mod.init.ItemsMod;
    
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.item.EntityTNTPrimed;
    import net.minecraft.entity.item.EntityXPOrb;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ActionResult;
    import net.minecraft.util.EnumActionResult;
    import net.minecraft.util.EnumHand;
    import net.minecraft.world.World;
    
    public class Stick extends Item
    {
        public final Random rand = new Random();
    
        public Stick()
        {
        this.setMaxDamage(20);
        this.maxStackSize = 1;
        }
    
        @Override
           public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
           {
               if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT
               {
                   rand.nextInt(1);
                   if(rand.nextInt(1) == 0)
                   {
                       EntityTNTPrimed entityTNT = new EntityTNTPrimed(world); // instance de la class de l'entité
                       entityTNT.setPosition(player.posX, player.posY, player.posZ); // je lui dit la position a la quelle elle doit spawner
                       world.spawnEntityInWorld(entityTNT); // je fait spawn l'entité
                   }
                   else
                   {
                       EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ItemsMod.test));
                   }
    
               }
               itemStack.damageItem(1, player);
               return new ActionResult(EnumActionResult.PASS, itemStack);
           }
    
    }
    

    Je ne comprend pas, le random ne fonctionne pas, c'est toujours la TNT</itemstack>


  • Administrateurs

    package com.tuto.mod.items;
    
    import java.util.Random;
    
    import com.tuto.mod.init.ItemsMod;
    
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.item.EntityTNTPrimed;
    import net.minecraft.entity.item.EntityXPOrb;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ActionResult;
    import net.minecraft.util.EnumActionResult;
    import net.minecraft.util.EnumHand;
    import net.minecraft.world.World;
    
    public class Stick extends Item
    {
        public final Random rand = new Random();
    
        public Stick()
        {
        this.setMaxDamage(20);
        this.maxStackSize = 1;
        }
    
        @Override
           public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
           {
               if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT
               {
                   int i = rand.nextInt(3);
                   if(i == 0)
                   {
                       EntityTNTPrimed entityTNT = new EntityTNTPrimed(world); // instance de la class de l'entité
                       entityTNT.setPosition(player.posX, player.posY, player.posZ); // je lui dit la position a la quelle elle doit spawner
                       world.spawnEntityInWorld(entityTNT); // je fais spawn l'entité
                   }
                   else if(i == 1)
                   {
                       EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ItemsMod.test));
                       world.spawnEntityInWorld(entityItem); // je fais spawn l'entité
                   }
                   else if(i == 2)
                   {
                        // troisième truc
                   }
    
               }
               itemStack.damageItem(1, player);
               return new ActionResult(EnumActionResult.PASS, itemStack);
           }
    }
    

    J'avais pas vu avant l'erreur sur ton random.
    rand.nextInt(x) génère un nombre entre 0 inclut et x exclut.
    Donc rand.nextInt(1) ça donne toujours 0, il faut utiliser rand.nextInt(2) pour avoir 0 ou 1.</itemstack>



  • ça marche, je ferme le sujet merci de vos réponse !