• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Tu n'arrives pas a faire les arcs

    Sans suite
    1.7.x
    3
    20
    2270
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sventus last edited by

      salut les amis, c’est encore moi pour un nouvel épisode de : tu n’arrives pas a faire les arcs.

      Donc lors de cette épisode vous l’aurez compris, j’ai un soucis d’arc, mais non pas un soucis venant de l’animation ou autre, mais un soucis par rapport à la portée,  j’ai le code ci -dessous

      
       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 = 1.0F;
                  }
                  EntityArrow arrow = new EntityArrow(world, player, power * 0.5F);
      
                  if(power == 1.0F)
                  {
                      arrow.setIsCritical(true);
                  }
      
      

      donc en réalité  l’arc ne charge pas, ou presque pas et je ne comprend pas quel valeur il faut changer pour réussir cette exploit …

      j’espère qu’on pourra m’éclairer sur cela.
      cordialement,
      Sventus

      1 Reply Last reply Reply Quote 0
      • Folgansky
        Folgansky Correcteurs last edited by

        %(#000000)[[font=monospace]EntityArrow]%(#000000)[[font=monospace] arrow ]%(#666600)[[font=monospace]=] %(#7f0055)[[font=monospace]**new**] %(#000000)[[font=monospace]EntityArrow]%(#666600)[[font=monospace](]%(#000000)[[font=monospace]world]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] player]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] power ]%(#666600)[[font=monospace]*] %(#646464)[[font=monospace]0.5F]%(#666600)[[font=monospace]);]
        

        C’est le 0.5F qui règle la portée et la puissance à la fois.

        1 Reply Last reply Reply Quote 0
        • S
          sventus last edited by

          oui mais ça ne change pas entre les différentes charges

          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

            Ce qui serait bien c’est d’avoir la classe complète …

            1 Reply Last reply Reply Quote 0
            • S
              sventus last edited by

              
              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 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                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 Reply Last reply Reply Quote 0
                • S
                  sventus last edited by

                  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 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                    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 Reply Last reply Reply Quote 0
                    • S
                      sventus last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                        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 Reply Last reply Reply Quote 0
                        • S
                          sventus last edited by

                          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 Reply Last reply Reply Quote 0
                          • S
                            sventus last edited by

                            Des idées sur le souci du coup ?

                            1 Reply Last reply Reply Quote 0
                            • robin4002
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                              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 Reply Last reply Reply Quote 0
                              • S
                                sventus last edited by

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

                                1 Reply Last reply Reply Quote 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                  J’abandonne …

                                  1 Reply Last reply Reply Quote 0
                                  • Folgansky
                                    Folgansky Correcteurs last edited by

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

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      sventus last edited by

                                      pourtant même en mettant cela :

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

                                      les dégâts restent inchangés

                                      1 Reply Last reply Reply Quote 0
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                        il sort d’où ce var9 ?

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          sventus last edited by

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

                                          bon je crois avoir compris 😛

                                          1 Reply Last reply Reply Quote 0
                                          • robin4002
                                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                            Du-coup c’est résolu ?

                                            1 Reply Last reply Reply Quote 0
                                            • 1 / 1
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB