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.8k Vues 1 Abonné
    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 En 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 En 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 En 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 En 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 En 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 En 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 En 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 En 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