Modding FR

nostre

Aventurier
13 Novembre 2010
424
5
0
31
subject_mods_32.png

Minecraft est un jeu en plein développement,aussi bien du coté de chez Mojang que de celui de la communauté, qui ne cesse de développer toujours plus de mods et de extures packs.

Cependant, pour toute personne voulant tenter le modding de Minecraft,il faudra passer par les tutoriaux du forum officiel,où le français n'est pas vraiment courant.
De plus,si la personne en question ne connait pas un minimum certaines bases de code,sa devient vite un enfer de se lancer dans le domaines...

C'est pourquoi,devant l'absence total de tutoriel français sur le sujet,et afin d'encourager de nouveaux modder français,j'ai décidé de créer le 1er Tutoriel de Modding Minecraft FR.

Le but n'est pas seulement de créer un tutoriel en français,j'esseye de faire en sorte qu'il sois le plus accessible possible pour toutes personnes, compréhensible même pour des non initiés a toutes formes de codes (ou presque).

tutorial.gif


changelog.png
ChangeLog:
changelog.png

*27-02-11: Mise a jour des tutos I et III pour MCP 29a et ModLoader Beta 1.3_01v4.
*27-02-11: Correction d'une erreur dans le tuto II,merci a Woreck de me l'avoir fait remarquer !
*11-04-11: Mise a jour complète pour Minecraft Beta 1.4_01,MCP211 et ModLoader B1.4_01 v1.
*27-04-2011: Mise a jour pour Minecraft B1.5_01,MCP v2.12 et ModLoader v3 B1.5_01.
*30-04-2011: Correction d'une erreur avec les recettes,et mise a disposition des fichiers mod_MyMod.java et BlockMyBloc.java.
exclamation.gif
*29-05-11: Mise a jour pour Minecraft B1.6.5,MCP v3.3 et ModLoader v1 B1.6.5.


! Les liens suivants sont morts !

tuto.png

green-download-arrow-grey-line.png
Tutorial Modding FR - Téléchargement:
green-download-arrow-grey-line.png

asus_download_arrow004.gif
Tuto I - Téléchargement et installation
asus_download_arrow004.gif
Tuto II - Création d'un mod simple,ajout de nouveaux blocs
asus_download_arrow004.gif
Tuto III - Compilation et tests
asus_download_arrow004.gif
Tuto IV - Quelques petits trucs a savoir avant de continuer
asus_download_arrow004.gif
Tuto - Création de nouveaux objets
asus_download_arrow004.gif
Tuto - Ajouter des blocs et objets pour le four
asus_download_arrow004.gif
Tuto - Blocs – Autres possibilités
asus_download_arrow004.gif
Tuto - Autres possibilités - objets
asus_download_arrow004.gif
Sources du mod du Tuto II

Nouveaux fichiers ajoutés suite aux liens morts à la fin du message.
Il manque juste les "Sources du mod du Tuto II".
Je précise que ce sont les fichiers d'origine, le code est parfois obsolète !
 

Fichiers joints

moi j'ai vraiment un problème qui m'arrivent a chaque fois

je lance recomplie.bat --> tout se passe bien, aucune erreur
et la je lance startclient et a chaque fois dans le message d'erreur il me met

"failed to load mod from mod_Mymod.class"

est ce que quelqu'un a une idée ?
pourtant j'ai vraiment l'impressoin de tout faire comme il faut mais on diarait qu'il n'arrive pas à acceder a mon mod

j’attends vos réponses, merci
 
mais si le recompile.bat me donne aucune erreur, coment ca se fais que ca plante à starclient ?

enfin ok je,met mon code

voila le mod_Plutonium.java

package net.minecraft.src;

public class mod_Plutonium extends BaseMod
{
public mod_Plutonium()
{
ModLoader.RegisterBlock(ironblocUranium);
ModLoader.RegisterBlock(ironblocPlutonium);

ModLoader.AddName(ironblocUranium, "Uranium IronBlock");
ModLoader.AddName(ironblocPlutonium, "Plutonium IronBlock");

ModLoader.AddRecipe(new ItemStack(ironblocUranium, 1), new Object[]
{"XXX", "XXX", "XXX", Character.valueOf('X'), mod_Uranium.uraniumIngot});
}

public static final Block ironblocUranium = (new BlockironblocUranium(1000,ModLoader.addOverride("/terrain.png", "/bloc/ironblocUranium.png"))).setHardness(4.0F).setResistance(10F).setStepSound(Block.soundMetalFootstep).setLightValue(0.6F).setBlockName("Uranium IronBlock");
public static final Block ironblocPlutonium = (new BlockironblocPlutonium(1001,ModLoader.addOverride("/terrain.png", "/bloc/ironblocPlutonium.png"))).setHardness(4.0F).setResistance(10F).setStepSound(Block.soundMetalFootstep).setLightValue(0.6F).setBlockName("Plutonium IronBlock");

public String Version()
{
return "1.6.6";
}
}

et je precise que la variable mod_Uranium.uraniumIngot viens d'un autre mod qui marche très bien lui

donc le problème ne viens pas de là

et voilà les 2 blocs

le premier :
package net.minecraft.src;

import java.util.Random;

public class BlockironblocPlutonium extends Block
{
public BlockironblocPlutonium(int i, int j)
{
super(i, j, Material.iron);
}
public int idDropped(int i, Random random)
{
return Block.cobblestone.blockID;
}
public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
{
entity.attackEntityFrom(null, 10);
}
}
 
le 2ème

package net.minecraft.src;

import java.util.Random;

