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

Voici la ligne officiel de la déclaration dela pancarte :

Code:
signPost = (new BlockSign(63, net.minecraft.src.TileEntitySign.class, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("sign").disableStats();

et la class qui l'accompagne :

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;

import java.util.Random;

// Referenced classes of package net.minecraft.src:
//            BlockContainer, World, Item, Material, 
//            TileEntity, IBlockAccess, AxisAlignedBB

public class BlockSign extends BlockContainer
{

    protected BlockSign(int i, Class class1, boolean flag)
    {
        super(i, Material.wood);
        isFreestanding = flag;
        blockIndexInTexture = 4;
        signEntityClass = class1;
        float f = 0.25F;
        float f1 = 1.0F;
        setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f);
    }

    public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k)
    {
        return null;
    }

    public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k)
    {
        setBlockBoundsBasedOnState(world, i, j, k);
        return super.getSelectedBoundingBoxFromPool(world, i, j, k);
    }

    public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, int i, int j, int k)
    {
        if(isFreestanding)
        {
            return;
        }
        int l = iblockaccess.getBlockMetadata(i, j, k);
        float f = 0.28125F;
        float f1 = 0.78125F;
        float f2 = 0.0F;
        float f3 = 1.0F;
        float f4 = 0.125F;
        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
        if(l == 2)
        {
            setBlockBounds(f2, f, 1.0F - f4, f3, f1, 1.0F);
        }
        if(l == 3)
        {
            setBlockBounds(f2, f, 0.0F, f3, f1, f4);
        }
        if(l == 4)
        {
            setBlockBounds(1.0F - f4, f, f2, 1.0F, f1, f3);
        }
        if(l == 5)
        {
            setBlockBounds(0.0F, f, f2, f4, f1, f3);
        }
    }

    public int getRenderType()
    {
        return -1;
    }

    public boolean renderAsNormalBlock()
    {
        return false;
    }

    public boolean isOpaqueCube()
    {
        return false;
    }

    protected TileEntity getBlockEntity()
    {
        try
        {
            return (TileEntity)signEntityClass.newInstance();
        }
        catch(Exception exception)
        {
            throw new RuntimeException(exception);
        }
    }

    public int idDropped(int i, Random random)
    {
        return Item.sign.shiftedIndex;
    }

    public void onNeighborBlockChange(World world, int i, int j, int k, int l)
    {
        boolean flag = false;
        if(isFreestanding)
        {
            if(!world.getBlockMaterial(i, j - 1, k).isSolid())
            {
                flag = true;
            }
        } else
        {
            int i1 = world.getBlockMetadata(i, j, k);
            flag = true;
            if(i1 == 2 && world.getBlockMaterial(i, j, k + 1).isSolid())
            {
                flag = false;
            }
            if(i1 == 3 && world.getBlockMaterial(i, j, k - 1).isSolid())
            {
                flag = false;
            }
            if(i1 == 4 && world.getBlockMaterial(i + 1, j, k).isSolid())
            {
                flag = false;
            }
            if(i1 == 5 && world.getBlockMaterial(i - 1, j, k).isSolid())
            {
                flag = false;
            }
        }
        if(flag)
        {
            dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k));
            world.setBlockWithNotify(i, j, k, 0);
        }
        super.onNeighborBlockChange(world, i, j, k, l);
    }

    private Class signEntityClass;
    private boolean isFreestanding;
}

puis pour finir l'entité qui y est lié :

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:
//            TileEntity, NBTTagCompound

public class TileEntitySign extends TileEntity
{

    public TileEntitySign()
    {
        lineBeingEdited = -1;
        field_25062_c = true;
    }

    public void writeToNBT(NBTTagCompound nbttagcompound)
    {
        super.writeToNBT(nbttagcompound);
        nbttagcompound.setString("Text1", signText[0]);
        nbttagcompound.setString("Text2", signText[1]);
        nbttagcompound.setString("Text3", signText[2]);
        nbttagcompound.setString("Text4", signText[3]);
    }

    public void readFromNBT(NBTTagCompound nbttagcompound)
    {
        field_25062_c = false;
        super.readFromNBT(nbttagcompound);
        for(int i = 0; i < 4; i++)
        {
            signText[i] = nbttagcompound.getString((new StringBuilder()).append("Text").append(i + 1).toString());
            if(signText[i].length() > 15)
            {
                signText[i] = signText[i].substring(0, 15);
            }
        }

    }

    public String signText[] = {
        "", "", "", ""
    };
    public int lineBeingEdited;
    private boolean field_25062_c;
}

Je suis désoler de ne pas aider plus que sa et de ne fournir que les sources, mais je suis très peu disponible pour le moment, si j'ai le temps je repasserait dessus pour jetter un coup d'oeuil et te donnée plus de précision si possible !
 
euh j'aimerais savoir comment on fait pour qu'un bloc soit d'une certaine apparence et que le dessus du bloc sois différent ?? et aussi pour rajouter un nom au bloc ??
 
Pour le nom c'est:
Code:
ModLoader.AddName(<nom de ton bloc dans le code>, "<nom de ton bloc dans le jeu>");
Fonctionne de la même manière pour les items


Pour les textures différentes selon les faces, regarde le code du workbench, des coffres ou du four, je pense que c'est dedans.
 
Bonjour je suis moddeur débutant et j'ai créé quelques mods sur minecraft 1.4 et 1.5 mais mes mods se résumait à faire de nouveaux blocs et de nouvelles recettes je voudrais savoir quel est la méthode pour inclure notre bloc comme un autre bloc que l'on trouve dans les mines. Merci d'avance pour la réponse.

(je sais que mes questions peuvent ne pas être très claires):desole:
 
@shadyre
Salut, j'ai regardé un peu ce que tu m'as envoyé, je pense pouvoir me débrouillez avec, mais pour la création de mob tu as utilisé quoi(le côté graphique)? FMC modeler(celui spécial pour minecraft) ou une autre méthode? Tu as fais comment pour déterminer les mouvements(logiciel ou dans le code direct)?
Est ce que cette ligne de code
Code:
texture = "/chemin/vers/image.png";
a un rapport avec la texture 3d du mob? Mais après comment l'animé?

Merci beaucoup de ta future réponse.