MFF

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

    Ailes,Monture,item qui permet de spawn une entity,MultiTool

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    41 Messages 7 Publieurs 6.5k 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.
    • robin4002R Hors-ligne
      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
      • leo01418L Hors-ligne
        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
        • leo01418L Hors-ligne
          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
          • robin4002R Hors-ligne
            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
            • leo01418L Hors-ligne
              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
              • DylemD Hors-ligne
                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
                • leo01418L Hors-ligne
                  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
                  • DeletedD Hors-ligne
                    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
                    • leo01418L Hors-ligne
                      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
                      • AymericRedA Hors-ligne
                        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_1803S Hors-ligne
                          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
                          • DylemD Hors-ligne
                            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
                            • FolganskyF Hors-ligne
                              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
                              • DylemD Hors-ligne
                                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
                                • leo01418L Hors-ligne
                                  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
                                  • leo01418L Hors-ligne
                                    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
                                    • DeletedD Hors-ligne
                                      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
                                      • DylemD Hors-ligne
                                        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
                                        • DeletedD Hors-ligne
                                          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
                                          • DylemD Hors-ligne
                                            Dylem
                                            dernière édition par

                                            Bon, j’ai la réponse au sujet, en tout cas chez moi ça marche (avec une pomme, donc rajoute une condition si l’armure est portée) , mets ce code dans ta classe qui gère les évènements:

                                            
                                            private long temp;
                                            
                                            @SubscribeEvent
                                            public void fly(LivingUpdateEvent e) {
                                                if(e.entity instanceof EntityPlayer) {
                                                    EntityPlayer player = (EntityPlayer)e.entity;
                                                    player.capabilities.allowFlying = player.inventory.hasItem(Items.apple) && this.temp > 0;
                                                    this.temp = !player.inventory.hasItem(Items.apple) ? 0 : this.temp == 0 ? Clock.systemDefaultZone().millis() : Clock.systemDefaultZone().millis() - temp >= 5000 ? -1 : this.temp;
                                                    if(!player.capabilities.allowFlying)
                                                        player.capabilities.isFlying = false
                                                }
                                            }
                                            
                                            

                                            @Plaigon J’ai pas utilisé le getTotalWorldTime() car je sais pas comment il marche, il me semble que c’est relatif au temps de minecraft ? Dans tous les cas ça fonctionnera mieux en utilisant une clock basique 🙂

                                            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
                                            • 1
                                            • 2
                                            • 3
                                            • 3 / 3
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB