MFF

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

    Tu n'arrives pas a faire les arcs

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.x
    20 Messages 3 Publieurs 2.6k 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.
    • S Hors-ligne
      sventus
      dernière édition par

      
      package fr.craftesys.craftesys.items;
      
      import net.minecraft.client.renderer.texture.IIconRegister;
      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.ItemBow;
      import net.minecraft.item.ItemStack;
      import net.minecraft.util.IIcon;
      import net.minecraft.world.World;
      import net.minecraftforge.common.MinecraftForge;
      import net.minecraftforge.event.entity.player.ArrowLooseEvent;
      import net.minecraftforge.event.entity.player.ArrowNockEvent;
      import fr.craftesys.craftesys.common.Mods;
      
      public class CobaltBow extends ItemBow
      {
      private IIcon[] iconbuffer;
      private static String[] cobaltbow = new String[] {"_pull1", "_pull2", "_pull3"};
      
      public CobaltBow()
      {
      super();
      this.maxStackSize = 1;
      this.setMaxDamage(384);
      }
      
      @Override
      public void registerIcons(IIconRegister iconregister)
      {
      iconbuffer = new IIcon[cobaltbow.length];
      itemIcon = iconregister.registerIcon(this.getIconString());
      for(int i = 0; i < cobaltbow.length; i++)
      {
      iconbuffer* = iconregister.registerIcon(this.getIconString() + cobaltbow*);
      }
      }
      
      @Override
      public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
      {
      if(usingItem != null && usingItem.getItem().equals(Mods.cobaltbow))
      {
      int k = usingItem.getMaxItemUseDuration() - useRemaining;
      if(k >= 18)
      return iconbuffer[2];
      if(k > 13)
      return iconbuffer[1];
      if(k > 0)
      return iconbuffer[0];
      }
      return getIconIndex(stack);
      }
      
      @Override
      public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int itemInUseCount)
      {
      int charge = this.getMaxItemUseDuration(stack) - itemInUseCount;
      
      ArrowLooseEvent event = new ArrowLooseEvent(player, stack, charge);
      MinecraftForge.EVENT_BUS.post(event);
      if(event.isCanceled())
      {
      return;
      }
      charge = event.charge;
      
      boolean creativeOrInfinity = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
      
      if(creativeOrInfinity || player.inventory.hasItem(Items.arrow))
      {
      float power = (float)charge / 1.0F;
      power = (power* power + power * 2.0F) / 3.0F;
      
      if ((double)power < 1.0D)
      {
      return;
      }
      
      if (power > 1.0F)
      {
      power = 3.0F;
      }
      EntityArrow arrow = new EntityArrow(world, player, power * 0.5F);
      
      if(power == 1.0F)
      {
      arrow.setIsCritical(true);
      }
      
      int var9 = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);
      
      if(var9 > 0)
      {
      arrow.setDamage(arrow.getDamage() + (double)var9 * 0.5D + 0.5D);
      }
      
      int var10 = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack);
      
      if(var10 > 0)
      {
      arrow.setKnockbackStrength(var10);
      }
      
      if(EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0)
      {
      arrow.setFire(100);
      }
      
      stack.damageItem(1, player);
      world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + power * 0.5F);
      
      if(creativeOrInfinity)
      {
      arrow.canBePickedUp = 2;
      }
      else
      {
      player.inventory.consumeInventoryItem(Items.arrow);
      }
      
      if(!world.isRemote)
      {
      world.spawnEntityInWorld(arrow);
      }
      }
      }
      
      @Override
      public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
      {
      return stack;
      }
      
      @Override
      public int getMaxItemUseDuration(ItemStack stack)
      {
      return 72000;
      }
      
      @Override
      public EnumAction getItemUseAction(ItemStack stack)
      {
      return EnumAction.bow;
      }
      
      @Override
      public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
      {
      ArrowNockEvent event = new ArrowNockEvent(player, stack);
      MinecraftForge.EVENT_BUS.post(event);
      if(event.isCanceled())
      {
      return event.result;
      }
      
      if(player.capabilities.isCreativeMode || player.inventory.hasItem(Items.arrow))
      {
      player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
      }
      return stack;
      }
      
      @Override
      public int getItemEnchantability()
      {
      return 1;
      }
      }
      
      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

        int charge = this.getMaxItemUseDuration(stack) - itemInUseCount;
        Cette variable est bonne, tu devrais avoir plus de puissance. Étrange.
        print la valeur pour voir ce que ça donne.

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

          2
          2
          1
          1
          2
          2
          2
          2
          24
          24
          7
          7
          2
          2
          17
          17
          25
          25

          on voit bien que la valeur change, pourtant la flèche arrive toujours à la même distance

          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

            if (power > 1.0F)
            {
            power = 3.0F;
            }
            …
            Je viens de voir ça. Tu réaffecte la valeur 3 à chaque fois. Donc normal que ça va toujours à la même distance.

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

              puis aussi c’est la charge que je dois regarder, pas la force xD

              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

                float power = (float)charge / 1.0F;
                La force est définie en fonction de la charge. C’est comme ça que la flèche fonctionne …

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

                  oué j’ai fait comme ça du coup (c’est pas beau, je préviens) :

                  
                  if(creativeOrInfinity || player.inventory.hasItem(Items.arrow))
                  {
                  float power = (float)charge / 1.0F;
                  power = (power* power + power * 2.0F) / 3.0F;
                  
                  if ((double)power < 0.01D)
                  {
                  return;
                  }
                  if (charge == 1F)
                  {
                  power = 0.2F;
                  }
                  if (charge == 2F)
                  {
                  power = 0.3F;
                  }
                  if (charge == 3F)
                  {
                  power = 0.6F;
                  }
                  if (charge == 4F)
                  {
                  power = 0.7F;
                  }
                  if (charge == 5F)
                  {
                  power = 0.9F;
                  }
                  if (charge == 6F)
                  {
                  power = 1.1F;
                  }
                  if (charge == 7F)
                  {
                  power = 1.3F;
                  }
                  if (charge == 8F)
                  {
                  power = 1.5F;
                  }
                  if (charge == 9F)
                  {
                  power = 1.7F;
                  }
                  if (charge == 10F)
                  {
                  power = 1.9F;
                  }
                  if (charge == 11F)
                  {
                  power = 2.1F;
                  }
                  if (charge == 12F)
                  {
                  power = 2.3F;
                  }
                  if (charge == 13F)
                  {
                  power = 2.5F;
                  }
                  if (charge == 14F)
                  {
                  power = 2.7F;
                  }
                  if (charge == 15F)
                  {
                  power = 2.7F;
                  }
                  if (charge == 16F)
                  {
                  power = 3.1F;
                  }
                  if (charge == 17F)
                  {
                  power = 3.3F;
                  }
                  if (charge == 18F)
                  {
                  power = 3.5F;
                  }
                  if (charge == 19F)
                  {
                  power = 3.7F;
                  }
                  if (charge == 20F)
                  {
                  power = 3.8F;
                  }
                  if (charge == 21F)
                  {
                  power = 3.9F;
                  }
                  if (charge == 22F)
                  {
                  power = 4.0F;
                  }
                  if (charge == 23F)
                  {
                  power = 4.05F;
                  }
                  if (charge == 24F)
                  {
                  power = 4.1F;
                  }
                  if(charge >24F)
                  {
                  power = 4.15F;
                  }
                  
                  

                  il y a donc diverses portées mais les dégâts fait sont toujours identiques et pourtant j’ai changé la valeur la :

                  this.setMaxDamage(1000);

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

                    Des idées sur le souci du coup ?

                    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 setMaxDamage dans le constructeur de l’item c’est pour la durabilité de l’arc –’

                      Pour les dégâts de la flèche :
                      arrow.setDamage(2.0D); <- valeur par défaut

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

                        Et le D correspond à quoi ? Ainsi que le F. C’est quoi la valeur de base ?

                        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

                          J’abandonne …

                          1 réponse Dernière réponse Répondre Citer 0
                          • FolganskyF Hors-ligne
                            Folgansky Correcteurs
                            dernière édition par

                            Oublie le D et le F, ce qui compte c’est la valeur.

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

                              pourtant même en mettant cela :

                              if(var9 > 0)
                              {
                              arrow.setDamage(2000D);
                              }

                              les dégâts restent inchangé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

                                il sort d’où ce var9 ?

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

                                  int var9 = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);

                                  bon je crois avoir compris 😛

                                  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

                                    Du-coup c’est résolu ?

                                    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