Modding FR

nostre

Aventurier
13 Novembre 2010
424
5
0
30
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

RE
Voilà l'erreur a peu près:
src\minecraft\net\minecraft\src\mod_MilkChocolate.java:18: cannot find symbol
commands.recompile - ERROR - symbol : variable ItemID
commands.recompile - ERROR - location: class net.minecraft.src.ItemMilkChocolate
commands.recompile - ERROR - if(ItemMilkChocolate.ItemID == 16800)
1commands.recompile - ERROR - ^
 
Hello j'ai un problème que je ne comprends pas




mod_Couleur

Code:
package net.minecraft.src;
public class mod_Couleur extends BaseMod
{
    public mod_Couleur()
    {
        ModLoader.RegisterBlock(myBloc);
        ModLoader.AddRecipe(new ItemStack(myBloc, 1), new Object[]
        {"#",Character.valueOf('#'), Block.cobblestone});
    }
    public static final BlockContainer myBloc = (new BlockExtracteur(99,120)).setHardness(2.0F).setResistance(10F).setStepSound(Block.soundStoneFootstep);
    public String Version()
    {
    return "1.01";
    }
}


Mon block
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, Material, Block, World,
//            IBlockAccess, TileEntityFurnace, EntityPlayer, EntityLiving,
//            MathHelper, IInventory, ItemStack, EntityItem,
//            TileEntity

public class BlockExtracteur extends BlockContainer
{

    protected BlockExtracteur(int i,int j, boolean flag)
    {
        super(i,j, Material.rock);
        extracteurRand = new Random();
        isActive = flag;
        blockIndexInTexture = 45;
    }

public int idDropped(int i, Random random)
{
return Block.cobblestone.blockID;
}
    public void onBlockAdded(World world, int i, int j, int k)
    {
        super.onBlockAdded(world, i, j, k);
        setDefaultDirection(world, i, j, k);
    }

    private void setDefaultDirection(World world, int i, int j, int k)
    {
        if(world.multiplayerWorld)
        {
            return;
        }
        int l = world.getBlockId(i, j, k - 1);
        int i1 = world.getBlockId(i, j, k + 1);
        int j1 = world.getBlockId(i - 1, j, k);
        int k1 = world.getBlockId(i + 1, j, k);
        byte byte0 = 3;
        if(Block.opaqueCubeLookup[l] && !Block.opaqueCubeLookup[i1])
        {
            byte0 = 3;
        }
        if(Block.opaqueCubeLookup[i1] && !Block.opaqueCubeLookup[l])
        {
            byte0 = 2;
        }
        if(Block.opaqueCubeLookup[j1] && !Block.opaqueCubeLookup[k1])
        {
            byte0 = 5;
        }
        if(Block.opaqueCubeLookup[k1] && !Block.opaqueCubeLookup[j1])
        {
            byte0 = 4;
        }
        world.setBlockMetadataWithNotify(i, j, k, byte0);
    }

    public int getBlockTexture(IBlockAccess iblockaccess, int i, int j, int k, int l)
    {
        if(l == 1)
        {
            return blockIndexInTexture + 17;
        }
        if(l == 0)
        {
            return blockIndexInTexture + 17;
        }
        int i1 = iblockaccess.getBlockMetadata(i, j, k);
        if(l != i1)
        {
            return blockIndexInTexture;
        }
        if(isActive)
        {
            return blockIndexInTexture + 16;
        } else
        {
            return blockIndexInTexture - 1;
        }
    }

