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

    Solved Zoom arc

    1.7.x
    1.7.10
    3
    18
    2813
    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.
    • ErkoZ
      ErkoZ last edited by

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

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

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

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

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

              1 Reply Last reply Reply Quote 0
              • SCAREX
                SCAREX last edited by

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

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

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

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

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

                          @‘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 Reply Last reply Reply Quote 0
                          • ErkoZ
                            ErkoZ last edited by

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

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

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

                                  Les fonctions d’event doit être des void.

                                  1 Reply Last reply Reply Quote 0
                                  • ErkoZ
                                    ErkoZ last edited by

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

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

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

                                      1 Reply Last reply Reply Quote 0
                                      • ErkoZ
                                        ErkoZ last edited by

                                        @‘robin4002’:

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

                                        Merci ça marche !

                                        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