MFF

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

    Un Timer

    Planifier Épinglé Verrouillé Déplacé Résolu Anciennes versions
    1.6.4
    18 Messages 6 Publieurs 5.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.
    • Nolan-XXN Hors-ligne
      Nolan-XX
      dernière édition par

      @‘robin4002’:

      package tutoriel.common;
      
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.world.World;
      
      public class ItemTutorial extends Item
      {
      private boolean canShot;
      
      public ItemTutorial(int id)
      {
      super(id);
      this.setCreativeTab(CreativeTabs.tabMaterials);
      }
      
      public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
      {
      if(canShot)
      {
      world.playSoundAtEntity(player, "modtutoriel:explosion", 1.0F, 1.0F);
      world.newExplosion(null, player.posX, player.posY, player.posZ, 5, true, true);
      canShot = false;
      }
      return stack;
      }
      
      public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean hasItemInHand)
      {
      if(hasItemInHand && world.getWorldTime() % 16L == 0L && entity instanceof EntityPlayer)
      {
      EntityPlayer player = (EntityPlayer)entity;
      player.addChatMessage("tu peux tirer");
      canShot = true;
      }
      }
      }
      

      Bon parcontre je l’ai fais en 1.6, mais normalement ça devrait aussi fonctionner. Je me sers du temps de minecraft, si le reste de la division par 16 donne 0 alors le canshot passe sur true. J’ai essayé, ça marche très bien, avec ce code je peux créer une explosion tout les 3 secondes environ, alors que si je mets directement le code pour l’explosion or de la condition, je peux faire une explosion à chaque clic droit (donc facile 5 par secondes)

      Avec ce code , je ne peux plus tirer et le message “tu peux tirer” s’affiche en boucle :s …

      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

        Tu as fais un copier/coller exacte ou tu as juste repris ce que tu avais besoin ?
        Pour le message, il te suffit d’enlever
        EntityPlayer player = (EntityPlayer)entity;
        player.addChatMessage(“tu peux tirer”);
        Je l’avais mit pour les tests, tu peux l’enlever

        1 réponse Dernière réponse Répondre Citer 0
        • Nolan-XXN Hors-ligne
          Nolan-XX
          dernière édition par

          J’ai juste repris ce dont j’avais besoin …
          Mon code :

          package mods.nono.MGSmod.weapons;
          
          import mods.nono.MGSmod.ShotsType.EntityShoot;
          import mods.nono.MGSmod.ShotsType.EntityShootExplosive;
          import mods.nono.MGSmod.ShotsType.EntityShootExplosiveUber;
          import mods.nono.MGSmod.ShotsType.EntityShootSPAS12;
          import mods.nono.MGSmod.ShotsType.EntityShootSimple;
          import mods.nono.MGSmod.common.Main;
          import net.minecraft.client.renderer.texture.IconRegister;
          import net.minecraft.enchantment.Enchantment;
          import net.minecraft.enchantment.EnchantmentHelper;
          import net.minecraft.entity.Entity;
          import net.minecraft.entity.player.EntityPlayer;
          import net.minecraft.item.Item;
          import net.minecraft.item.ItemStack;
          import net.minecraft.world.World;
          
          public class W_SPAS12 extends Item
          {
          
          private boolean canShot;
          
          public W_SPAS12(int par1)
          {
          super(par1);
          this.maxStackSize = 1; //dit qu'il ne peut avoir que 1 pistolet
          this.setCreativeTab(Main.MGSTAB);
          }
          
          public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player, ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
          {
          if(canShot)
          {
          boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
          if (flag || par3EntityPlayer.inventory.hasItem(Main.plomb.itemID))
          {
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 1));
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 2));
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 3));
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 4));
          par3EntityPlayer.inventory.consumeInventoryItem(Main.plomb.itemID);
          
          }
          canShot = false;
          }
          return stack;
          }
          
          public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean hasItemInHand)
          {
          if(hasItemInHand && world.getWorldTime() % 16L == 0L && entity instanceof EntityPlayer)
          {
          EntityPlayer player = (EntityPlayer)entity;
          player.addChatMessage("tu peux tirer");
          canShot = true;
          }
          }
          /*public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
          
          {
          
          boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
          if (flag || par3EntityPlayer.inventory.hasItem(Main.plomb.itemID))
          {
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 1));
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 2));
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 3));
          par2World.spawnEntityInWorld(new EntityShootSPAS12(par2World, par3EntityPlayer, 4));
          par3EntityPlayer.inventory.consumeInventoryItem(Main.plomb.itemID);
          
          }
          
          return par1ItemStack;
          }*/
          
          @Override
          public void registerIcons(IconRegister iconRegister)
          {
          itemIcon = iconRegister.registerIcon("nono/MGSmod:SPAS12");
          }
          }
          
          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

            Le canShot = false; déplace-le dans la condition pour tirer, après par3EntityPlayer.inventory.consumeInventoryItem(Main.plomb.itemID);

            1 réponse Dernière réponse Répondre Citer 0
            • Nolan-XXN Hors-ligne
              Nolan-XX
              dernière édition par

              Aucun effet … je ne peux plus tirer :s
              sinon Player133 est un pedobear o/

              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

                Je vois vraiment pas …
                Si ça ne te dérange pas, tu peux me passer toutes tes sources pour que je puisse travailler directement dessus ?
                Ha en passant, ceci :

                || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0
                

                Est à enlever, car si un joueur trouve un moyen de mettre infinity sur ton arme, il aura plus besoin de munition.

                1 réponse Dernière réponse Répondre Citer 0
                • jglrxavpokJ Hors-ligne
                  jglrxavpok Modérateurs
                  dernière édition par

                  Cette ligne ne correspond pas à ce qu’on veut faire:

                  world.getWorldTime() % 16L == 0L
                  

                  Elle fait en sorte que le joueur puisse tirer toutes les 16 ticks (ça veut dire si on tire à 15 ticks, lors de la frame suivante on peut retirer), or on veut que il puisse retirer 16 ticks après avoir utilisé l’arme, peu importe quand on tire.

                  Exemple de code venant d’un jeu que je suis en train de développer (j’ai simplifié au max histoire que ce soit plus compréhensible):

                  public void update()
                  {
                  super.update();
                  
                  if(shootTimer > 0)
                  shootTimer–;
                  
                  if(Gdx.input.isKeyPressed(Keys.L)) // <-- Correspond à l'utilisation de l'arme
                  {
                  if(shootTimer == 0)
                  {
                  shoot();
                  }
                  }
                  }
                  
                  private void shoot()
                  {
                  shootTimer = 12; // <-- On dit que l'on devra attendre 12 frames (ou ticks)
                  }
                  

                  Modérateur sur MFF. 
                  Mon Github: http://github.com/jglrxavpok
                  Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

                  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

                    Ça fonctionne parfaitement, merci Xavpok :

                    package mods.nono.MGSmod.weapons;
                    
                    import mods.nono.MGSmod.ShotsType.EntityShoot;
                    import mods.nono.MGSmod.ShotsType.EntityShootExplosive;
                    import mods.nono.MGSmod.ShotsType.EntityShootExplosiveUber;
                    import mods.nono.MGSmod.ShotsType.EntityShootSimple;
                    import mods.nono.MGSmod.ShotsType.EntityShootSimpleTranq;
                    import mods.nono.MGSmod.common.Main;
                    import net.minecraft.client.renderer.texture.IconRegister;
                    import net.minecraft.enchantment.Enchantment;
                    import net.minecraft.enchantment.EnchantmentHelper;
                    import net.minecraft.entity.Entity;
                    import net.minecraft.entity.player.EntityPlayer;
                    import net.minecraft.item.Item;
                    import net.minecraft.item.ItemStack;
                    import net.minecraft.world.World;
                    
                    public class W_MK22 extends Item
                    {
                    private int shootTimer;
                    
                    public W_MK22(int id)
                    {
                    super(id);
                    this.maxStackSize = 1; // dit qu'il ne peut avoir que 1 pistolet
                    this.setCreativeTab(Main.MGSTAB);
                    }
                    
                    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
                    {
                    if(player.capabilities.isCreativeMode || player.inventory.hasItem(Main.SOammo.itemID))
                    {
                    if(shootTimer == 0)
                    {
                    world.spawnEntityInWorld(new EntityShootSimpleTranq(world, player, 1));
                    player.inventory.consumeInventoryItem(Main.SOammo.itemID);
                    shootTimer = 20;
                    }
                    }
                    return stack;
                    }
                    
                    public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean hasItemInHand)
                    {
                    if(shootTimer > 0)
                    {
                    shootTimer–;
                    }
                    }
                    
                    @Override
                    public void registerIcons(IconRegister iconRegister)
                    {
                    itemIcon = iconRegister.registerIcon("nono/MGSmod:MK22");
                    }
                    }
                    
                    1 réponse Dernière réponse Répondre Citer 0
                    • Nolan-XXN Hors-ligne
                      Nolan-XX
                      dernière édition par

                      @‘jglrxavpok’:

                      Cette ligne ne correspond pas à ce qu’on veut faire:

                      world.getWorldTime() % 16L == 0L
                      

                      Elle fait en sorte que le joueur puisse tirer toutes les 16 ticks (ça veut dire si on tire à 15 ticks, lors de la frame suivante on peut retirer), or on veut que il puisse retirer 16 ticks après avoir utilisé l’arme, peu importe quand on tire.

                      Exemple de code venant d’un jeu que je suis en train de développer (j’ai simplifié au max histoire que ce soit plus compréhensible):

                      public void update()
                      {
                      super.update();
                      
                      if(shootTimer > 0)
                      shootTimer–;
                      
                      if(Gdx.input.isKeyPressed(Keys.L)) // <-- Correspond à l'utilisation de l'arme
                      {
                      if(shootTimer == 0)
                      {
                      shoot();
                      }
                      }
                      }
                      
                      private void shoot()
                      {
                      shootTimer = 12; // <-- On dit que l'on devra attendre 12 frames (ou ticks)
                      }
                      

                      Merci a toi ! Grace a ton code ( et a robin4002) j’ai réussi ! Un grand merci !

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

                        comment faire pour inverser le timer pour que l’action s’effectue apres 15 ticks

                        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