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
- 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 :
Correction :
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