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

    Résolu Ailes,Monture,item qui permet de spawn une entity,MultiTool

    1.7.x
    1.7.10
    7
    41
    5354
    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.
    • leo01418
      leo01418 dernière édition par

      Bonjour (re plutôt ^^) 
      J’ai voulu crée des ailes,monture (qui est un cheval) et un item qui permet de faire spawn une entity mais que le joueur ne peux pas faire spawn si il à déjà fait spawn l’entity mais que lorsque qu’il fait un click gauche sur le mob en question sa va le faire disparaître et il va pouvoir le faire re spawn

      Pour les Ailes j’ai fait un codage mais le problème c’est que quand je met les ailes on peux volé mais quand on les enlevé on peut encore volé et  que j’aimerais que tu peux que volé que 5 secondes
      Le Codages des Ailes:

      public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
      {
      
      if(this.armorType == 1)
      {
      player.capabilities.allowFlying = true;
      if(player.capabilities.allowFlying = true)
      {
      System.out.println("TestFly");
      }
      }
       }
      

      Le Codage  pour l’item qui permet de spawner une entity

      public class SpawnerHorse extends Item {
      
      public SpawnerHorse()
      {
      super();
      }
      
       public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
      
      {
         if(!world.isRemote)
         {
             Horse Horse = new Horse(world);
             Horse.setPosition(x, y, z);
             world.spawnEntityInWorld(Horse);
             return true;
         }
         return false;
      }
      }
      

      Et pour l’entity le premier problème est que l’entity ne peut pas sauté,le 2 elle est bloqué sur l’animation du cheval et la 3 est est ce que on peut changé la texture?
      Le Code du Cheval

      import net.minecraft.entity.EntityAgeable;
      import net.minecraft.entity.SharedMonsterAttributes;
      import net.minecraft.entity.ai.attributes.IAttribute;
      import net.minecraft.entity.ai.attributes.RangedAttribute;
      import net.minecraft.entity.passive.EntityHorse;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.util.StatCollector;
      import net.minecraft.world.World;
      
      public  class Horse extends EntityHorse
      {
      public Horse(World model)
      {
      super(model);
      }
      
      public void applyEntityAttributes()
          {
              super.applyEntityAttributes();
              this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(3D);    
              this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.5D);
          }  
      
      public boolean canBeSteered()
          {
              return true;
          }
      
          public boolean isHorseSaddled()
          {
              return true;
          }
      
      public boolean isHorseJumping()
          {
              return true;
          }
      
      public boolean isTame()
          {
              return true;
          }
      
          public boolean isChested()
          {
              return false;
          } 
      
      public boolean interact(EntityPlayer par1EntityPlayer)
        {
            if (super.interact(par1EntityPlayer))
            {
                par1EntityPlayer.mountEntity(this);
                return true;
            }
            for (int i = 0; i < 2; ++i)
            {
                this.worldObj.spawnParticle("largesmoke", this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D);
            }
            return false;
        }
      
      public boolean jumpRearingCounter()
      {
      return true;
      }
      public boolean jumpPower()
      {
      return true;
      }
      public boolean horsejumping()
      {
      return true;
      }
      public boolean isEatingHaystack()
      {
      return true;
      }
      public boolean isRearing()
      {
      return true;
      }
      @Override
      public EntityAgeable createChild(EntityAgeable p_90011_1_)
      {
      return null;
      }
      public String getCommandSenderName()
      {
          if (this.hasCustomNameTag())
          {
              return this.getCustomNameTag();
          }
          else
          {
              int i = this.getHorseType();
      
              switch (i)
              {
                  case 0:
                  default:
                      return StatCollector.translateToLocal("entity.skeletonhorse.name");
      
              }
          }
      }
      }
      
      

      Excusez-moi pour l’orthographe

      Voila ma signature

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

        Re,
        Pour le 1, il faut repasser player.capabilities.allowFlying sur false une fois l’armure. Je ne suis pas sûr qu’il existe une fonction qui est appelé lorsqu’une armure est retiré. Faut chercher. Si ça existe il suffit d’utiliser cette dernière. Sinon il faut passer un event de tick du joueur, s’il peut fly, qu’il n’est pas en créatif et qu’il n’a pas d’armure il faut remettre sur false.

        1. Il faut utiliser le tag nbt.
        public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
        {
        if(!stack.hasTagCompound())
        {
        stack.setTagCompound(new NBTTagCompound());
        }
        if(!world.isRemote && !stack.getTagCompound().getBoolean("used"))
        {
        Horse horse = new Horse(world);
        horse.setPosition(x, y, z);
        world.spawnEntityInWorld(horse);
        stack.setTagCompound().getBoolean("used", true);
        return true;
        }
        return false;
        }
        

        Et ensuite dans la fonction interact de ton entité si par1EntityPlayer.getCurrentEquippedItem() n’est pas null, que par1EntityPlayer.getCurrentEquippedItem().getItem() est ton item.
        Ensuite même condition pour ajouter un tag nbt si non présent :

        if(!par1EntityPlayer.getCurrentEquippedItem().hasTagCompound())
        {
        par1EntityPlayer.getCurrentEquippedItem().setTagCompound(new NBTTagCompound());
        }
        

        Et ensuite si par1EntityPlayer.getCurrentEquippedItem().getTagCompound().getBoolean(“Used”) est sur true tu le repasse sur false et tu fais un this.setDead()

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

          J’ai oubli le codage du multi tool
          Excusez-moi x)

          Voila ma signature

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

            J’ai fait sa mais sa marche même plus  😞

            public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack,int tick)
            {
            
            if(this.armorType == 1)
            {
            player.capabilities.allowFlying = true;
            
            if(player.capabilities.allowFlying = true)
            {
            System.out.println("TestFly");
            }
            int coldoown;
            coldoown = tick;
            coldoown = 1;
            coldoown = 2;
            coldoown = 3;
            coldoown = 4;
            coldoown = 5;
            
            if(player.capabilities.allowFlying = false)
            {
            System.out.println("TestFlyTest");
            }
            }
             }
            

            Voila ma signature

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

              Heu ? C’est sensé être quoi ?

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

                C’est Censé être le temps du vol même moi je sais pas ce que j’ai fait

                Voila ma signature

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

                  Comment te dire que la valeur de ton cooldown va passer à 5 en moins d’un centième de tick, que “= true” et “=false” ne respectent pas les conventions et que tu fais une condition juste après avoir mis la valeur

                  Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

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

                    Quelqu’un connait une fonction quand je joueur retire l’armure?

                    Voila ma signature

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

                      Bah sinon tu peux passer un boolean à true si il a son armure et tu check dans un tick handler, si il ne l’a plus et que le boolean était à true

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

                        J’ai fait sa mais sa marche toujours pas alors que dans la console sa met FlyOn

                        public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
                        {
                        
                        if(this.armorType == 1)
                        {
                        FlyOn = true;
                        
                        if(FlyOn = true)
                        {
                        System.out.println("FlyOn");
                        }
                        if(FlyOff = false)
                        {
                        System.out.println("FlyOff");
                        }
                        }
                         }
                        public void Fly(World world, EntityPlayer player, ItemStack itemStack)
                        {
                        
                        if(FlyOn = true)
                        {
                        player.capabilities.allowFlying = true;
                        }
                        if(FlyOff = false)
                        {
                        player.capabilities.allowFlying = false;
                        }
                        }
                        public boolean FlyOn(World world, EntityPlayer player, ItemStack itemStack)
                        {
                        return true;
                        
                        }
                        public boolean FlyOff(World world, EntityPlayer player, ItemStack itemStack)
                        {
                        return false;
                        
                        }
                        

                        Voila ma signature

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

                          Tu ne mets jamais FlyOn à false
                          Et essaye de respecter la convention java

                          Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                          AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                          Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                          Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

                            Si, il mets toujours flyOn à false puisque il mets des = au lieu des ==

                            Moddeur 1.8

                            Développeur Java

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

                              Il faut que tu fasse quelque chose comme ça (pas éxactement ça, mais c’est l’idée) :

                              
                              public static int counter = 0;
                              
                              @Override
                              public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {
                              player.capabilities.allowFlying = !player.capabilities.allowFlying ? [font=monospace**this**][font=monospace.][font=monospacearmorType] == 1 : !counter >= 100; // 100 car 20 ticks par seconde
                              counter = player.capabilities.allowFlying ? counter + 1 : 0;
                              }
                              
                              

                              Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

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

                                Vu son code, je ne pense pas qu’il comprenne encore bien les conditions ternaires sans explication.

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

                                  @‘Toutoune1008’:

                                  Vu son code, je ne pense pas qu’il comprenne encore bien les conditions ternaires sans explication.

                                  J’ai enlevé le reset du counter, car sinon ça va se relancer en continu, et j’ai documenté le code. Faudrait reset le counter quand on enlève l’armure (c’est pas trop compliqué t’inquiète)

                                  
                                  public static int counter = 0;
                                  
                                  /*
                                  Si le joueur ne vole pas et que l'Item est porté sur le plastron alors il vole, si le joueur vole et que le counter est à 5 secondes alors il ne vole plus
                                  Si le joueur vole alors le counter s'incrémente tous les ticks 
                                  100 car 20 ticks par seconde
                                  */
                                  @Override
                                  public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {
                                      player.capabilities.allowFlying = !player.capabilities.allowFlying ? [font=monospace**this**][font=monospace.][font=monospacearmorType] == 1 : !counter >= 100; 
                                      if(player.capabilities.allowFlying)
                                           ++counter;
                                  }
                                  
                                  

                                  Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

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

                                    Je peut toujours volé à l’infini

                                    Voila ma signature

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

                                      Je crois que je me suis mal exprimé ce que j’essaie de faire c’est un temps de vole et non un cooldown entre chaque vole

                                      Voila ma signature

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

                                        Pourquoi faire compliqué quand on peut faire simple x)

                                        
                                        @SubscribeEvent
                                        public void livingEntity(LivingUpdateEvent event)
                                        {
                                        if (event.entityLiving instanceof EntityPlayer)
                                        {
                                        EntityPlayer player = (EntityPlayer)event.entityLiving;
                                        if((player.getCurrentArmor(0) || player.getCurrentArmor(1) || player.getCurrentArmor(2) || player.getCurrentArmor(3)) && (player.getCurrentArmor(0).getItem() == TaClasseMod.tonCasque || player.getCurrentArmor(0).getItem() == TaClasseMod.tonPlastron || player.getCurrentArmor(0).getItem() == TaClasseMod.tesJambieres || player.getCurrentArmor(0).getItem() == TaClasseMod.tesBottes))
                                        player.capabilities.isFlying = true;
                                        else
                                        player.capabilities.isFlying = false;
                                        }
                                        }
                                        
                                        
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Dylem
                                          Dylem dernière édition par

                                          @‘Plaigon’:

                                          Pourquoi faire compliqué quand on peut faire simple x)

                                          
                                          @SubscribeEvent
                                          public void livingEntity(LivingUpdateEvent event)
                                          {
                                          if (event.entityLiving instanceof EntityPlayer)
                                          {
                                          EntityPlayer player = (EntityPlayer)event.entityLiving;
                                          if((player.getCurrentArmor(0) || player.getCurrentArmor(1) || player.getCurrentArmor(2) || player.getCurrentArmor(3)) && (player.getCurrentArmor(0).getItem() == TaClasseMod.tonCasque || player.getCurrentArmor(0).getItem() == TaClasseMod.tonPlastron || player.getCurrentArmor(0).getItem() == TaClasseMod.tesJambieres || player.getCurrentArmor(0).getItem() == TaClasseMod.tesBottes))
                                          player.capabilities.isFlying = true;
                                          else
                                          player.capabilities.isFlying = false;
                                                           }
                                                 }
                                          
                                          

                                          Je crois que tu n’as pas compris son problème… Il veut voler seulement 5 secondes (et en quoi c’est plus simple d’écrire 10 lignes au lieu de 2 ? x)

                                          [size=smallJe peut toujours volé à l’infini]

                                          Essaie de cast dans un booléen différent, je testerai ce soir si je fais pas de soirée

                                          Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

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

                                            Le formatteur de mff a fait plein de retour a la ligne, chez moi sa n en fait pas autant.
                                            Apres si il veut juste 5 sec a lui d adapter son code avec la variable world.getTotalWorldTime()
                                            Et puis @Dylem, essaie au moins d adapter ton code avec getTotalWorldTime(), sinon il devra enregistrer la var counter dans les tags de l item, ce qui au final ne sera pas une solution + facile…

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB