Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Créer des effets de potions

    Autres
    1.7.x
    11
    36
    13256
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Ama
      Ama last edited by 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

      1 Reply Last reply Reply Quote 0
      • Diangle
        Diangle last edited by

        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 Reply Last reply Reply Quote 0
        • Fine33
          Fine33 last edited by

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

          1 Reply Last reply Reply Quote 0
          • pulgan
            pulgan last edited by

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

            1 Reply Last reply Reply Quote 0
            • Ama
              Ama last edited by

              @‘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

              1 Reply Last reply Reply Quote 0
              • Fine33
                Fine33 last edited by

                Oui, je répondais à Diangle 😉

                1 Reply Last reply Reply Quote 0
                • pulgan
                  pulgan last edited by

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

                  1 Reply Last reply Reply Quote 0
                  • sosoh
                    sosoh last edited by

                    Je trouves pas pour le bonus… Help Please

                    1 Reply Last reply Reply Quote 0
                    • sosoh
                      sosoh last edited by

                      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 ?

                      1 Reply Last reply Reply Quote 0
                      • P
                        Portuar last edited by

                        #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 Reply Last reply Reply Quote 0
                        • sosoh
                          sosoh last edited by

                          Je peux débuter non ?

                          1 Reply Last reply Reply Quote 0
                          • pulgan
                            pulgan last edited by

                            @‘sosoh’:

                            Je peux débuter non ?

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

                            1 Reply Last reply Reply Quote 0
                            • sosoh
                              sosoh last edited by

                              @‘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…

                              1 Reply Last reply Reply Quote 0
                              • sosoh
                                sosoh last edited by

                                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){
                                
                                            }
                                        }
                                    }
                                }
                                
                                1 Reply Last reply Reply Quote 0
                                • sosoh
                                  sosoh last edited by

                                  S’il vous plait je galere je ne trouves pas :’(

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    Portuar last edited by

                                    C est cette ligne

                                    ​
                                    
                                    
                                    1. if (event.entityLiving.isPotionActive(BOTIEffect.superPowersFlash))
                                    1 Reply Last reply Reply Quote 0
                                    • sosoh
                                      sosoh last edited by

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

                                      1 Reply Last reply Reply Quote 0
                                      • robin4002
                                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                        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 Reply Last reply Reply Quote 0
                                        • sosoh
                                          sosoh last edited by

                                          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?

                                          1 Reply Last reply Reply Quote 0
                                          • robin4002
                                            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                            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 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales / Faire un don

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB