• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Ajout d'un arc personnalisé

    Anciennes versions
    1.6.4
    3
    30
    7186
    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.
    • Axaurus
      Axaurus dernière édition par

      Salut
      Bonne année

      J’ai créer un autre arc et j’aimerai que quand on tire une flèche sur une entité, ca fasse la potion de regénération de vie pendant quelques secondes.
      J’aimerai aussi que l’arrc ne fasse pas de dégâts.
      Par exemple : JA a un arc et tire une flèche sur JB. JB ne perd pas de vie et a la potion de régénération.

      Voilà
      Merci d’avance

      PS : J’ai pensé utiliser ```java
      this.setPotionEffect()

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        Il faudrait faire une flèche custom, et mettre dans le l’effet dans la fonction onImpact.

        1 réponse Dernière réponse Répondre Citer 0
        • Axaurus
          Axaurus dernière édition par

          Merci, mais je ne sais pas quoi mettre dans les parenthèses.
          J’ai essayer plein de truc en rapport à la régénération de la vie, mais rien ne marche

          Voilà la classe de la flèche (avec un exemple des “trucs” que j’ai testé) :

          package TiVD;
          
          import net.minecraft.item.Item;
          import net.minecraft.potion.Potion;
          import net.minecraft.potion.PotionHelper;
          import net.minecraft.util.MovingObjectPosition;
          
          public class ItemHeartArrow extends Item{
          
          public ItemHeartArrow(int par1) {
          super(par1);
          }
          
          protected void onImpact(MovingObjectPosition var1)
          {
          this.setPotionEffect(Potion.regeneration);
          }
          }
          

          Si vous avez une idée, merci d’avance

          PS : J’ai regardé la pomme en or, mais l’ajout de l’effet est dans la ligne de la création de l’item. J’ai quand même testé, mais ils me disent que la fonction n’existe pas dans Item.java

          1 réponse Dernière réponse Répondre Citer 0
          • gagoi
            gagoi dernière édition par

            Pour la parenthèse, j’ai trouvé ça sur le net :

            public NewPotion setPotionEffect(int par1, int par2, int par3, float par4)
            {
            this.potionId = par1;
            this.potionDuration = par2;
            this.potionAmplifier = par3;
            this.potionEffectProbability = par4;
            return this;
            }
            
            

            Avec un exemple :

            
            this.setPotionEffect(Potion.jump.id, 60, 2, 1F)
            
            
            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

              Elle existe dans ItemFood seulement. C’est dans l’entité de la flèche qu’il faut gérer ça, pas dans l’item.

              1 réponse Dernière réponse Répondre Citer 0
              • Axaurus
                Axaurus dernière édition par

                Pour la parenthèse, j’ai trouvé ça sur le net :

                public NewPotion setPotionEffect(int par1, int par2, int par3, float par4)
                {
                this.potionId = par1;
                this.potionDuration = par2;
                this.potionAmplifier = par3;
                this.potionEffectProbability = par4;
                return this;
                }
                

                Avec un exemple :

                this.setPotionEffect(Potion.jump.id, 60, 2, 1F)
                

                Merci, mais il y a une erreur a NewPotion : il faut créer une classe (et je ne sais pas quoi mettre dedans)

                Elle existe dans ItemFood seulement. C’est dans l’entité de la flèche qu’il faut gérer ça, pas dans l’item.

                Merci, mais je ne vais pas changer mon item en nourriture : une flèche ne se mange pas. J’ai donc copier/coller ce qui était interrêssant, mais ça a bug.

                Merci d’avance

                PS : Si vous avez une idée pour enlever les dégâts des arcs ou des flèches, je ne suis pas contre.

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                  Le problème c’est que tu n’arrive pas à faire la différence entre les différentes choses de minecraft.
                  Un item, c’est juste quelque chose qu’on a dans l’inventaire sous forme d’itemStack, ou dans le monde sous forme d’entityItem.

                  Ce n’est pas l’item qui faut modifier, mais l’entité de ta flèche, regarde la classe EntityArrow.

                  1 réponse Dernière réponse Répondre Citer 0
                  • Axaurus
                    Axaurus dernière édition par

                    En gros, si j’ai bien compris (j’espère que oui, mais je ne pense pas ;( ), il faut créer une classe EntityHeartArrow extends de EntityArrow et ajouter ça dedans :

                    protected void onImpact(MovingObjectPosition var1, ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
                    {
                    if (!par2World.isRemote && this.potionId > 0 && par2World.rand.nextFloat() < this.potionEffectProbability)
                    {
                    par3EntityPlayer.addPotionEffect(new PotionEffect(this.potionId, this.potionDuration * 20, this.potionAmplifier));
                    }
                    }
                    

                    ??

                    1 réponse Dernière réponse Répondre Citer 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                      Oui, les arguments sont a vérifier, je suis pas sûr que le paramètre par3EntityPlayer corresponde à l’entity attaqué par la flèche.
                      En passant ça va régler ton problème de dégât 😛

                      1 réponse Dernière réponse Répondre Citer 0
                      • Axaurus
                        Axaurus dernière édition par

                        Salut
                        Donc, j’ai bien fait ce que j’ai écrit au dessus
                        Quand je met ça dans la ligne de création de l’item ou dans la classe de l’item :

                        .setPotionEffect(Potion.heal)
                        

                        ça dit que Potion.heal est une potion et non un string

                        Donc je ne sais pas quoi mettre

                        Merci d’avance

                        PS : Merci pour les dégâts enlevés

                        1 réponse Dernière réponse Répondre Citer 0
                        • gagoi
                          gagoi dernière édition par

                          Tu as essayé de mettre ce que j’avais trouvé plus haut avec les mêmes paramètres.

                          1 réponse Dernière réponse Répondre Citer 0
                          • Axaurus
                            Axaurus dernière édition par

                            @‘gagoi’:

                            Tu as essayé de mettre ce que j’avais trouvé plus haut avec les mêmes paramètres.

                            Le Problème, c’est que NewPotion n’existe pas et ils disent de le créer

                            1 réponse Dernière réponse Répondre Citer 0
                            • gagoi
                              gagoi dernière édition par

                              Garde le nom de ta fonction , met juste les même paramètres.

                              1 réponse Dernière réponse Répondre Citer 0
                              • Axaurus
                                Axaurus dernière édition par

                                Salut
                                Désolée, je suis un boulet, mais qu’est ce que je dois mettre à la place de NewPotion dans :

                                public NewPotion setPotionEffect(int par1, int par2, int par3, float par4)
                                {
                                this.potionId = par1;
                                this.potionDuration = par2;
                                this.potionAmplifier = par3;
                                this.potionEffectProbability = par4;
                                return this;
                                }
                                

                                Quand je met ça dans la ligne de création de l’item :

                                this.setPotionEffect(Potion.heal.id, 60, 2, 1F)
                                

                                ça bug quand même. J’ai essayer d’enlever le", 60, 2, 1F" mais non. Ils disent quand même que faut créer la fonction dans Item.java parce que dans les parenthèses c’est une potion et pas un string.

                                A la place de NewPotion, j’ai essayer de mettre le nom de la classe (ItemHeartBow), Item, et après rien; mais rien ne fait.

                                Merci d’avance

                                PS : Pour les dégâts de la flèche, dans l’entité de ma flèche, j’ai mis```java
                                private double damage = 0.0D;

                                1 réponse Dernière réponse Répondre Citer 0
                                • Axaurus
                                  Axaurus dernière édition par

                                  UP
                                  Personne ?

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • robin4002
                                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                    Envoie tout (item + arc + entité de ta flèche) car ce que tu es en train de faire actuellement ne fonctionnera pas.

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Axaurus
                                      Axaurus dernière édition par

                                      EntityHeartArrow :

                                      package TiVD;
                                      
                                      import net.minecraft.entity.EntityLivingBase;
                                      import net.minecraft.entity.player.EntityPlayer;
                                      import net.minecraft.entity.projectile.EntityArrow;
                                      import net.minecraft.item.ItemStack;
                                      import net.minecraft.potion.Potion;
                                      import net.minecraft.potion.PotionEffect;
                                      import net.minecraft.util.MovingObjectPosition;
                                      import net.minecraft.world.World;
                                      
                                      public class EntityHeartArrow extends EntityArrow{
                                      public EntityHeartArrow(World par1World,
                                      EntityLivingBase par2EntityLivingBase, float par3) {
                                      super(par1World, par2EntityLivingBase, par3);
                                      // TODO Auto-generated constructor stub
                                      }
                                      
                                      private int potionId;
                                      private int potionDuration;
                                      private int potionAmplifier;
                                      private float potionEffectProbability;
                                      
                                      private double damage = 0.0D;
                                      
                                      protected void onImpact(MovingObjectPosition var1, ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
                                      {
                                      if (!par2World.isRemote && this.potionId > 0 && par2World.rand.nextFloat() < this.potionEffectProbability)
                                      {
                                      par3EntityPlayer.addPotionEffect(new PotionEffect(this.potionId, this.potionDuration * 20, this.potionAmplifier));
                                      }
                                      }
                                      
                                      }
                                      
                                      

                                      ItemHeartBow :

                                      package TiVD;
                                      
                                      import net.minecraft.client.renderer.texture.IconRegister;
                                      import net.minecraft.creativetab.CreativeTabs;
                                      import net.minecraft.enchantment.Enchantment;
                                      import net.minecraft.enchantment.EnchantmentHelper;
                                      import net.minecraft.entity.player.EntityPlayer;
                                      import net.minecraft.item.EnumAction;
                                      import net.minecraft.item.Item;
                                      import net.minecraft.item.ItemStack;
                                      import net.minecraft.potion.Potion;
                                      import net.minecraft.potion.PotionHealth;
                                      import net.minecraft.util.Icon;
                                      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 cpw.mods.fml.relauncher.Side;
                                      import cpw.mods.fml.relauncher.SideOnly;
                                      
                                      public class ItemHeartBow extends Item
                                      {
                                      public static final String[] bowPullIconNameArray = new String[] {"pulling_0", "pulling_1", "pulling_2"};
                                      @SideOnly(Side.CLIENT)
                                      private Icon[] iconArray;
                                      private int potionId;
                                      private int potionDuration;
                                      private int potionAmplifier;
                                      private float potionEffectProbability;
                                      public ItemHeartBow(int par1)
                                      {
                                      super(par1);
                                      this.maxStackSize = 1;
                                      // this.setPotionEffect(Potion.heal);
                                      this.setMaxDamage(384);
                                      this.setCreativeTab(CreativeTabs.tabCombat);
                                      }
                                      
                                      /**
                                      * called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount
                                      * @return
                                      */
                                      public Item setPotionEffect(int par1, int par2, int par3, float par4)
                                      {
                                      this.potionId = par1;
                                      this.potionDuration = par2;
                                      this.potionAmplifier = par3;
                                      this.potionEffectProbability = par4;
                                      return this;
                                      }
                                      
                                      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(TiVD.HeartArrow.itemID))
                                      {
                                      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;
                                      }
                                      
                                      EntityHeartArrow entityheartarrow = new EntityHeartArrow(par2World, par3EntityPlayer, f * 2.0F);
                                      
                                      if (f == 1.0F)
                                      {
                                      entityheartarrow.setIsCritical(true);
                                      }
                                      
                                      int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);
                                      
                                      if (k > 0)
                                      {
                                      entityheartarrow.setDamage(entityheartarrow.getDamage() + (double)k * 0.5D + 0.5D);
                                      }
                                      
                                      int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);
                                      
                                      if (l > 0)
                                      {
                                      entityheartarrow.setKnockbackStrength(l);
                                      }
                                      
                                      par1ItemStack.damageItem(1, par3EntityPlayer);
                                      par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
                                      
                                      if (flag)
                                      {
                                      entityheartarrow.canBePickedUp = 2;
                                      }
                                      else
                                      {
                                      par3EntityPlayer.inventory.consumeInventoryItem(TiVD.HeartArrow.itemID);
                                      }
                                      
                                      if (!par2World.isRemote)
                                      {
                                      par2World.spawnEntityInWorld(entityheartarrow);
                                      }
                                      }
                                      }
                                      
                                      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(TiVD.HeartArrow.itemID))
                                      {
                                      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(IconRegister par1IconRegister)
                                      {
                                      this.itemIcon = par1IconRegister.registerIcon(this.getIconString() + "_standby");
                                      this.iconArray = new Icon[bowPullIconNameArray.length];
                                      
                                      for (int i = 0; i < this.iconArray.length; ++i)
                                      {
                                      this.iconArray* = par1IconRegister.registerIcon(this.getIconString() + "_" + bowPullIconNameArray*);
                                      }
                                      }
                                      
                                      @SideOnly(Side.CLIENT)
                                      
                                      /**
                                      * used to cycle through icons based on their used duration, i.e. for the bow
                                      */
                                      public Icon getItemIconForUseDuration(int par1)
                                      {
                                      return this.iconArray[par1];
                                      }
                                      }
                                      
                                      

                                      ItemHeartArrow :

                                      package TiVD;
                                      
                                      import net.minecraft.item.Item;
                                      import net.minecraft.potion.Potion;
                                      import net.minecraft.potion.PotionHelper;
                                      import net.minecraft.util.MovingObjectPosition;
                                      
                                      public class ItemHeartArrow extends Item{
                                      private int potionId;
                                      private int potionDuration;
                                      private int potionAmplifier;
                                      private float potionEffectProbability;
                                      public ItemHeartArrow(int par1) {
                                      super(par1);
                                      }
                                      }
                                      
                                      
                                      1 réponse Dernière réponse Répondre Citer 0
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                        J’ai pas eclipse sous la main, je suis pas sûr de ce que je vais te donner.
                                        Dans ItemHeartArrow :

                                        private int potionId;
                                        private int potionDuration;
                                        private int potionAmplifier;
                                        private float potionEffectProbability;
                                        

                                        Inutile, supprimes.
                                        Dans ItemHeartBow :

                                        private int potionId;
                                        private int potionDuration;
                                        private int potionAmplifier;
                                        private float potionEffectProbability;
                                        

                                        et

                                        /**
                                        * called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount
                                        * @return
                                        */
                                        public Item setPotionEffect(int par1, int par2, int par3, float par4)
                                        {
                                        this.potionId = par1;
                                        this.potionDuration = par2;
                                        this.potionAmplifier = par3;
                                        this.potionEffectProbability = par4;
                                        return this;
                                        }
                                        

                                        Même chose, retire ça ne peut pas fonctionner. Ça fonctionne avec ItemPotion.java, car ces variables sont utilisés dans d’autres codes.

                                        Dans ta classe EntityHeartArrow, supprime onImpact et mets :

                                        public void onCollideWithPlayer(EntityPlayer player)
                                        {
                                        player.addPotionEffect(new PotionEffect(Potion.heal.potionId, 400, 10));
                                        }
                                        
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Axaurus
                                          Axaurus dernière édition par

                                          Salut
                                          Merci, mais j’ai des problèmes :
                                          J’obtiens l’effet à chaque fois que je tire avec l’arc et non quand la flèche me touche.

                                          Merci d’avance

                                          PS : comment enlever les dégâts de flèches svp ?

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • robin4002
                                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                            Remplace tout ça :

                                            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;
                                            }
                                            
                                            EntityHeartArrow entityheartarrow = new EntityHeartArrow(par2World, par3EntityPlayer, f * 2.0F);
                                            

                                            par :

                                            EntityHeartArrow entityheartarrow = new EntityHeartArrow(par2World, par3EntityPlayer, 0F);
                                            

                                            Ça devrait enlever les dégâts.

                                            Pour l’effet je vais devoir encore regarder vu que ça fonctionne toujours pas 😕

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB