Les différentes fonctions en modding

rafoudiablol

Lol ?!
29 Mai 2011
499
16
135
28
Voilà un petit tuto sur les différentes fonctions qui existent sur les blocs, en Modding.
Il est requit d'avoir un minimum de connaissances en java ( ou un autre language informatique, le tout c'est de comprendre ).
J'explique ici les différentes fonctions appelés et suciptibles d'être utilisé dans vos mods.

Il y a certaines fonctions que je ne comprenais pas, mais grâce aux forums anglais et à Google, certaines explications sont tirées de codes de mods.

Ce qui suit ne sera peut-être pas exactement exact, mais cela pourra aider -j'espère- dans les débuts de moddeur.
J'essaye de simplifier au maximum pour éviter un cours sur Java, mais un minimum de théorie n'a jamais fait de mal à personne ;).

Choses à savoir, suivies d'un exemple :

1. une fonction "void" ne renvoit rien.
une fonction "int" renvoit un nombre non-décimal (3321)
une fonction "double" renvoit un nombre décimal (12.43)
une fonction "bool" renvoit un booléen ( true/false)

2. Si une soi disant fonction n'est précédé d'aucun des types des lignes d'au dessus, c'est une méthode :
C'est à dire qu'elle permettra de modifier un objet, mais elle ne sera jamais appelée.
Par exemple, la fonction "void onNeighborBlockChange()" sera appelée quand un bloc adjacent sera modifié, mais la méthode "stackSize" ne sera jamais appelée automatiquement. Il faudra l'utilser dans une fonction, toujours précédée du nom de l'objet.
Exemple : Item.stackSize++

Cela rajoute 1 item dans le stack.
Sachez que si vous voyez un objet suivi d'un point, ce qui suivera sera toujours une méthode.
La différence aussi entre une méthode et une fonction et que la méthode n'a pas d'accolades {}.
Une fonction, dans minecraft, n'a quasiment jamais besoin d'être appelée car c'est automatique.
Chaque classe à toujours des méthodes qui lui sont propres.
Quand vous créez un objet Item, vous créez par la même occasion .stackSize, .maxStickSize, et tout ce qui va avec !

3. Utilisé comme au dessus, l'utilisation de "++" (= l'incrémentation )et de "--" ( = décrémentation ) permettent après un nom d'objet, de rajouter 1 ou de retirer 1 si c'est un nombre.
Je ne m'aventurerai pas plus loin, sinon ça commencerait à devenir compliqué et une page entière ne suffierait pas à tout expliquer^^.


Blocs


Code:
public boolean isOpaqueCube()

Cette fonction sert à éviter les trous de vide dans le bloc.Comment dire.... si votre bloc à des morceaux transparents, éviter de faire un effet "X-ray" sur les faces transparentes de bloc.
Cette fonction renvoit un booléen ( false/true ).
Retourner "false" pour éviter l'effet X-ray.

Code:
public int idDropped(int i, Random random)

Savoir se qu'il tombe au seul quand le block est cassé.
Retourne un nombre, qui est l'ID de votre block à retourner.
Utilisez "return 0" pour qu'il ne tombe rien au sol.
L'objet random est un nombre aléatoire, bien utile pour libérer un nombre aléatoire de poudres à canons lors de la mort d'un creeper, par exemple.

Code:
public void randomDisplayTick(World world, int i, int j, int k, Random random)

Fonction très aléatoire, vu qu'elle peut être appelé n'importe quand.
Elle peut permettre de changer la texture ( pour les torches), générer des monstres, mais elle sera extrêment souvent appelée.
Cette fonction en renvoit rien.

Code:
public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)

Cette fonction est utilisée quand l'entitée Joueur détruit le bloc.
Elle vous permet de prendre en paramètres les coordonnées du monde ainsi, que pour le "l", comme l'a si bien dit Sormweaker, réprésente MetaData, par exemple pour le blé ça représente l'état de maturation.



Code:
public void onNeighborBlockChange(World world, int i, int j, int k, int l)

Fonction très utilisée que j'ai eu beaucoup de mal à comprendre, elle permet d'être appelée quand un des blocs adjacent est modifié.
Le "l" est l'ID du bloc adjacent modifié.

Code:
public boolean blockActivated(World world, int i, int j, int k, EntityPlayer entityplayer)

Est appelé lorsque le joueur utilise le clic droit.
Un conseil : ignorer le fait qu'elle renvoit un booléen true/false, exécutez ici ce que vous voulez faire ( elle prend un paramettre le joueur et le monde... ) et rajoutez un "return true" pour expliquer que tout s'est passé normalement.

Code:
public void onBlockClicked(World world, int i, int j, int k, EntityPlayer entityplayer

Est appelée lorsque quelqu'un essaye de détruire le bloc.
Cette fonction ne renvoit rien, d'ou le "void".

Code:
public boolean isIndirectlyPoweringTo(World world, int i, int j, int k, int l)

Est appelé si le bloc est alimenté par de la redstone, mais peut être utilisé que si vous aviez bien définit que le bloc pouvait en recevoir en retournant true avec cette fonction :

Code:
public boolean canProvidePower()
{
   return true;
}


Items

Code:
stackSize()

Permet de contrôler la valeur du stack dans l'inventaire.Attention, pas la taille maximal, juste celle que le joueur possède.
Utile pour retirer 1 quand l'objet est utilisé.



Code:
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)

