MFF

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

    OnItemRightClick sur une entity.

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    125 Messages 8 Publieurs 21.6k 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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      TickHandler avec la variable getTotalWorldTime() + modulo

      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

        TickEvent.PlayerTickEvent*
        L’interface ITickHandler n’existe plus depuis la 1.7

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

          J’ai trouvais ça sur internet je dois définir le nombre de tick comment?

          @SubscribeEvent
          public void onPlayerTickEvent(TickEvent.PlayerTickEvent event) {
              if (event.phase == TickEvent.Phase.START && !event.player.worldObj.isRemote) {
                  IExtendedEntityProperties properties = event.player.getExtendedProperties(PlayerExtendedProperties.ID);
                  if (properties instanceof PlayerExtendedProperties) {
                      PlayerExtendedProperties playerExtendedProperties = (PlayerExtendedProperties) properties;
                      playerExtendedProperties.tick();
                  }
                  properties = event.player.getExtendedProperties(PlayerPreferencesProperties.ID);
                  if (properties instanceof PlayerPreferencesProperties) {
                      PlayerPreferencesProperties preferencesProperties = (PlayerPreferencesProperties) properties;
                      preferencesProperties.tick(RFToolsMessages.INSTANCE);
                  }
              }
          }
          
          1 réponse Dernière réponse Répondre Citer 0
          • DeletedD Hors-ligne
            Deleted
            dernière édition par

            Le nombre de tick à la seconde est déjà défini.
            Ton code va logiquement crash car worldObj sera null lorsque le menu principal sera ouvert.
            Du coup null-check pour le world et pour faire vérifier un code tous les x nbre de tick, c’est comme ça

            
            if(event.player.worldObj.getTotalWorldTime() % (nbreDeSecondes * 20) == 0
            {
            System.out.println("ton code à exécuter avec ton ExtProp");
            }
            
            
            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

              PlayerTickEvent n’est que appelé en jeu, donc normalement event.player.worldObj ne sera jamais nul. Pas besoin de null check.

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

                Ok je reverrai mes sources la prochaine fois 😉

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

                  J’ai fais sa je suis pas trop sur que ça marche…

                    @SubscribeEvent
                    public void onPlayerTickEvent(TickEvent.PlayerTickEvent event) {
                  
                    if(event.player.worldObj.getTotalWorldTime() % (60 * 20) == 0)
                    {
                    ExtendedEntityPropAlcool prop = ExtendedEntityPropAlcool.get(event.player);
                         prop.setAlcool(prop.getAlcool() - 1);
                    System.out.println("Test!");
                    }
                    }
                  
                  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

                    Normalement ça devrait être bon.
                    Regardes en jeu si Test ! s’affiche. Si ce n’est pas le cas c’est surement car ta classe n’est pas enregistré avec FMLCommonHandler.instance().bus().register(new NomDeTaClasseD’event());

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

                      D’acc je vais voir ça, sinon aussi des fois je rencontre quelques problème par exemple: lorsque je bois un verre d’alcool mon niveau d’alcoolémie devrais normalement augmenté que de 1 bah des fois même souvent, il augmente de 2 😕

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

                        Ouais merci je l’avais enregistré avec MinecraftForge.EVENT_BUS … Par j’ai un soucis le message TEST il me l’envois 4 fois (2 fois server 2 fois clients ) au lieux de 2 fois (1 fois client 1 fois server) .

                        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

                          @‘floriangabet’:

                          D’acc je vais voir ça, sinon aussi des fois je rencontre quelques problème par exemple: lorsque je bois un verre d’alcool mon niveau d’alcoolémie devrais normalement augmenté que de 1 bah des fois même souvent, il augmente de 2 😕

                          Sûrement un problème client/serveur ajoutes un if(!player.worldObj.isRemote) avant d’exécuter le code qui augmente le niveau d’alcoolémie pour le faire seulement côté serveur.

                          @‘floriangabet’:

                          Ouais merci je l’avais enregistré avec MinecraftForge.EVENT_BUS … Par j’ai un soucis le message TEST il me l’envois 4 fois (2 fois server 2 fois clients ) au lieux de 2 fois (1 fois client 1 fois server) .

                          Ne retire pas la ligne MinecraftForge.EVENT_BUS si tu as aussi des événements Forge dans la classe. Il faut mettre les deux en même temps (c’est un peu confus, en 1.8 ils ont changé ça, MinecraftForge.EVENT_BUS suffit).
                          Pour le message en quadruple, ajoutes une condition if(event.phase == TickEvent.Phase.END) (l’event est appelé deux fois, au début du tick et à la fin du tick).

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

                            Merci j’essaye ça!

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

                              Merci c’est nickel par contre j’ai aperçu que après de nombreuse heure de jeu on pouvais atteindre le niveau -1 etc jusqu’à l’infinie et moi je voudrais que il s’arrête a 0 et que une fois a 0 ou le timer se bloque ou alors on cancelled l’action vous pouvez m’aider pour ça ?.

                              Code:

                                @SubscribeEvent
                                public void onPlayerTickEvent(PlayerTickEvent event) {
                              
                                if(event.player.worldObj.getTotalWorldTime() % (900 * 20) == 0)
                                {
                                if(event.phase == TickEvent.Phase.END)
                                {
                                ExtendedEntityPropAlcool prop = ExtendedEntityPropAlcool.get(event.player);
                                     prop.setAlcool(prop.getAlcool() - 1);
                              //faire un truc ici du genre if(prop.setAlcool(ETC j'ai essayer avec = 0 j'ai une érreur .. 
                              }
                                }
                                }
                              
                              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

                                if(prop.getAlcool() > 0)
                                {
                                  prop.setAlcool(prop.getAlcool() - 1);
                                }
                                

                                Rien de compliqué.

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

                                  Merci 🙂

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

                                    Dernière question après je close si je veux privilégier un item lors de la mort je dois faire comment ?

                                    En gros faire en sorte que lorsque le mec a un bloc de terre des que il meurt le bloc de terre reste dans son inventaire mais le reste de ses item disparaissent .
                                    if(player.inventory.mainInventory.equals(Blocks.dirt)){

                                    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

                                      Pas facile à faire. Avec l’event de mort il faut check ses items de l’inventaire pour voir s’il a l’item en question, si c’est le cas le retirer de l’inventaire et le mettre dans une map de joueur, itemstack.
                                      Avec l’event de respawn, si le joueur est présent dans cette map on lui remet l’item associer et on retire l’entrée de la map.

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

                                        En gros faut faire sa sur deux event sur l’event de mort et de respawn si j’ai bien compris .

                                        EDIT: Est-ce que tu pourrais me redirigé vers un tutoriel ou alors m’aider ? 
                                        Merci 🙂

                                        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

                                          private Map <entityplayer, itemstack="">itemsToKeep = new HashMap<entityplayer, itemstack="">();
                                          
                                          @SubscribeEvent
                                          public void onDead(LivingDeathEvent event)
                                          {
                                          if(event.entityLiving instanceof EntityPlayer)
                                          {
                                          EntityPlayer player = (EntityPlayer)event.entityLiving;
                                          for(int i = 0; i < player.inventory.getSizeInventory(); i++)
                                          {
                                          ItemStack stack = player.inventory.getStackInSlot(i);
                                          if(stack != null && stack.getItem() == Item.getItemFromBlock(Blocks.dirt))
                                          {
                                          itemsToKeep.put(player, stack);
                                          player.inventory.setInventorySlotContents(i, null);
                                          }
                                          }
                                          }
                                          }
                                          
                                          @SubscribeEvent
                                          public void onRespawn(PlayerRespawnEvent event)
                                          {
                                          if(itemsToKeep.containsKey(event.player))
                                          {
                                          event.player.inventory.addItemStackToInventory(itemsToKeep.get(event.player));
                                          itemsToKeep.remove(event.player);
                                          }
                                          }
                                          ```</entityplayer,></entityplayer,>
                                          1 réponse Dernière réponse Répondre Citer 0
                                          • GabsG Hors-ligne
                                            Gabs
                                            dernière édition par

                                            Merci , mais tu n’as pas vraiment compris fin c’est presque sa je veux simplement faire l’inverse en gros l’item de terre je veux que il soit sauvegarder a chaque fois que on meurt et les autres que l’on a dans l’inventaire a la poubelle . et est-ce-que c’est possible de garder l’item en gros de faire un keepiventory mais juste sur l’item de terre en gros lorsque on respawn il revient directement dans l’inventaire mais que se soit le même item et pas un item give lors du respawn.

                                            “C’est un peu complexe et mal expliqué désolé :/”

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 7
                                            • 2 / 7
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB