• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Plusieurs questions

    1.8.x
    1.8
    3
    11
    1928
    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.
    • Gabs
      Gabs dernière édition par

      Bonsoir,

      Mes questions:

      Est-il possible de faire un cooldown avec le rightclick je m’explique:

      Par exemple dans se cas lorsque je fais un simple clic droit sur un bloc de bedrock il se change en un bloc “block1” de mon mod est-il possible de mettre un temps par exemple le joueur doit resté cliqué pendant 5 secondes pour que le bloc change et pas en faisant un simple clic droit ( je sais pas si vous me suivez sinon dites le moi)

      @SubscribeEvent
      public void onInteract3(PlayerInteractEvent e) {
      if(!e.world.isRemote) {
      ItemStack stack = e.entityPlayer.getHeldItem();
      if(stack != null && stack.getItem() == CSCItems.balai && e.action == Action.RIGHT_CLICK_BLOCK) {
      BlockPos pos = e.pos;
      IBlockState state = e.world.getBlockState(pos);
      if(state.getBlock() == Blocks.bedrock) {
      
      e.world.setBlockState(new BlockPos(pos.getX(), pos.getY(), pos.getZ()), CSCBlocks.block1.getDefaultState());
      
      }
      }
      }
      
      }
      
      

      J’ai une autres question aussi:

      Avec ce code j’ai une chance sur 4 de faire spawn une enclume sur mon bloc de bedrock.
      (On revient a l’event juste au dessus)
      Je voudrais faire en sorte de pouvoir changer mon bloc de bedrock en bloc “block1” seulement quand l’enclume a était enlever .
      Faire en sorte que si l’encule est encore sur mon bloc de bedrock l’event au dessus est alors impossible.

      
      public class block1 extends Block {
      
      protected block1(Material materialIn) {
      super(materialIn);
      this.setTickRandomly(true);
      }
      
          public int tickRate(World worldIn)
          {
              return 900 * 20;
          }
      
          public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) 
          {
          world.scheduleUpdate(pos, this, this.tickRate(world));
      world.setBlockState(new BlockPos(pos.getX(), pos.getY(), pos.getZ()), Blocks.bedrock.getDefaultState());
      
      if(world.rand.nextInt(4) == 0) // une chance sur 4
      {
      world.setBlockState(new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ()), Blocks.anvil.getDefaultState());
      }
      }
      
          public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) 
          {
          worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
          }
      
      }
      
      

      Est ce que mes question sont-elle possible ? Si oui comment procédé !

      Merci 🙂

      1 réponse Dernière réponse Répondre Citer 0
      • Benjamin Loison
        Benjamin Loison dernière édition par

        “Est ce que mes question sont-elle possible ?”

        N’oublies jamais que tout est possible ^^ ! (à condition d’être déterminé)

        Pour ta première question:

        Si j’étais toi je regarderai les fonctions de Block.class de ta version de Minecraft, soit tu y trouveras directement ce dont tu as besoin ou un event appeller à chaque tick, à chaque tick tu peux checker si le joueur interragit avec le bloc 😉

        Pour ta seconde question:

        Euh si j’ai bien compris ta demande est plutôt simple

        “Je voudrais faire en sorte de pouvoir changer mon bloc de bedrock en bloc “block1” seulement quand l’enclume a était enlever .
        Faire en sorte que si l’encule est encore sur mon bloc de bedrock l’event au dessus est alors impossible.”

        if(world.getBlock(x, y + 1, z) != Block.anvil)
        //tonCodeDeTonEvent
        

        >! Développeur de Altis-Life (Arma III) sur Minecraft !
        >! Site web     : https://lemnoslife.com

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

          Pour les délais sur le clic droit, il y a la nourriture, l’arc, etc …
          Suffit de s’inspirer du code. (setItemInUse / onItemUse / etc …).

          1 réponse Dernière réponse Répondre Citer 0
          • Gabs
            Gabs dernière édition par

            @‘Benjamin Loison’:

            “Est ce que mes question sont-elle possible ?”

            N’oublies jamais que tout est possible ^^ ! (à condition d’être déterminé)

            Pour ta première question:

            Si j’étais toi je regarderai les fonctions de Block.class de ta version de Minecraft, soit tu y trouveras directement ce dont tu as besoin ou un event appeller à chaque tick, à chaque tick tu peux checker si le joueur interragit avec le bloc 😉

            Pour ta seconde question:

            Euh si j’ai bien compris ta demande est plutôt simple

            “Je voudrais faire en sorte de pouvoir changer mon bloc de bedrock en bloc “block1” seulement quand l’enclume a était enlever .
            Faire en sorte que si l’encule est encore sur mon bloc de bedrock l’event au dessus est alors impossible.”

            if(world.getBlock(x, y + 1, z) != Block.anvil)
               //tonCodeDeTonEvent
            

            Salut !

            D’accord merci, j’avais pas du tout pensés au if(world.getblock…) ^^

            Merci robin je vais essayer ça

            Merci à vous deux 🙂

            1 réponse Dernière réponse Répondre Citer 0
            • Gabs
              Gabs dernière édition par

              Re,

              Alors merci benjamin j’ai réussis a faire se que je voulais.

              Robin, pour le onitemuse setiteminuse etc… Comment je peux faire ? car moi c’est par un event que je fais la modification du bloc pas avec la classe de l’item.

              1 réponse Dernière réponse Répondre Citer 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                Faut le faire depuis la classe.
                Je ne vois rien qui te l’empêche si ?

                1 réponse Dernière réponse Répondre Citer 0
                • Gabs
                  Gabs dernière édition par

                  Non rien,

                  Alors j’ai fais ça:

                  
                  package com.CSC.net.item;
                  
                  import com.CSC.net.block.CSCBlocks;
                  
                  import net.minecraft.block.state.IBlockState;
                  import net.minecraft.entity.player.EntityPlayer;
                  import net.minecraft.init.Blocks;
                  import net.minecraft.item.EnumAction;
                  import net.minecraft.item.Item;
                  import net.minecraft.item.ItemStack;
                  import net.minecraft.util.BlockPos;
                  import net.minecraft.util.ChatComponentText;
                  import net.minecraft.util.EnumChatFormatting;
                  import net.minecraft.util.EnumFacing;
                  import net.minecraft.world.World;
                  import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
                  
                  public class balai extends Item {
                  
                      public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ)
                      {
                      if(!worldIn.isRemote) {
                  if(stack != null && stack.getItem() == CSCItems.balai) {
                  IBlockState state = worldIn.getBlockState(pos);
                  if(state.getBlock() == Blocks.bedrock && worldIn.getBlockState(new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ())).getBlock() != Blocks.anvil) {
                  if(stack.getItemUseAction() == EnumAction.BOW)
                  worldIn.setBlockState(new BlockPos(pos.getX(), pos.getY(), pos.getZ()), CSCBlocks.block1.getDefaultState());
                  }
                  
                  else if(worldIn.getBlockState(new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ())).getBlock() == Blocks.anvil)
                  {
                  playerIn.addChatMessage(new ChatComponentText("Vous ne pouvez pas néttoyez ce bloc car il y a une poubelle dessus, enlevez d'abord la poubelle avant de néttoyer ce bloc !"));
                  }
                  else
                  {
                  playerIn.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Action impossible."));
                  }
                  
                  }
                  }
                  
                          return false;
                      }
                  
                      public EnumAction getItemUseAction(ItemStack stack)
                      {
                          return EnumAction.BOW;
                      }
                  
                  }
                  
                  

                  Mais toujours pas de cooldown je clique une fois le bloc se change direct .

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        public int getMaxItemUseDuration(ItemStack stack)
                        {
                            return 32; // durée
                        }
                    
                        public EnumAction getItemUseAction(ItemStack stack)
                        {
                            return EnumAction.EAT; // type d'animation
                        }
                    
                        public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn)
                        {
                            playerIn.setItemInUse(itemStackIn, this.getMaxItemUseDuration(itemStackIn)); // met l'item en utilisation
                            return itemStackIn;
                        }
                    
                        public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn)
                        {
                            // ton action à la fin du temps
                    
                            return stack;
                        }
                    
                    1 réponse Dernière réponse Répondre Citer 0
                    • Gabs
                      Gabs dernière édition par

                      Y’a pas blockpos du coup j’ai fais comme ça mais ça marche pas:

                      
                      package com.CSC.net.item;
                      
                      import com.CSC.net.block.CSCBlocks;
                      
                      import net.minecraft.block.state.IBlockState;
                      import net.minecraft.entity.player.EntityPlayer;
                      import net.minecraft.init.Blocks;
                      import net.minecraft.item.EnumAction;
                      import net.minecraft.item.Item;
                      import net.minecraft.item.ItemStack;
                      import net.minecraft.util.BlockPos;
                      import net.minecraft.util.ChatComponentText;
                      import net.minecraft.util.EnumChatFormatting;
                      import net.minecraft.util.EnumFacing;
                      import net.minecraft.world.World;
                      import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
                      
                      public class balai extends Item {
                      
                      private BlockPos pos2;
                      
                          public int getMaxItemUseDuration(ItemStack stack)
                          {
                              return 32; // durée
                          }
                      
                          public EnumAction getItemUseAction(ItemStack stack)
                          {
                              return EnumAction.BOW; // type d'animation
                          }
                      
                          public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ)
                          {
                          pos2 = pos;
                              return false;
                          }
                      
                          public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn)
                          {
                              playerIn.setItemInUse(itemStackIn, this.getMaxItemUseDuration(itemStackIn)); // met l'item en utilisation
                              return itemStackIn;
                          }
                      
                          public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn)
                          {
                          if(!worldIn.isRemote) {
                      if(stack != null && stack.getItem() == CSCItems.balai) {
                      BlockPos pos = pos2;
                      IBlockState state = worldIn.getBlockState(pos);
                      if(state.getBlock() == CSCBlocks.block_sale && worldIn.getBlockState(new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ())).getBlock() != Blocks.anvil) {
                      if(stack.getItemUseAction() == EnumAction.BOW)
                      worldIn.setBlockState(new BlockPos(pos.getX(), pos.getY(), pos.getZ()), CSCBlocks.block_propre.getDefaultState());
                      }
                      else if(worldIn.getBlockState(new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ())).getBlock() == Blocks.anvil)
                      {
                      playerIn.addChatMessage(new ChatComponentText("Vous ne pouvez pas néttoyez ce bloc car il y a une poubelle dessus, enlevez d'abord la poubelle avant de néttoyer ce bloc !"));
                      }
                      else
                      {
                      playerIn.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Action impossible."));
                      }
                      }
                          }
                      
                              return stack;
                          }
                      
                      }
                      
                      
                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        Non, ça ne risque pas de fonctionner …
                        Pour savoir où le curseur pointe il faut faire un traceRay

                        1 réponse Dernière réponse Répondre Citer 0
                        • Gabs
                          Gabs dernière édition par

                          @‘robin4002’:

                          Non, ça ne risque pas de fonctionner …
                          Pour savoir où le curseur pointe il faut faire un traceRay

                          merci !

                          1 réponse Dernière réponse Répondre Citer 0
                          • 1 / 1
                          • Premier message
                            Dernier message
                          Design by Woryk
                          Contact / Mentions Légales

                          MINECRAFT FORGE FRANCE © 2018

                          Powered by NodeBB