    public void randomDisplayTick(World world, int i, int j, int k, Random random)
    {
        if(!isActive)
        {
            return;
        }
        int l = world.getBlockMetadata(i, j, k);
        float f = (float)i + 0.5F;
        float f1 = (float)j + 0.0F + (random.nextFloat() * 6F) / 16F;
        float f2 = (float)k + 0.5F;
        float f3 = 0.52F;
        float f4 = random.nextFloat() * 0.6F - 0.3F;
        if(l == 4)
        {
            world.spawnParticle("smoke", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
            world.spawnParticle("flame", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
        } else
        if(l == 5)
        {
            world.spawnParticle("smoke", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
            world.spawnParticle("flame", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
        } else
        if(l == 2)
        {
            world.spawnParticle("smoke", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D);
            world.spawnParticle("flame", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D);
        } else
        if(l == 3)
        {
            world.spawnParticle("smoke", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
            world.spawnParticle("flame", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
        }
    }

    public int getBlockTextureFromSide(int i)
    {
        if(i == 1)
        {
            return blockIndexInTexture + 17;
        }
        if(i == 0)
        {
            return blockIndexInTexture + 17;
        }
        if(i == 3)
        {
            return blockIndexInTexture - 1;
        } else
        {
            return blockIndexInTexture;
        }
    }

    public boolean blockActivated(World world, int i, int j, int k, EntityPlayer entityplayer)
    {
        if(world.multiplayerWorld)
        {
            return true;
        }
        else
        {
            TileEntityExtracteur tileentityextracteur = (TileEntityExtracteur)world.getBlockTileEntity(i, j, k);
ModLoader.OpenGUI(entityplayer, new GuiExtracteur(entityplayer.inventory, tileentityextracteur));
            return true;
        }
    }

    public static void updateExtracteurBlockState(boolean flag, World world, int i, int j, int k)
    {
        int l = world.getBlockMetadata(i, j, k);
        TileEntity tileentity = world.getBlockTileEntity(i, j, k);
        keepExtracteurInventory = true;
        if(flag)
        {
            world.setBlockWithNotify(i, j, k, Block.stoneOvenActive.blockID);
        } else
        {
            world.setBlockWithNotify(i, j, k, Block.stoneOvenIdle.blockID);
        }
        keepExtracteurInventory = false;
        world.setBlockMetadataWithNotify(i, j, k, l);
        world.setBlockTileEntity(i, j, k, tileentity);
    }

    protected TileEntity getBlockEntity()
    {
        return new TileEntityExtracteur();
    }

    public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving)
    {
        int l = MathHelper.floor_double((double)((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3;
        if(l == 0)
        {
            world.setBlockMetadataWithNotify(i, j, k, 2);
        }
        if(l == 1)
        {
            world.setBlockMetadataWithNotify(i, j, k, 5);
        }
        if(l == 2)
        {
            world.setBlockMetadataWithNotify(i, j, k, 3);
        }
        if(l == 3)
        {
            world.setBlockMetadataWithNotify(i, j, k, 4);
        }
    }

    public void onBlockRemoval(World world, int i, int j, int k)
    {
        if(!keepExtracteurInventory)
        {
            TileEntityExtracteur tileentityextracteur = (TileEntityExtracteur)world.getBlockTileEntity(i, j, k);
label0:
            for(int l = 0; l < tileentityextracteur.getSizeInventory(); l++)
            {
                ItemStack itemstack = tileentityextracteur.getStackInSlot(l);
                if(itemstack == null)
                {
                    continue;
                }
                float f = extracteurRand.nextFloat() * 0.8F + 0.1F;
                float f1 = extracteurRand.nextFloat() * 0.8F + 0.1F;
                float f2 = extracteurRand.nextFloat() * 0.8F + 0.1F;
                do
                {
                    if(itemstack.stackSize <= 0)
                    {
                        continue label0;
                    }
                    int i1 = extracteurRand.nextInt(21) + 10;
                    if(i1 > itemstack.stackSize)
                    {
                        i1 = itemstack.stackSize;
                    }
                    itemstack.stackSize -= i1;
                    EntityItem entityitem = new EntityItem(world, (float)i + f, (float)j + f1, (float)k + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage()));
                    float f3 = 0.05F;
                    entityitem.motionX = (float)extracteurRand.nextGaussian() * f3;
                    entityitem.motionY = (float)extracteurRand.nextGaussian() * f3 + 0.2F;
                    entityitem.motionZ = (float)extracteurRand.nextGaussian() * f3;
                    world.entityJoinedWorld(entityitem);
                } while(true);
            }

        }
        super.onBlockRemoval(world, i, j, k);
    }

    private Random extracteurRand;
    private final boolean isActive;
    private static boolean keepExtracteurInventory = false;

}


Merci d'avance
 
Code:
package net.minecraft.src;
public class mod_Couleur extends BaseMod
{
    public mod_Couleur()
    {
        ModLoader.RegisterBlock(myBloc);
        ModLoader.AddRecipe(new ItemStack(myBloc, 1), new Object[]
        {"#",Character.valueOf('#'), Block.cobblestone});
    }
    public static final BlockContainer myBloc = (new BlockExtracteur(99,120)).setHardness(2.0F).setResistance(10F).setStepSound(Block.soundStoneFootstep);
    public String Version()
    {
    return "1.01";
    }
}
A la ligne 10 essaye de remplacer BlockExtracteur par mod_Couleur.BlockExtracteur
Sa devrait marcher normalement, après je sais pas.

RE RE Répondez-moi svp.
Voilà l'erreur a peu près:
src\minecraft\net\minecraft\src\mod_MilkChocolate.java:18: cannot find symbol
commands.recompile - ERROR - symbol : variable ItemID
commands.recompile - ERROR - location: class net.minecraft.src.ItemMilkChocolate
commands.recompile - ERROR - if(ItemMilkChocolate.ItemID == 16800)
1commands.recompile - ERROR - ^
 
Bonjour, j'aurais voulu savoir comment faire pour qu'un de mes blocs soit plus simple à casser à la hache plutôt que tout soit aussi efficace dessus, merci.

PS = Sans changer le ItemAxe.java, sinon ça me fait : http://mineshack.olympe-network.com/upload/1052011-07-22_10.35.18.png

Merci.
 
gbreuil1 a dit:
Voilà l'erreur a peu près:
src\minecraft\net\minecraft\src\mod_MilkChocolate.java:18: cannot find symbol
commands.recompile - ERROR - symbol : variable ItemID
commands.recompile - ERROR - location: class net.minecraft.src.ItemMilkChocolate
commands.recompile - ERROR - if(ItemMilkChocolate.ItemID == 16800)
1commands.recompile - ERROR - ^
Remplace ItemMilkChocolate.ItemID par mod_TonMod.milkChocolate.shiftedIndex


Et aussi ta condition n'a pas de sens, l'ID de ton item est fixe, soit elle sera toujours remplie soit elle ne sera jamais remplie, ça dépend de l'ID que t'as donné à ton item

Zangestunaka a dit:
Code:
public static final BlockContainer myBloc = (new BlockExtracteur(99,120)).setHardness(2.0F).setResistance(10F).setStepSound(Block.soundStoneFootstep);
[/code]

Remplace cette ligne par:
Code:
public static final BlockExtracteur myBloc = (new BlockExtracteur(99,120, false)).setHardness(2.0F).setResistance(10F).setStepSound(Block.soundStoneFootstep);
Tu devras aussi refaire un bloc en remplaçant le false par true
 
Zangestunaka a dit:
Stormweaker a dit:
Tu devras aussi refaire un bloc en remplaçant le false par true
Désolé mais je n'ai pas compris


Tu as copié le code du four pour faire ton fichier BlockExtracteur, si tu regardes dans Block.java tu as stoneOvenIdle et stoneOvenActive

Pour stoneOvenIdle tu as: new BlockFurnace(61, false)
correspondant au four éteint

Pour StoneOvenActive tu as :new BlockFurnace(61, true)
correspondant au four allumé

Tu devras donc créer un bloc extracteur allumé et un éteint, la différence se faisant avec le booléen, lorsqu'il est allumé on a true, éteint on a false

Dans le code que je t'ai donné il y a un false quelque part, donc le bloc qui est créé à cette ligne sera ton extracteur éteint, recopies cette ligne (en changeant le nom et l'ID évidemment) et en changeant false par true pour créer ton bloc allumé
 
Salut tout le monde,
Je voudrais savoir si quelqu'un connait les codes qui permette à un objet :
-d'être lancé à main nue.
-D’exploser après quelques secondes que l'objet est envoyé.
Merci d'avance.