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

    Créer des effets de potions

    Autres
    1.7.x
    11
    36
    14899
    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.
    • Ama
      Ama dernière édition par robin4002

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • Classe CustomPotion
        • Classe Principale
      • Bonus
      • Résultat
      • Crédits

      Introduction

      Yellow à tous ! Je reviens parmi vous pour vous faire un petit tutoriel fort sympathique !
      Et ce, pour créer des effets de potions customs ! Et seulement des effets de potion, pas la potion !
      Bonne lecture !

      Pré-requis

      • Créer la base de votre mod
      • Une goutte d’Eclipse, un zeste de Java et une pincée de temps !

      Code

      Classe CustomPotion :

      Commençons par créer la classe CustomPotion.java que nous extendrons Potion.java
      Et voilà ce que ça nous donne:

      import net.minecraft.potion.Potion;
      
      public class CustomPotion extends Potion {
      
          protected CustomPotion(int p_i1573_1_, boolean p_i1573_2_, int p_i1573_3_){
              super(p_i1573_1_, p_i1573_2_, p_i1573_3_);
          }
      }
      

      Vu que p_i1573_1_, p_i1573_2_, p_i1573_3_ a relativement un effet vomitif sur mes yeux nous allons changer ça en ID, isBadEffectOrNot, color

      Ce qui sera tout de suite plus lisible et plus compréhensible

      import net.minecraft.potion.Potion;
      
      public class CustomPotion extends Potion{
          protected CustomPotion(int id, boolean isBadEffectOrNot, int color, String name) {
              super(id, isBadEffectOrNot, color);
          }
      }
      

      Dans le constructeur ajoutons la fonction pour définir le nom de nos futurs effets de potions !
      Voilà pourquoi le petit String name est parmi nous, pour nous simplifier la vie !

      this.setPotionName("potion." + name);
      

      Ensuite dans la classe il va falloir rajouter 3 fonctions, qui sont les suivantes:

      @Override
      public CustomPotion setIconIndex(int x, int y) 
      {
          super.setIconIndex(x, y);
          return this;
      }
      
      public static void loadEffects()
      {
      
      }
      
      public static void register() 
      {
      
      }
      

      Bien, passons maintenant au vif du sujet en ce qui concerne la création de nos effets de potions !

      Entre le constructeur et le début de la classe il nous faut déclarer deux choses:

      • L’effet de potion
      • L’ID de ce dernier

      Pour ce faire rien de plus simple !

          public static CustomPotion customEffect;
      public static int customEffectID;
      

      Ces deux petits bouts de lignes nous servent à créer la potion en elle même (elle est prête à être créée à ce stade) et l’autre à lui définir un ID

      Passons à la deuxième fonction “loadEffects()”

      et ajoutons ce code que je vous ai préparé !

      customEffect = new CustomPotion(customEffectID, true, Color.red.getRGB(), "customEffectDeFifou").setIconIndex(4, 2);
      

      Et expliquons tout ça !
      D’une certaine manière cela ressemble à la création d’un bloc ou d’un objet basique ! C’est cool non ?

      customEffectID = l’ID de notre effet de potion
      true = (isBadEffectOrNot) traduction Malus ou Bonus ?
      ici c’est un Malus en true et si c’est false c’est un Bonus !
      La différence entre les deux ? À vous de voir ! Tout le reste passe par des events !
      Color.red.getRGB() = La couleur des particules de potion une fois sur vous
      “customEffectDeFifou” = Le nom de la potion dans l’inventaire (L’effet toujours ! Nous ne créons pas d’item potion !)
      .setIconIndex(4, 2); = Ajoute une petit icône à votre effet de potion, pour ce faire il faut modifier l’image “inventory.png” qui ce trouve dans la version de minecraft .jar “assets/gui/inventory.png”
      Moi je fait comme ça en tout cas, il y a sans doute une autre solution, mais je ne la connais pas 😕

      Et pour “terminer” dans la classe CustomPotion il faut enregistrer notre potion !

      Allez dans la fonction “register()” et ajoutez

      CustomPotion.potionTypes[customEffect.getId()] = customEffect;
      

      Pour faire simple:

      On get le type de potion que nous avons fait, plus précisément sont ID (/!\ Pas customEffectID nous ne l’avons pas définie encore), puis on l’attribue à notre effet de potion !

      Et nous avons terminé la partie où nous créons notre effet de potion !
      Mais il manque 2 / 3 trucs encore ! Et il faut aller dans la classe principale !

      Classe Principale :

      Bien, définissons un ID à notre potion !

      Dans la fonction “preInit” (Pré-Initialisation), ajoutez ceci:

      CustomPotion.customEffectID = 30;

      Il faut que l’ID soit supérieur à 24 et inférieur à 32 sinon votre jeu crashera !
      Ce qui vous laisse la possibilité de créer …8 effets de potions…

      C’est NUL ! REMBOURSÉ ! REMBOURSÉ !

      Petite aparté…

      La classe Potion.java est comme l’ancienne classe Block.java il faut passer par des ID pour créer notre effet, mais, car il y a toujours un MAIS, seulement 32 slots sont réservés pour les potions ! Ce qui nous laisse pas énormément de possibilités !
      La seule solution serait de passer par l’ASM et de modifier cette valeur, mais là encore je ne suis pas sûr de mes dires !
      A confirmer…

      Il vous faut encore ajouter deux choses !
      Dans la fonction “init” (Initialisation)

          CustomPotion.loadEffects();
      CustomPotion.register();
      

      Et voilà notre effet de potion est prêt ! Mais le mieux est de faire en sorte que si notre effet est actif par exemple notre joueur aille plus vite ? Et pour faire ce genre de modification sur le joueur, moi je passe par les events !

      Bonus

      Comment faire pour que notre joueur aille plus vite si il a l’effet de potion actif ?

      GROS INDICE:

      if(event.entityLiving instanceof EntityPlayer)
      {
          if (event.entityLiving.isPotionActive(BOTIEffect.superPowersFlash))
          {
              if (event.entityLiving.getActivePotionEffect(BOTIEffect.superPowersFlash).getDuration() == 0)
              {
                  event.entityLiving.removePotionEffect(BOTIEffect.superPowersFlash.id);
                  return;
              }
              if (event.entityLiving.worldObj.isRemote)
              {
                  if(event.entityLiving.onGround)
                  {
                      event.entityLiving.motionX *= 1.6F;
                      event.entityLiving.motionZ *= 1.6F;
                  }
              }
          }
      }
      

      Je ne vous dirais pas quel event utiliser, car là j’en ai trop dit ! À vous de trouver !

      Résultat

      Fichiers .lang

      en_US.lang:

      potion.customEffectDeFifou=Custom Effect
      

      fr_FR.lang:

      potion.customEffectDeFifou=Effet Custom
      

      Dans l’inventaire :

      Les particules sont rouges :

      Crédits

      Rédaction :

      • ZeAmateis

      Correction :

      • Fine33

      Creative Commons
      Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      retourRetour vers le sommaire des tutoriels

      Si je t'ai filé un coup de main n'oublie pas le + / -
      Par contre évite les demandes d'aides en MP, tu sera sympa'

      La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

      Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

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

        Tu ne développe pas assez, je te demande une chose dure mais pourquoi pas montrer les craft de potion (j’ai mis au moins un mois a comprendre c’est très dure) ? Et développer un peux avec les attributs… Sinon très bon tutoriel et quand je dit développer je veux dire montrer comment changé des attributs, modifier la vue… Et il y a deux ou trois autre fonction cool, si tu peux les expliquer.

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

          Sauf erreur de ma part, il a écrit que ce n’est que les effets de potion, pas les potions en elles-mêmes 😉

          Mes mods :

          Agriculcraft

          #L'âge ne fait pas le mod.(L'âge ne fait pas le mod.)

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

            les modifications de l’ath sont provoquer par l’effet de la potion d’après mon point de vue

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

              @‘Fine33’:

              Sauf erreur de ma part, il a écrit que ce n’est que les effets de potion, pas les potions en elles-mêmes 😉

              Oui ce n’est que les effets de potions car je trouve que cela reste simple de créer un item potion et de faire en sorte d’addPotionEffect

              Envoyé depuis mon Android edition by sfr STARADDICT avec Tapatalk

              Si je t'ai filé un coup de main n'oublie pas le + / -
              Par contre évite les demandes d'aides en MP, tu sera sympa'

              La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

              Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

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

                Oui, je répondais à Diangle 😉

                Mes mods :

                Agriculcraft

                #L'âge ne fait pas le mod.(L'âge ne fait pas le mod.)

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

                  tu peut le faire en partie bonus sa fait plus de contenu

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

                    Je trouves pas pour le bonus… Help Please

                    Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                      Up, tu peux dire comment rajouter des effets autres que speed par exmple pour fusionner 2 effets de potion sous un autre nom etc… Ou comment créer des effets completement customs ?

                      Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                        #event tu mes un if(l effet est actif) et tu fais ce que tu veux a l intérieur c est pas sorcier !

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

                          Je peux débuter non ?

                          Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                            @‘sosoh’:

                            Je peux débuter non ?

                            Bah Va voir un tuto sur java car c’est la base

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

                              @‘pulganr’:

                              @‘sosoh’:

                              Je peux débuter non ?

                              Bah Va voir un tuto sur java car c’est la base

                              Mais je ne maitrise pas les events encore c’est pour ca… D’ailleurs j’ai toujours pas trouvé… Je cherche dans toutes les classes des events mais je ne trouves pas l’event pour savoir si un joueur a un effet de potion…

                              Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                                Tu peux m’aider, j’ai créer une classe avec mon event:

                                package com.harrypotter.sosoh.common;
                                
                                import net.minecraft.entity.player.EntityPlayer;
                                import net.minecraft.entity.player.EntityPlayerMP;
                                import cpw.mods.fml.common.gameevent.TickEvent;
                                import cpw.mods.fml.common.gameevent.TickEvent.Phase;
                                import cpw.mods.fml.common.gameevent.TickEvent.Type;
                                import cpw.mods.fml.relauncher.Side;
                                
                                public class EventHandler {
                                
                                    public static class PlayerTickEvent extends TickEvent {
                                        public final EntityPlayer player;
                                
                                        public PlayerTickEvent(Phase phase, EntityPlayer player)
                                        {
                                            super(Type.PLAYER, player instanceof EntityPlayerMP ? Side.SERVER : Side.CLIENT, phase);
                                            this.player = player;
                                        }
                                    }
                                }
                                

                                Mais je ne trouves pas comment checker si le joueur a mon effet… J’ai essaye avec ca mais ca ne marche pas:

                                package com.harrypotter.sosoh.common;
                                
                                import net.minecraft.entity.player.EntityPlayer;
                                import net.minecraft.entity.player.EntityPlayerMP;
                                import cpw.mods.fml.common.gameevent.TickEvent;
                                import cpw.mods.fml.common.gameevent.TickEvent.Phase;
                                import cpw.mods.fml.common.gameevent.TickEvent.Type;
                                import cpw.mods.fml.relauncher.Side;
                                
                                public class EventHandler {
                                
                                    public static class PlayerTickEvent extends TickEvent {
                                        public final EntityPlayer player;
                                
                                        public PlayerTickEvent(Phase phase, EntityPlayer player)
                                        {
                                            super(Type.PLAYER, player instanceof EntityPlayerMP ? Side.SERVER : Side.CLIENT, phase);
                                            this.player = player;
                                            if player.getActivePotionEffect(SomniferePotionEffect){
                                
                                            }
                                        }
                                    }
                                }
                                

                                Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                                  S’il vous plait je galere je ne trouves pas 😢

                                  Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                                    C est cette ligne

                                    ​
                                    
                                    
                                    1. if (event.entityLiving.isPotionActive(BOTIEffect.superPowersFlash))
                                    1 réponse Dernière réponse Répondre Citer 0
                                    • sosoh
                                      sosoh dernière édition par

                                      Ah ok merci! J’etais bloqué et tu me rend extrêmement service 🙂

                                      Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                                        Déjà tu devais lire le tutoriel sur les event car le code que tu as mit ne risque pas du tout de fonctionner …
                                        Et 24h entre chaque message, merci de respecter le règlement.

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

                                          J’ai mis le code, suivis le tuto sur les events mais je ne sais pas par quoi remplacer 
                                          :::
                                          [size=xx-smallBOTIEffect][size=xx-small.][size=xx-smallsuperPowersFlash]
                                          :::

                                          J’ai remplacer BOTIEffect par SomniferePotionEffect, mais pour le superPowersFlash je ne sais pas quoi mettre car sinon ca fais une erreur…

                                          Et la j’ai pas besoin d’attendre 24h pour répondre non ? Car tu as mis un message toi non?

                                          Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                                            Oui, 24h entre deux posts de la même personne, dans l’autre cas il suffit d’éditer le message …
                                            C’est presque la même règle sur tous les forums, ça évite le spam.

                                            Logiquement tu mets ClassOuSeTrouveLaDeclarationDeLaPotion.nomDuField
                                            ça c’est la base en Java, il faut l’apprendre (il y a un bon tutoriel sur OpenClassRoom) sinon tu n’arrivera à rien.

                                            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