public class BlockironblocUranium extends Block
{
public BlockironblocUranium(int i, int j)
{
super(i, j, Material.iron);
}
public int idDropped(int i, Random random)
{
return Block.cobblestone.blockID;
}
public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
{
entity.attackEntityFrom(null, 10);
}

a ok merci je test, mais je croyait quon pouvait aller aussi loin quon le voulai ??
 
a mais ok je savait pas merci, je test

ca marche !!

merci beaucoup, puré ca fais longtemps que je cherche et en fait c'était juste à cause des ID

tien et j'aimerai qu'on me donne une liste de tous les types de blocs SVP,

je connais .rock, .iron, .ground, .tnt
et c'est tout, est ce qu'on peut tous me les donner merci d'avance
 
Salut !

J'aimerais savoir comment rendre apprivoisable une animal ?
J'ai regardé du côté de EntityWolf, j'ai fait quelques trucs pour rendre apprivoisable une vache, mais lorsque je fais clique droit avec du blé (Item que j'ai défini pour qu'elle soit apprivoisé) sur la vache, le jeu bug et :

Code:
Mods loaded: 2
ModLoader Beta 1.6.6
net.minecraft.src.mod_SeedBeer 1.6.6

      Minecraft has crashed!      
      ----------------------      

Minecraft has stopped running because it encountered a problem.

If you wish to report this, please copy this entire text and email it to [email protected].
Please include a description of what you did when the error occured.



--- BEGIN ERROR REPORT 13d2c391 --------
Generated 03/07/11 22:06

Minecraft: Minecraft Beta 1.6.6
OS: Windows 7 (x86) version 6.1
Java: 1.6.0_26, Sun Microsystems Inc.
VM: Java HotSpot(TM) Client VM (mixed mode), Sun Microsystems Inc.
LWJGL: 2.4.2
OpenGL: ATI Radeon HD 5700 Series version 4.0.9836 Compatibility Profile Context, ATI Technologies Inc.

java.lang.NullPointerException
	at net.minecraft.src.DataWatcher.getWatchableObjectByte(DataWatcher.java:45)
	at net.minecraft.src.EntityCow.isCowTamed(EntityCow.java:107)
	at net.minecraft.src.EntityCow.onLivingUpdate(EntityCow.java:37)
	at net.minecraft.src.EntityLiving.onUpdate(EntityLiving.java:207)
	at net.minecraft.src.World.updateEntityWithOptionalForce(World.java:1426)
	at net.minecraft.src.World.updateEntity(World.java:1402)
	at net.minecraft.src.World.updateEntities(World.java:1376)
	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1187)
	at net.minecraft.client.Minecraft.run(Minecraft.java:480)
	at java.lang.Thread.run(Unknown Source)
--- END ERROR REPORT 3222e9e0 ----------


Le code source du EntityCow :

Code:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode 

package net.minecraft.src;


// Referenced classes of package net.minecraft.src:
//            EntityAnimal, Item, EntityPlayer, InventoryPlayer, 
//            ItemStack, World, NBTTagCompound

public class EntityCow extends EntityAnimal
{

	public EntityCow(World world)
    {
        super(world);
        looksWithInterest = false;
        texture = "/mob/cow.png";
        setSize(0.9F, 1.3F);
        timeUntilNextLeather = rand.nextInt(6000) + 6000;
    }

    public void onLivingUpdate ()
    {
        super.onLivingUpdate();
        looksWithInterest = false;
        if(hasCurrentTarget() && !hasPath())
        {
            Entity entity = getCurrentTarget();
            if(entity instanceof EntityPlayer)
            {
                EntityPlayer entityplayer = (EntityPlayer)entity;
                ItemStack itemstack = entityplayer.inventory.getCurrentItem();
                if(itemstack != null)
                {
                    if(!isCowTamed() && itemstack.itemID == Item.wheat.shiftedIndex)
                    {
                        looksWithInterest = true;
                    } else
                    if(isCowTamed() && (Item.itemsList[itemstack.itemID] instanceof ItemFood))
                    {
                        looksWithInterest = ((ItemFood)Item.itemsList[itemstack.itemID]).getIsCowsFavoriteMeat();
                    }
                }
            }
        }
        if(!worldObj.multiplayerWorld && --timeUntilNextLeather <= 0)
        {
            worldObj.playSoundAtEntity(this, "mob.cow1", 1.0F, (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F);
            dropItem(Item.leather.shiftedIndex, 1);
            dropItem(Item.bucketMilk.shiftedIndex, 1);
            timeUntilNextLeather = rand.nextInt(6000) + 6000;
        }	
    }
    
    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;
    }

    public boolean interact(EntityPlayer entityplayer)
    {
        ItemStack itemstack = entityplayer.inventory.getCurrentItem();
        if(itemstack != null && itemstack.itemID == Item.bucketEmpty.shiftedIndex)
        {
            entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, new ItemStack(Item.bucketMilk));
            return true;
        } else
        {
            return false;
        }
    }
    
    public boolean isCowTamed()
    {
        return (dataWatcher.getWatchableObjectByte(16) & 4) != 0;
    }

    public void setCowTamed(boolean flag)
    {
        byte byte0 = dataWatcher.getWatchableObjectByte(16);
        if(flag)
        {
            dataWatcher.updateObject(16, Byte.valueOf((byte)(byte0 | 4)));
        } else
        {
            dataWatcher.updateObject(16, Byte.valueOf((byte)(byte0 & -5)));
        }
    }
    
    private boolean looksWithInterest;
    public int timeUntilNextLeather;
}

Une idée ? Merci d'avance !!