MFF

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

    Zoom arc

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    18 Messages 3 Publieurs 3.2k 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.
    • ErkoZE Hors-ligne
      ErkoZ
      dernière édition par

      Bonjour, j’ai encore un problème avec mon arc, j’ai fait des recherches mais toutes ont abouties à rien donc voilà j’explique mon problème: Mon arc fonctionne entièrement mais il n’y a aucun zoom, l’animation est correcte, le joueur est ralenti dès qu’il tire la flèche mais pas de zoom dès qu’on reste appuyé sur le clic droit… Une solution ?

      Ah oui et le EnumAction bow ne change absolument rien ^^

      Ma classe:

      
      import java.util.EnumSet;
      
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import net.minecraft.client.renderer.texture.IIconRegister;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.enchantment.Enchantment;
      import net.minecraft.enchantment.EnchantmentHelper;
      import net.minecraft.entity.SharedMonsterAttributes;
      import net.minecraft.entity.ai.attributes.IAttributeInstance;
      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.ItemBow;
      import net.minecraft.item.ItemStack;
      import net.minecraft.util.IIcon;
      import net.minecraft.world.World;
      import net.minecraftforge.client.ForgeHooksClient;
      import net.minecraftforge.common.MinecraftForge;
      import net.minecraftforge.event.entity.player.ArrowLooseEvent;
      import net.minecraftforge.event.entity.player.ArrowNockEvent;
      
      public class ItemmodBow extends ItemBow 
      {
          public static final String[] bowPullIconNameArray = new String[] {"pulling_0", "pulling_1", "pulling_2"};
          @SideOnly(Side.CLIENT)
          private IIcon[] iconArray;
      
          public ItemmodBow()
          {
              this.maxStackSize = 1;
              this.setMaxDamage(384);
              this.setCreativeTab(CreativeTabs.tabCombat);
          }
      
          /**
           * called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount
           */
          public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4)
          {
              int j = this.getMaxItemUseDuration(par1ItemStack) - par4;
      
              ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j);
              MinecraftForge.EVENT_BUS.post(event);
              if (event.isCanceled())
              {
                  return;
              }
      
              j = event.charge;
      
              boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
      
              if (flag || par3EntityPlayer.inventory.hasItem(Items.arrow))
              {
                  float f = (float)j / 20.0F;
                  f = (f * f + f * 2.0F) / 3.0F;
      
                  if ((double)f < 0.1D)
                  {
                      return;
                  }
      
                  if (f > 1.0F)
                  {
                      f = 1.0F;
                  }
      
                  EntityArrow entityarrow = new EntityArrow(par2World, par3EntityPlayer, f * 2.0F);
      
                  if (f == 1.0F)
                  {
                      entityarrow.setIsCritical(true);
                  }
      
                  int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);
      
                  if (k > 0)
                  {
                      entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
                  }
      
                  int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);
      
                  if (l > 0)
                  {
                      entityarrow.setKnockbackStrength(l);
                  }
      
                  if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0)
                  {
                      entityarrow.setFire(100);
                  }
      
                  par1ItemStack.damageItem(1, par3EntityPlayer);
                  par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
      
                  if (flag)
                  {
                      entityarrow.canBePickedUp = 2;
                  }
                  else
                  {
                      par3EntityPlayer.inventory.consumeInventoryItem(Items.arrow);
                  }
      
                  if (!par2World.isRemote)
                  {
                      par2World.spawnEntityInWorld(entityarrow);
                  }
      
              }
          }
      
          public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
          {
              return par1ItemStack;
          }
      
          /**
           * How long it takes to use or consume an item
           */
          public int getMaxItemUseDuration(ItemStack par1ItemStack)
          {
              return 72000;
          }
      
          /**
           * returns the action that specifies what animation to play when the items is being used
           */
      
          public EnumAction getItemUseAction(ItemStack par1ItemStack)
          {
              return EnumAction.bow;
          }
      
          /**
           * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
           */
          public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
          {
              ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
              MinecraftForge.EVENT_BUS.post(event);
              if (event.isCanceled())
              {
                  return event.result;
              }
      
              if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Items.arrow))
              {
                  par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
              }
      
              return par1ItemStack;
          }
      
          /**
           * Return the enchantability factor of the item, most of the time is based on material.
           */
          public int getItemEnchantability()
          {
              return 1;
          }
      
          @SideOnly(Side.CLIENT)
          public void registerIcons(IIconRegister par1IconRegister)
          {
              this.itemIcon = par1IconRegister.registerIcon("mod:mod_bow_standby");
              this.iconArray = new IIcon[bowPullIconNameArray.length];
      
              for (int i = 0; i < this.iconArray.length; ++i)
              {
                  this.iconArray* = par1IconRegister.registerIcon("mod:mod_bow_" + bowPullIconNameArray*);
              }
          }
      
          @Override
          @SideOnly(Side.CLIENT)
          public IIcon getIcon (ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining){
          if (usingItem == null) { return itemIcon; }
          int ticksInUse = stack.getMaxItemUseDuration() - useRemaining;
          if (ticksInUse > 17){
          return iconArray[2];
          } else if (ticksInUse > 13){
          return iconArray[1];
          } else if (ticksInUse > 0) {
          return iconArray[0];
          } else{
          return itemIcon;
          }
          }
      
          /**
           * used to cycle through icons based on their used duration, i.e. for the bow
           */
          @SideOnly(Side.CLIENT)
          public IIcon getItemIconForUseDuration(int par1)
          {
              return this.iconArray[par1];
          }
      
      }
      
      

      Merci d’avance à ceux qui auront la gentilesse de m’aider ! 🙂

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

        Je sais pas comment tu as fait tes recherches : https://www.minecraftforgefrance.fr/showthread.php?tid=2367&highlight=zoom

        Site web contenant mes scripts : http://SCAREXgaming.github.io

        Pas de demandes de support par MP ni par skype SVP.
        Je n'accepte sur skype que l…

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

          Je suis déjà tomber sur ce sujet, rien ne marche…

          Le enumaction ne donne rien et l’autre méthode ne fait pas un zoom progressif

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

            As-tu essayé de changer de version de minecraft ? Car la 1.7.2 n’est pas stable

            Site web contenant mes scripts : http://SCAREXgaming.github.io

            Pas de demandes de support par MP ni par skype SVP.
            Je n'accepte sur skype que l…

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

              Je ne veux pas passer en 1.7.10 car les skins cauldron 1.7.10 sont bugués

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

                C’est à dire ?

                Car le problème c’est que ton problème peut venir de là

                Site web contenant mes scripts : http://SCAREXgaming.github.io

                Pas de demandes de support par MP ni par skype SVP.
                Je n'accepte sur skype que l…

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

                  Je vais essayé en 1.7.10 mais je ne pense pas que sa vienne de là

                  EDIT: Non toujours le même problème, l’arc fonctionne parfaitement sauf le zoom et se que je voulais dire c’est que je préfère rester en 1.7.2 car en 1.7.10 le multijoueur est bugué et n’affiche pas les skins

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

                    Après quelques recherches, j’ai trouvé l’endroit qui pose problème : EntityPlayerSP:329 (si le numéro de ligne est le même sur ta version). Afin de modifier ça, créer un event handler pour intercepter l’event FOVUpdateEvent pour modifier la valeur en fonction du temps d’utilisation de ton item

                    Site web contenant mes scripts : http://SCAREXgaming.github.io

                    Pas de demandes de support par MP ni par skype SVP.
                    Je n'accepte sur skype que l…

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

                      Heu …. Quoi ? ^^ Je ne suis qu’un débutant tu peux développer s’il te plaît ? 😛 Créer un event jusque là ça va mais après j’ai pas compris ^^

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

                        Pour savoir comment utiliser les events : https://www.minecraftforgefrance.fr/showthread.php?tid=716

                        Tu dois utiliser l’event FOVUpdateEvent afin de modifier le FOV du joueur.

                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                        Pas de demandes de support par MP ni par skype SVP.
                        Je n'accepte sur skype que l…

                        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

                          @‘ErkoZ’:

                          Je ne veux pas passer en 1.7.10 car les skins cauldron 1.7.10 sont bugués

                          Les skins fonctionnent en 1.7.10.
                          Si ce n’est pas le cas c’est parce que ton serveur est en mode offline. Ce qui n’est pas bien du tout.

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

                            
                            @SubscribeEvent
                            public void onTooltip(FOVUpdateEvent event)
                            {
                            float f = 1.0F;
                            if(event.entity.isUsingItem() && event.entity.getItemInUse().getItem() == mod.emerald_bow)
                            {
                            int i = event.entity.getItemInUseDuration();
                            float f1 = (float)i / 20.0F;
                            
                            if (f1 > 1.0F)
                            {
                            f1 = 1.0F;
                            }
                            else
                            {
                            f1 *= f1;
                            }
                            
                            f *= 1.0F - f1 * 0.15F;
                            }
                            
                            }
                            }
                            
                            

                            J’ai fait un truc comme ça mais ça ne marche pas… Comprend pas 😞

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

                              As-tu enregistré l’event ?
                              Pourquoi avoir appelé ta fonction onTooltip ?
                              Ici tu ne fais que des calculs sans jamais spécifié la valeur retournée, regarde les fonctions disponibles

                              Site web contenant mes scripts : http://SCAREXgaming.github.io

                              Pas de demandes de support par MP ni par skype SVP.
                              Je n'accepte sur skype que l…

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

                                onToolTIp car à la base c’est un copié collé du tuto de Robin mais je vais changer et oui j’ai enregistré l’event.

                                J’ai fait un truc qui ressemble à ça, j’ai copié du code du fov de l’arc de Minecraft mais il crash:

                                
                                @SubscribeEvent
                                public float onUseBow(FOVUpdateEvent event)
                                {
                                float f = 1.0F;
                                
                                if (event.entity.capabilities.isFlying)
                                {
                                f *= 1.1F;
                                }
                                
                                IAttributeInstance iattributeinstance = event.entity.getEntityAttribute(SharedMonsterAttributes.movementSpeed);
                                f = (float)((double)f * ((iattributeinstance.getAttributeValue() / (double)event.entity.capabilities.getWalkSpeed() + 1.0D) / 2.0D));
                                
                                if (event.entity.capabilities.getWalkSpeed() == 0.0F || Float.isNaN(f) || Float.isInfinite(f))
                                {
                                f = 1.0F;
                                }
                                
                                if (event.entity.isUsingItem() && event.entity.getItemInUse().getItem() == Items.bow)
                                {
                                int i = event.entity.getItemInUseDuration();
                                float f1 = (float)i / 20.0F;
                                
                                if (f1 > 1.0F)
                                {
                                f1 = 1.0F;
                                }
                                else
                                {
                                f1 *= f1;
                                }
                                
                                f *= 1.0F - f1 * 0.15F;
                                }
                                
                                return ForgeHooksClient.getOffsetFOV(event.entity, f);
                                }
                                
                                
                                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

                                  Les fonctions d’event doit être des void.

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

                                    Mais si je met void le return ne fonctionne pas alors comment je pourrais faire ?

                                    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

                                      Remplaces
                                      return ForgeHooksClient.getOffsetFOV(event.entity, f);
                                      par
                                      event.newfov = f;

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

                                        @‘robin4002’:

                                        Remplaces
                                        return ForgeHooksClient.getOffsetFOV(event.entity, f);
                                        par
                                        event.newfov = f;

                                        Merci ça marche !

                                        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