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

    Résolu Faire en sorte qu'on ne puisse tirer avec un arc si l'arc n'est pas 100% chargé

    1.8.x
    1.8
    2
    7
    1198
    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.
    • Eryah
      Eryah dernière édition par

      Wow, c’est dur faire un titre qui explique mon problème 😕
      En gros, j’ai fait un fusil. Sauf, que c’est pas logique qu’on puisse tirer, sans charger le fusil. Donc, j’aimerai qu’on puisse tirer, uniquement quand “l’arc” est chargé à 100%
      J’ai essayer quelques trucs, raté.
      PS : J’ai pas encore fait l’item Bullet, l’entity Bullet ( Je sais pas apliquer un model 😞 )

      Que faut-il rajouter-enlever ? 😕

      package eryah.usefulthings.init;
      
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.resources.model.ModelResourceLocation;
      import net.minecraft.enchantment.Enchantment;
      import net.minecraft.enchantment.EnchantmentHelper;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.entity.projectile.EntityArrow;
      import net.minecraft.init.Items;
      import net.minecraft.item.EnumAction;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.stats.StatList;
      import net.minecraft.world.World;
      import net.minecraftforge.fml.common.registry.GameRegistry;
      import eryah.usefulthings.Reference;
      import eryah.usefulthings.UsefulthingsMod;
      
      public class MakeshiftRifle extends Item {
      
      public static Item makeshift_rifle;
      
      public static void init(){
      makeshift_rifle = new MakeshiftRifle().setUnlocalizedName("makeshift_rifle").setCreativeTab(UsefulthingsMod.UTTab);
      }
      
      public static void register()
      {
      GameRegistry.registerItem(makeshift_rifle, makeshift_rifle.getUnlocalizedName().substring(5));
      }
      
      public static void registerRenders()
      {
      registerRender(makeshift_rifle);
      }
      
      public static void registerRender(Item item)
      {
      Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
      }
      
      public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft)
      {
      int j = this.getMaxItemUseDuration(stack) - timeLeft;
      net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(playerIn, stack, j);
      if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return;
      j = event.charge;
      
      boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
      
      if (flag || playerIn.inventory.hasItem(Items.arrow))
      {
      float f = (float)j / 20.0F;
      f = (f * f + f * 2.0F) / 3.0F;
      
      EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f * 2.0F);
      
      if (f == 1.0F)
      {
      entityarrow.setIsCritical(true);
      }
      
      worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
      
      if (flag)
      {
      entityarrow.canBePickedUp = 2;
      }
      else
      {
      playerIn.inventory.consumeInventoryItem(Items.arrow);
      }
      
      playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]);
      
      if (!worldIn.isRemote)
      {
      worldIn.spawnEntityInWorld(entityarrow);
      }
      }
      }
      
      /**
      * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using
      * the Item before the action is complete.
      */
      public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn)
      {
      return stack;
      }
      
      /**
      * How long it takes to use or consume an item
      */
      public int getMaxItemUseDuration(ItemStack stack)
      {
      return 72000;
      }
      
      /**
      * returns the action that specifies what animation to play when the items is being used
      */
      public EnumAction getItemUseAction(ItemStack stack)
      {
      return EnumAction.BOW;
      }
      
      public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn)
      {
      net.minecraftforge.event.entity.player.ArrowNockEvent event = new net.minecraftforge.event.entity.player.ArrowNockEvent(playerIn, itemStackIn);
      if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return event.result;
      
      if (playerIn.capabilities.isCreativeMode || playerIn.inventory.hasItem(Items.arrow))
      {
      playerIn.setItemInUse(itemStackIn, this.getMaxItemUseDuration(itemStackIn));
      }
      
      return itemStackIn;
      }
      
      }
      
      

      Membre fantôme
      Je développe maintenant un jeu sur UnrealEngine4


      Contact :…

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

        if (f == 1.0F)
        {
        entityarrow.setIsCritical(true);
        }
        

        Correspond à la flèche charger à fond. Donc il suffit de mettre tout ce qui fait le tire dans cette condition. Rien de compliqué.

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

          Bon j’ai bidouiller un peu, pendent longtemps…
          Et ça fonctionne pas.
          Je sais pas si j’ai fais du caca, mais j’ai tenté
          j’ai même utiliser ce que j’ai apris sur Openclassroom avec les opérateurs, en utilisant <= au lieu de ==, car avoir 1.0F c’est dur, j’ai souvent 1.2F. Bref

          public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft)
          {
          int j = this.getMaxItemUseDuration(stack) - timeLeft;
          net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(playerIn, stack, j);
          if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return;
          j = event.charge;
          
          boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
          
          if (flag || playerIn.inventory.hasItem(Items.arrow))
          {
          float f = (float)j / 20.0F;
          f = (f * f + f * 2.0F) / 3.0F;
          
          EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f * 2.0F);
          
          worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
          
          if (flag)
          {
          entityarrow.canBePickedUp = 2;
          }
          else
          {
          playerIn.inventory.consumeInventoryItem(Items.arrow);
          }
          
          playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]);
          
          if (!worldIn.isRemote)
          {
          
          if (f <= 1.0F)
          {
          worldIn.spawnEntityInWorld(entityarrow);
          }
          }
          }
          }
          

          Membre fantôme
          Je développe maintenant un jeu sur UnrealEngine4


          Contact :…

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

            if (f => 1.0F) et non l’inverse.

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

              Aïe… Mes vielles lacunes en maths… - < + § ET + > -…
              Bref, ça fonctionne tout pile, merci robin 🙂

              Membre fantôme
              Je développe maintenant un jeu sur UnrealEngine4


              Contact :…

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

                Si c’est résolu n’oublie pas de mettre la balise.

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

                  Oopps désolé :S

                  Envoyé de mon SM-G357FZ en utilisant Tapatalk

                  Membre fantôme
                  Je développe maintenant un jeu sur UnrealEngine4


                  Contact :…

                  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