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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

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

      1 réponse Dernière réponse Répondre Citer 0
      • 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