30 oct. 2014, 16:16

Sommaire

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

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 :

Correction :

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