Fonction utilisée quand le joueur utilise le clique droit.
Cette fonction return un item, et toutes ses fonctions membres
( le stack, le nom, etc ).




Joueur
Code:
heal()


Pas très compliqué; permet d'envoyer une valeur qui s'ajoute à la vie du joueur. Sachant que 1 = 1/2 coeur.Exemple : EntityPlayer.heal(10)
Guérit 5 coeurs



World

Code:
playSoundEffect((double) i + 0.5D, (double)j + 0.5D, (double)k + 0.5D, "random.click", 0.3F, 0.5F)

Je n'ai pas retrouvé le prototype exacte, donc j'ai mis un exemple tiré de l'interrupteur.
Cette fonction permet de jouer un son, et peut être très pratique lors d'un clic droit, vu que l'on peut prendre en paramètres les coordonnées du monde... vous voyez, tous ses paramètres sont bien utiles tout copte fait ;)

Code:
setBlockWithNotify( int i, int j, int k, int blockID)

Sûrement LA fonction la plus importante du monde : elle permet de modifier un bloc en prenant en paramètres les coordonnées i, j, k par rapport à la position du joueur ou par rapport au bloc qui utilise cette fonction.
i = largeur
j = profondeur ( par rapport au niveau zéro, au fond à la bedrock )
k = hauteur

l'ID sera l'id du bloc placé aux coordonnées correspondantes

Choses à savoir : souvent, les noms avec une majuscule sont les noms d'une classe ( ex. : World ) et et sans majuscules le nom donné à l'objet ( ex. : world ).
Donc si vous voulez changer un bloc, utilisez
world.setBlockWithNotify(i, j, k, Block.dirt.blockID)
et non pas
World.setBlockWithNotify(i, j, k, Block.dirt.blockID).


Code:
isDayTime()

Permet de savoir s'il fait jour.

Cela voudrait dire que vous voudriez changer la classe entière !















Voilà, pour l'instant c'est tout, mais je continuerais dès que possible avec encore plus de fonctions ;)
 
Tu raconte quand même un sacré paquet de connerie ...
Mais bon ça part d'un bon sentiment, et si ça aide, c'est déjà bien.
 
Je vais apporter, je pense, quelques corrections :)

rafoudiablol a dit:
Par exemple, la fonction "void onNeighborBlockChange()" sera appelée quand un bloc adjacent sera modifié, mais la méthode "stackSize()" ne sera jamais appelée automatiquement. Il faudra l'utilser dans une fonction, toujours précédée du nom de l'objet.
Exemple : Item.stackSize++

Cela rajoute 1 item dans le stack.
stackSize() comme tu le dis plus tard permet de savoir le nombre d'item que le joueur possède
stackSize n'a pas de rapport avec cette méthode, c'est une variable qui représente le nombre d'item que le joueur possède

stackSize() renvoie stackSize

rafoudiablol a dit:
Code:
public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)

Cette fonction est utilisée quand l'entitée Joueur détruit le bloc.
Elle vous permet de prendre en paramètres les coordonnées du monde ainsi, que pour le "l", il me semble l'ID du bloc détruit.

Code:
public void onNeighborBlockChange(World world, int i, int j, int k, int l)

Fonction très utilisée que j'ai eu beaucoup de mal à comprendre, elle permet d'être appelée quand un des blocs adjacent est modifié.
Le "l" est l'ID du bloc adjacent modifié.

Le "l" n'est pas l'ID du bloc détruit, car ce code se met dans le fichier Block*.java
"l" représente la MetaData, par exemple pour le blé ça représente l'état de maturation

rafoudiablol a dit:
²
Code:
setBlockWithNotify( int i, int j, int k, int blockID)

Sûrement LA fonction la plus importante du monde : elle permet de modifier un bloc en prenant en paramètres les coordonnées i, j, k par rapport à la position du joueur ou par rapport au bloc qui utilise cette fonction.
i = largeur
j = hauteur
k = profondeur ( par rapport au niveau zéro, au fond à la bedrock )
l'ID sera l'id du bloc placé aux coordonnées correspondantes
Tu as inversé j et k
 
Désolé, il est vrai qu'en fouillant un peu toutes ses multitudes de fonctions, je peux en arriver à quelques erreurs :(

J'essaye de comprendre l'architecture des classes, mais je te remercie pour cette aide précieuse :gni:



lipki a dit:
Tu raconte quand même un sacré paquet de connerie ...
Mais bon ça part d'un bon sentiment, et si ça aide, c'est déjà bien.

C'est bien de critiquer, mais une argumentation un peu plus détaillée serait la bienvenue :gni: