Tutoriel : Création d'un mob simple
En Rédaction : 85 %
Introduction :
Avant tout, je vous conseille de suivre le tutoriel de nostre ici.
Table des matières :
1) Mod et fichiers
A) Préparation
B) Exemple
C) Explication
2) Model
A) Exemple
B) Explication
3) Render
A) Exemple
B) Explication
4) Entity
A) Exemple
B) Explication
5) Approfondissement
A) Model Humain
b) Création d'un Projectile(En rédaction)
Liens : http://www.mediafire.com/?bdladiq3akgh2b5
A venir :
- Création d'un projectile.
- Création d'un mob agressif.
- Proposez d'autre sujet...
1) Mod et fichiers
A) Préparation
Un mob se constitue au minimun de 4 fichier, mod_*, Model*, Rebder* et Entity*, il faut en plus une texture. Une fois avoir telecharger les fichiers dans lien, il faut ouvrir l'archive et déplacer le dossier mob vers MCP\src\minecraft\net\minecraft\src\, c'est ce dossier qui contient la texture de notre mob.
Ensuite, ajoutons à MCP\src\minecraft\net\minecraft\src\ les 4 fichiers dont nous avons besoins, c'est à dire :
mod_MonMob.java
ModelMonMob.java
RenderMonMob.java
EntityMonMob.java
B) Exemple
mod_MonMob,java
Code:
package net.minecraft.src;
import java.util.Map;
public class mod_MonMob extends BaseMod
{
public mod_MonMob()
{
ModLoader.RegisterEntityID(EntityMonMob.class, "EntityMonMob ", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityMonMob.class, 30, EnumCreatureType.creature);
}
public void AddRenderer(Map paramMap)
{
paramMap.put(EntityMonMob.class, new RenderMonMob(new ModelMonMob(), 0));
}
public String Version()
{
return "1.7.3";
}
}
C) Explication
- ModLoader.RegisterEntityID(EntityMonMob.class, "EntityMonMob ", ModLoader.getUniqueEntityId());
Cette méthode permet d'attribuer à l'entité un ID, cela veut dire que minecraft a la possibilité de le sauvegarder.
- ModLoader.AddSpawn(EntityMonMob.class, 30, EnumCreatureType.creature);
Cette méthode permet à notre mob de pouvoir spawner. 30 est la rareté du mob(plus c'est petit, plus c'est rare).
- paramMap.put(EntityMonMob.class, new RenderMonMob(new ModelMonMob()));
Cette méthode associe à notre mob le model(sa forme) correspondant.
2) Model
A) Exemple
ModelMonMob,java
Code:
package net.minecraft.src;
public class ModelMonMob extends ModelBase
{
public ModelMonMob()
{
head = new ModelRenderer(0, 0);
head.addBox(-4F, -4F, -8F, 8, 8, 8);
head.setRotationPoint(0.0F, 18F, -6F);
body = new ModelRenderer(28, 8);
body.addBox(-5F, -10F, -7F, 10, 16, 8);
body.setRotationPoint(0.0F, 17F, 2.0F);
leg1 = new ModelRenderer(0, 16);
leg1.addBox(-2F, 0.0F, -2F, 4, 12, 4);
leg1.setRotationPoint(-3F, 24F, 7F);
leg2 = new ModelRenderer(0, 16);
leg2.addBox(-2F, 0.0F, -2F, 4, 12, 4);
leg2.setRotationPoint(3F, 24F, 7F);
leg3 = new ModelRenderer(0, 16);
leg3.addBox(-2F, 0.0F, -2F, 4, 12, 4);
leg3.setRotationPoint(-3F, 24F, -5F);
leg4 = new ModelRenderer(0, 16);
leg4.addBox(-2F, 0.0F, -2F, 4, 12, 4);
leg4.setRotationPoint(3F, 24F, -5F);
}
public void render(float f, float f1, float f2, float f3, float f4, float f5)
{
setRotationAngles(f, f1, f2, f3, f4, f5);
head.render(f5);
body.render(f5);
leg1.render(f5);
leg2.render(f5);
leg3.render(f5);
leg4.render(f5);
}
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)
{
head.rotateAngleX = f4 / 57.29578F;
head.rotateAngleY = f3 / 57.29578F;
body.rotateAngleX = 1.570796F;
leg1.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1;
leg2.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.141593F) * 1.4F * f1;
leg3.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.141593F) * 1.4F * f1;
leg4.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1;
}
public ModelRenderer head;
public ModelRenderer body;
public ModelRenderer leg1;
public ModelRenderer leg2;
public ModelRenderer leg3;
public ModelRenderer leg4;
}
B) Explication
Il faut d'abord commencer par déclarer toute les partie de notre mob.
public ModelRenderer head;
…
head = new ModelRenderer(i, j);
Ensuite, cette fonction permet de lui attribuer une texture par rapport aux coordonnées i et j (en pixel).
head.addBox(-4F, -4F, -8F, 8, 8, 8, f);
Ceci permet de lui ajouter une «boite», c'est à dire une forme.
MonModel,addBox(posX, posY, posZ, dimX, dimY, dimZ, taille)
La variable f n'est pas obligatoire.
head.setRotationPoint(0.0F, 18, -6F);
Enfin, cette commande permet d'ajouter à notre nouvelle boite, un point de rotation,
monModel.setRotationPoint(rotX, rotY, rotZ);
Je ne vous cache pas que cela peut paraître babare au debut, pour ceux qui ne comprennent pas, ceci est un logiciel flash(à partir du navigateur) qui permet créer des models pour Minecraft (je vous déconseille de l'utiliser pour créer vos models, car il a quelque bug, utilisez-le donc seulement pour visualiser vos models ou pour la texture). http://www.mfmesi.ru/uploads/maxed/fmcmodeler/
Et un tutoriel : http://www.youtube.com/watch?v=0QnjRmWVGWE&feature=related
Ensuite, la fonction render permet de faire afficher les différentes boites du mob.
Enfin, setRotationAngles est sans doute l'une des plus importantes fonction de ce fichier car c'est elle qui permet à notre mob de s'animer, de bouger les bras et les jambes...
3) Render
A) Exemple
RenderMonMob,java
Code:
package net.minecraft.src;
public class RenderMonMob extends RenderLiving
{
public RenderMonMob(ModelBase modelbase, float f)
{
super(modelbase, f);
}
public void renderMonMob(EntityMonMob entityMonMob, double d, double d1, double d2,
float f, float f1)
{
super.doRenderLiving(entityMonMob, d, d1, d2, f, f1);
}
public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2,
float f, float f1)
{
renderMonMob((EntityMonMob)entityliving, d, d1, d2, f, f1);
}
public void doRender(Entity entity, double d, double d1, double d2,
float f, float f1)
{
renderMonMob((EntityMonMob)entity, d, d1, d2, f, f1);
}
}
B) Explication
Il n'y a pas grand chose à expliquer sur cette partie du mob, pour ceux qui veulent comprendre son fonctionnement, commencez par apprendre correctement le java.
Juste une chose à rajouter, dans la fonction :
« public RenderMonMob(ModelBase modelbase, float f) »,
la variable f correspond à la taille de l'ombre du mob.
4) Entity
A) Exemple
EntityMonMob,java
Code:
package net.minecraft.src;
public class EntityMonMob extends EntityAnimal
{
public EntityMonMob(World world)
{
super(world);
texture = "mob/MonMob.png";
setSize(0.9F, 1.3F);
yOffset = height / 2;
health = 10;
}
public EntityMonMob(World world, double d, double d1, double d2, float f)
{
this(world);
setPosition(d, d1 + 1.0F, d2);
motionX = 0.0D;
motionY = 0.0D;
motionZ = 0.0D;
prevPosX = d;
prevPosY = d1;
prevPosZ = d2;
}
public void writeEntityToNBT(NBTTagCompound nbttagcompound)
{
super.writeEntityToNBT(nbttagcompound);
}
public void readEntityFromNBT(NBTTagCompound nbttagcompound)
{
super.readEntityFromNBT(nbttagcompound);
}
protected String getLivingSound()
{
return "mob.cow";
}
protected String getHurtSound()
{
return "mob.cowhurt";
}
protected String getDeathSound()
{
return "mob.cowhurt";
}
protected float getSoundVolume()
{
return 0.4F;
}
protected int getDropItemId()
{
return Item.leather.shiftedIndex;
}
}
B) Explication
- public EntityMonMob(World world)
Cette fonction permet de définir toutes les propriétés du mob :
- texture = string; texture du mob;
- setSize(float, float); taille du mob;
- yOffset = float;
- health = int; vie du mob;
(je rajouterais d'autres propriétéssi possible)
- public void writeEntityToNBT(NBTTagCompound nbttagcompound)
Ceci permet en quelque sorte de sauvegarder un mob, lorsque vous quittez le jeu, cette fonction enregistre le mob tel qu'il est.
Naturellement, il faut ensuite pouvoir retrouver ces sauvegardes, et voilà la fonction qui en est responsable :
- public void readEntityFromNBT(NBTTagCompound nbttagcompound)
Ensuite, les fonction qui suivent définnisent le mob sur ses sons :
- protected String getLivingSound()
Définie le son « normal ».
- protected String getHurtSound()
Définie le sonde lorsqu'il est attaqué.
- protected String getDeathSound()
Définie le son de lorsque le mob meurt.
- protected float getSoundVolume()
Définie le volume du son émie par le mob.
Et enfin pour finir, la fonction qui paramètre ce que le mob drop lorsqu'il meurt :
- protected int getDropItemId()
3) Approfondissement
A) Model Humain
Pour tout ceux qui veulent réaliser un mob ayant la forme d'un humain, il suffit d'utiliser la classe ModelBiped, inspirez-vous ensuite le la classe RenderPlayer ou RenderZombie.
On peut aussi utiliser directement la classe RenderPlayer mais dans ce cas on ne peut pas changer l'animation de notre mob.
Donc voila un exemple, commençons par créer une nouvelle classe nommée EntityMonMobHumain.java.
Ensuite voici le code correspondant :
Code:
package net.minecraft.src;
public class EntityMonMobHumain extends EntityPlayer
{
public EntityMonMobHumain(World world)
{
super(world);
texture = "mob/MonMobHumain.png";
yOffset = 1.62F;
}
public EntityMonMobHumain(World world, double d, double d1, double d2, float f)
{
this(world);
setPosition(d, d1 + 1.0F, d2);
motionX = 0.0D;
motionY = 0.0D;
motionZ = 0.0D;
prevPosX = d;
prevPosY = d1;
prevPosZ = d2;
}
public void writeEntityToNBT(NBTTagCompound nbttagcompound)
{
super.writeEntityToNBT(nbttagcompound);
}
public void readEntityFromNBT(NBTTagCompound nbttagcompound)
{
super.readEntityFromNBT(nbttagcompound);
}
protected String getLivingSound()
{
return "mob.cow";
}
protected String getHurtSound()
{
return "mob.cowhurt";
}
protected String getDeathSound()
{
return "mob.cowhurt";
}
protected float getSoundVolume()
{
return 0.4F;
}
protected int getDropItemId()
{
return Item.leather.shiftedIndex;
}
protected Entity findPlayerToAttack()
{
EntityPlayer entityplayer = worldObj.getClosestPlayerToEntity(this, 16D);
if(entityplayer != null && canEntityBeSeen(entityplayer))
{
return entityplayer;
} else
{
return null;
}
}
public void func_6420_o() {
}
}
Vous remarquerez que celui-ci est le même que celui de EntityMonMob à l'exception de la texture et d'une nouvelle fonction findPlayerToAttack(). Cette fonction a pour rôle de définir une entité à suivre ici c'est le joueur.
Elle s'utilise comme ceci :
Code:
protected Entity findPlayerToAttack()
{
EntityPlayer entityplayer = worldObj.getClosestPlayerToEntity("mob d'origine", distance);
if(entityplayer != null && canEntityBeSeen(entityplayer)) // fais en sorte que le joueur est suivit que si il est visible.
{
return entityplayer;
} else
{
return null;
}
}
Pour finir, il nous suffit de rajouter 3 lignes de code dans mod_MonMob que voici :
ModLoader.RegisterEntityID(EntityMonMobHumain.class, "MonMobHumain", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityMonMobHumain.class, 30, EnumCreatureType.creature);
paramMap.put(EntityMonMobHumain.class, new RenderPlayer());
Code:
package net.minecraft.src;
import java.util.Map;
public class mod_MonMob extends BaseMod
{
public mod_MonMob()
{
ModLoader.RegisterEntityID(EntityMonMob.class, "MonMob", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityMonMob.class, 30, EnumCreatureType.creature);
ModLoader.RegisterEntityID(EntityMonMobHumain.class, "MonMobHumain", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityMonMobHumain.class, 30, EnumCreatureType.creature);
}
public void AddRenderer(Map paramMap)
{
paramMap.put(EntityMonMob.class, new RenderMonMob(new ModelMonMob(), 0));
paramMap.put(EntityMonMobHumain.class, new RenderPlayer());
}
public String Version()
{
return "1.7,3";
}
}
B) Création d'un projectile[/u]
Dans cette partie du tutoriel, je vais vous appendre comment créer un projectile. Je ne me contenterais pas de vous donner le code et les explication, je l'organiserai sous forme d’exercice... et oui vous allés devoir travailler un peut :mobnotch:, mais ne vous en faites pas ce ne seras pas trop dur.
Projet :
Le projet est de réaliser un projectile de type flèche que notre mob tirera pour se défendre...
Cette flèche infligera des dégâts à l'entité touchée et aura une chance d'exploser exploseras si elle touche un bloc,
a- Préparation
Donc pour la réalisation de notre projectile, nous aurons besoin de créer 3 nouveau fichier .java
qui seront : ModelProjectile, RenderProjectile et EntityProjectile.
b- Réalisation du Model
Commençons tout de suite par un petit exercice, vous aller devoir réaliser le model de notre flèche qui ressembleras à ceci :
En rédaction...
C) Création d'un mob Agressif
En ce qui concerne la partie du tutoriel sur les mob agressif, je suis très prit sur mes mod et sur le tutoriel de création d'un projectile, si quelqu’un peut donc se proposer pour rédiger cette partie, je suis preneur.
Réalisations :