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

Bonjour, depuis la mise à jour quand j'essaie de recompiler, il me met cette erreur, alors que avant ça marchait parfaitement :
Code:
== MCP 6.2 (data: 6.2, client: 1.2.5, server: 1.2.5) ==
# found jad, jad patches, ff patches, osx patches, srgs, name csvs, doc csvs, pa
ram csvs, astyle, astyle config
== Recompiling client ==
> Cleaning bin
> Recompiling
'"C:\Program Files (x86)\Java\jdk1.7.0_01\bin\javac" -Xlint:-options -deprecatio
n -g -source 1.6 -tar...' failed : 1
== ERRORS FOUND ==
src\minecraft\net\minecraft\src\BlockC4.java:171: error: cannot find symbol
        if (world.multiplayerWorld)
                 ^
  symbol:   variable multiplayerWorld
  location: variable world of type World
src\minecraft\net\minecraft\src\BlockC4.java:222: error: cannot find symbol
                setTickOnLoad(true);
                ^
  symbol:   method setTickOnLoad(boolean)
  location: class BlockC4
src\minecraft\net\minecraft\src\BlockdoubleC4.java:171: error: cannot find symbo
l
        if (world.multiplayerWorld)
                 ^
  symbol:   variable multiplayerWorld
  location: variable world of type World
src\minecraft\net\minecraft\src\BlockdoubleC4.java:222: error: cannot find symbo
l
                setTickOnLoad(true);
                ^
  symbol:   method setTickOnLoad(boolean)
  location: class BlockdoubleC4
src\minecraft\net\minecraft\src\EntityC4Primed.java:45: error: cannot find symbo
l
            if (!worldObj.multiplayerWorld)
                         ^
  symbol:   variable multiplayerWorld
  location: variable worldObj of type World
src\minecraft\net\minecraft\src\EntityC4Primed.java:47: error: cannot find symbo
l
                setEntityDead();
                ^
  symbol:   method setEntityDead()
  location: class EntityC4Primed
src\minecraft\net\minecraft\src\EntityC4Primed.java:52: error: cannot find symbo
l
                setEntityDead();
                ^
  symbol:   method setEntityDead()
  location: class EntityC4Primed
src\minecraft\net\minecraft\src\EntitydoubleC4Primed.java:45: error: cannot find
 symbol
            if (!worldObj.multiplayerWorld)
                         ^
  symbol:   variable multiplayerWorld
  location: variable worldObj of type World
src\minecraft\net\minecraft\src\EntitydoubleC4Primed.java:47: error: cannot find
 symbol
                setEntityDead();
                ^
  symbol:   method setEntityDead()
  location: class EntitydoubleC4Primed
src\minecraft\net\minecraft\src\EntitydoubleC4Primed.java:52: error: cannot find
 symbol
                setEntityDead();
                ^
  symbol:   method setEntityDead()
  location: class EntitydoubleC4Primed
src\minecraft\net\minecraft\src\mod_C4.java:22: error: cannot find symbol
                ModLoader.SetInGUIHook(this, true, true);
                         ^
  symbol:   method SetInGUIHook(mod_C4,boolean,boolean)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:23: error: cannot find symbol
                ModLoader.SetInGameHook(this, true, true);
                         ^
  symbol:   method SetInGameHook(mod_C4,boolean,boolean)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:27: error: cannot find symbol
                ModLoader.RegisterBlock(doubleC4);
                         ^
  symbol:   method RegisterBlock(Block)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:28: error: cannot find symbol
                ModLoader.RegisterBlock(C4);
                         ^
  symbol:   method RegisterBlock(Block)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:29: error: cannot find symbol
                ModLoader.AddName(doubleC4, "Double C4");
                         ^
  symbol:   method AddName(Block,String)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:30: error: cannot find symbol
                ModLoader.AddName(C4, "C4");
                         ^
  symbol:   method AddName(Block,String)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:35: error: cannot find symbol
                ModLoader.AddName(teledoubleC4, "Control Double C4");
                         ^
  symbol:   method AddName(Item,String)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:40: error: cannot find symbol
                ModLoader.AddName(teleC4, "Control C4");
                         ^
  symbol:   method AddName(Item,String)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:45: error: cannot find symbol
                ModLoader.AddName(tele2doubleC4, "Super Control Double C4");
                         ^
  symbol:   method AddName(Item,String)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:50: error: cannot find symbol
                ModLoader.AddName(tele2C4, "Super Control C4");
                         ^
  symbol:   method AddName(Item,String)
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:52: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:57: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:62: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:67: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:72: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:77: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:82: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:87: error: cannot find symbol
                ModLoader.AddRecipe(
                         ^
  symbol:   method AddRecipe(ItemStack,Object[])
  location: class ModLoader
src\minecraft\net\minecraft\src\mod_C4.java:109: error: method does not override
 or implement a method from a supertype
        @Override
        ^
src\minecraft\net\minecraft\src\mod_C4.java:124: error: cannot find symbol
        if((guiscreen instanceof GuiContainerCreative) && !(lastGuiOpen instance
of GuiContainerCreative) && !minecraft.theWorld.multiplayerWorld)
                                               ^
  symbol:   variable multiplayerWorld
  location: variable theWorld of type World
src\minecraft\net\minecraft\src\mod_C4.java:121: error: method does not override
 or implement a method from a supertype
   @Override
   ^
31 errors
==================
!! Can not find server sources, try decompiling !!
Appuyez sur une touche pour continuer...

Est-ce que vous pouvez m'aider ?
 
Bonjour, j'aimerais savoir comment faire pour que mon mob tienne une épée ou par exemple un bouclier en main gauche! :)
J'arrive à lui faire tenir une épée en main droite mais pour la main gauche je sais pas du tout.
Si quelqu'un sait, j'aimerais bien qu'il m'explique :)
Merci


Ps: Je suis sur que l'on doit utiliser cette variable
Code:
  /**
    * Records whether the model should be rendered holding an item in the left hand, and if that item is a block.
    */
    public int heldItemLeft;
 
    /**
    * Records whether the model should be rendered holding an item in the right hand, and if that item is a block.
    */
    public int heldItemRight;

Mais je n'arrive pas a faire qu'il tienne cette foutu épée en main gauche!! :mad: :D
J'ai fait un tuto pour ça ! :D Regarde dans ma signature :p
 
Bonjour, j'ai rencontré un problème au startclient alors que le recompile marchait parfaitement, vous pouvez m'aider ?

Code:
== MCP 6.2 (data: 6.2, client: 1.2.5, server: 1.2.5) ==
[13:53:32] 27 achievements
[13:53:32] 182 recipes
[13:53:32] LWJGL Version: 2.4.2
[13:53:33] ModLoader 1.2.5 Initializing...
[13:53:33] Overriding /terrain.png with /mod_C4/doubleC4.png @ 168. 31 left.
[13:53:33] Overriding /terrain.png with /mod_C4/C4.png @ 169. 30 left.
[13:53:33] Overriding /terrain.png with /mod_C4/basC4.png @ 170. 29 left.
[13:53:33] Overriding /gui/items.png with /mod_C4/teledoubleC4.png @ 38. 84 left
.
[13:53:33] Overriding /gui/items.png with /mod_C4/teleC4.png @ 102. 83 left.
[13:53:33] Overriding /gui/items.png with /mod_C4/tele2doubleC4.png @ 118. 82 le
ft.
[13:53:33] Overriding /gui/items.png with /mod_C4/tele2C4.png @ 119. 81 left.
[13:53:33] Mod Initialized: mod_C4 1.2.5
[13:53:33] Mod Loaded: mod_C4 1.2.5
[13:53:33] Done.
[13:53:33] Exception in thread "Minecraft main thread" java.lang.ExceptionInInit
ializerError
[13:53:33]      at net.minecraft.client.Minecraft.startGame(Minecraft.java:424)
[13:53:33]      at net.minecraft.client.Minecraft.run(Minecraft.java:786)
[13:53:33]      at java.lang.Thread.run(Thread.java:722)
[13:53:33] Caused by: java.lang.RuntimeException: java.lang.ArrayIndexOutOfBound
sException: 2789
[13:53:33]      at net.minecraft.src.ModLoader.init(ModLoader.java:891)
[13:53:33]      at net.minecraft.src.ModLoader.addAllRenderers(ModLoader.java:15
7)
[13:53:33]      at net.minecraft.src.RenderManager.<init>(RenderManager.java:85)
[13:53:33]      at net.minecraft.src.RenderManager.<clinit>(RenderManager.java:1
2)
[13:53:33]      ... 3 more
[13:53:33] Caused by: java.lang.ArrayIndexOutOfBoundsException: 2789
[13:53:33]      at net.minecraft.src.ModLoader.initStats(ModLoader.java:905)
[13:53:33]      at net.minecraft.src.ModLoader.init(ModLoader.java:878)
[13:53:33]      ... 6 more
 
help

Voici mon mod_C4
Code:
package net.minecraft.src;
import java.util.List;
import net.minecraft.client.Minecraft;
public class mod_C4 extends BaseMod
{
 public static final Block doubleC4 = (new BlockdoubleC4(2789, 0))
 .setHardness(0.75F)
 .setResistance(0F)
 .setRequiresSelfNotify()
 .setBlockName("Double C4");
 
 public static final Block C4 = (new BlockC4(2790, 0))
 .setHardness(0.75F)
 .setResistance(0F)
 .setRequiresSelfNotify()
 .setBlockName("C4");
 
 public static int basC4;
 
 public mod_C4()
 {
  doubleC4.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/mod_C4/doubleC4.png");
  C4.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/mod_C4/C4.png");
  basC4 = ModLoader.addOverride("/terrain.png", "/mod_C4/basC4.png");
  ModLoader.registerBlock(doubleC4);
  ModLoader.registerBlock(C4);
  ModLoader.addName(doubleC4, "Double C4");
  ModLoader.addName(C4, "C4");
  
  Item teledoubleC4 = (new ItemteledoubleC4(7201))
  .setIconIndex(ModLoader.addOverride("/gui/items.png", "/mod_C4/teledoubleC4.png"))
  .setItemName("Control Double C4");
  ModLoader.addName(teledoubleC4, "Control Double C4");
  
  Item teleC4 = (new ItemteleC4(7202))
  .setIconIndex(ModLoader.addOverride("/gui/items.png", "/mod_C4/teleC4.png"))
  .setItemName("Control C4");
  ModLoader.addName(teleC4, "Control C4");
  
  Item tele2doubleC4 = (new Itemtele2doubleC4(8392))
  .setIconIndex(ModLoader.addOverride("/gui/items.png", "/mod_C4/tele2doubleC4.png"))
  .setItemName("Super Control Double C4");
  ModLoader.addName(tele2doubleC4, "Super Control Double C4");
  
  Item tele2C4 = (new Itemtele2C4(8393))
  .setIconIndex(ModLoader.addOverride("/gui/items.png", "/mod_C4/tele2C4.png"))
  .setItemName("Super Control C4");
  ModLoader.addName(tele2C4, "Super Control C4");
  
  ModLoader.addRecipe(
  new ItemStack(doubleC4, 1), 
  new Object[] {"X", Character.valueOf('X'), Block.dirt}
  );
  
  ModLoader.addRecipe(
  new ItemStack(C4, 1), 
  new Object[] {"X", Character.valueOf('X'), Block.stone}
  );
  
  ModLoader.addRecipe(
  new ItemStack(teledoubleC4, 1), 
  new Object[] {"XXX", "XVX", "XBX", Character.valueOf('X'), Block.stone, Character.valueOf('B'), doubleC4, Character.valueOf('V'), Item.redstone}
  );
  
  ModLoader.addRecipe(
  new ItemStack(teleC4, 1), 
  new Object[] {"XXX", "XVX", "XBX", Character.valueOf('X'), Block.stone, Character.valueOf('B'), C4, Character.valueOf('V'), Item.redstone}
  );
  
  ModLoader.addRecipe(
  new ItemStack(tele2doubleC4, 1), 
  new Object[] {"XWX", "XVX", "XBX", Character.valueOf('X'), Block.stone, Character.valueOf('B'), doubleC4, Character.valueOf('V'), Item.redstone, Character.valueOf('W'), Block.torchRedstoneActive}
  );
  
  ModLoader.addRecipe(
  new ItemStack(tele2C4, 1), 
  new Object[] {"XWX", "XVX", "XBX", Character.valueOf('X'), Block.stone, Character.valueOf('B'), C4, Character.valueOf('V'), Item.redstone, Character.valueOf('W'), Block.torchRedstoneActive}
  );
  
  ModLoader.addRecipe(
  new ItemStack(tele2doubleC4, 1), 
  new Object[] {"X", "V", Character.valueOf('V'), teledoubleC4, Character.valueOf('C'), Block.torchRedstoneActive}
  );
  
  ModLoader.addRecipe(
  new ItemStack(tele2C4, 1), 
  new Object[] {"X", "V", Character.valueOf('V'), teleC4, Character.valueOf('C'), Block.torchRedstoneActive}
  );
 }
 
 public static Item teledoubleC4;
 public static Item teleC4;
 public static Item tele2doubleC4;
 public static Item tele2C4;
 
 public String Version()
 {
  return "1.2.5";
 }
 
 @Override
 public String getVersion() { return "1.2.5"; }
 @Override
 public void load() {}
}
 
Merci pour ces exelents tutos !
j'ai cependant quelques questions :
Comment obtenir des escaliers ? des demi dalles ?
Comment faire pour qu'un bloc ait la physique type champignon (apparence en 2D, ne peut ce poser en l'air, être traverser par les mobs et le joueur.
 
Pour faire les escaliers, il te suffit de remplacer la partie
monBloc = (new BlockmonBloc(247, 0))
Par

monBloc = (new BlockStairs(247, 0))

En plus tu n'as pas à créer de BlockmonBloc :)
 
Héhé génial ^^ à moi les toits en chaume !! merci à toi !
Rien pour les dalles et les champis par contre ?
J'ai également un probleme avec les fichier à convertir en format .java
Même en rajoutant une extension .java à mon fichier, celui apparait comme étant soit un document texte, soit un dossier, soit un document open office... mais pas de document JAVA .
J'ai l'intention de coder sur le fichier texte, est ce que sa va marcher quand même ? sinon comment y remédier ?
 
Pour les dalles ils faut créer 2 fichier, la dalle et la double dalle, ou sinon faire en sorte que la double dalle sois un autre bloc. Personnellement je te conseille de faire une double dalle.
Le code de la dalle :
Code:
package net.minecraft.src;
import java.util.Random;
public class BlockmaDalle extends Block
{
    public BlockmaDalle(int i, int j)
    {
        super(i, j, Material.rock);
        setBounds();
    }
    private void setBounds()
    {
        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
    }
    public boolean isOpaqueCube()
    {
        return false;
    }

    public void onBlockAdded(World world, int i, int j, int k)
    {
        if(this != mod_monMod.maDalle)
        {
            super.onBlockAdded(world, i, j, k);
        }
        int l = world.getBlockId(i, j - 1, k);
        int i1 = world.getBlockMetadata(i, j, k);
        int j1 = world.getBlockMetadata(i, j - 1, k);
        if(i1 != j1)
        {
            return;
        }
        if(l == mod_monMod.maDalle.blockID)
        {
            world.setBlockWithNotify(i, j, k, 0);
            world.setBlockAndMetadataWithNotify(i, j - 1, k, mod_monMod.madoubleDalle.blockID, i1);
        }
    }
        public int idDropped(int i, Random random)
    {
       return mod_monMod.maDalle.blockID;
    }
    public int quantityDropped(Random random)
    {
            return 1;
    }
}
Si tu ne veux pas créer de double dalle il faut changer la ligne
world.setBlockAndMetadataWithNotify(i, j - 1, k, mod_monMod.madoubleDalle.blockID, i1);
en
world.setBlockAndMetadataWithNotify(i, j - 1, k, mod_monMod.Lenomdetonbloc.blockID, i1);

Le code de la double dalle est comme celui d'un bloc normale, la seule chose qu'il faut changer c'est
Code:
public int quantityDropped(Random random)
    {
            return 1;
    }
en
Code:
public int quantityDropped(Random random)
    {
            return 2;
    }

sinon le code dans mod_monMod est exactement pareil que pour un bloc normal
Code:
public static final Block maDalle= (new BlockmaDalle(247, 0))
 .setHardness(0.5F)
 .setResistance(3F)
 .setStepSound(Block.soundStoneFootstep)
 .setBlockName("Le nom");
 
 public static final Block madoubleDalle = (new BlockmadoubleDalle (246, 0))
 .setHardness(0.5F)
 .setResistance(3F)
 .setStepSound(Block.soundStoneFootstep)
 .setBlockName("Le nom");

sinon pour que le joueur traverse un bloc il faut rajouter ça au bloc :
Code:
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int i)
    {
        return null;
    }
par contre pour le reste je ne sais pas du tout.

Sinon je te conseille d'utiliser notepad++ il est gratuit et il permet d'écrire en JAVA.
 
Yeah merci beaucoup !!! Une dernière question après j'arrête (ou pas ^^) : comment extraire un morceau de mod déjà existant pour faire une compil et mettre ces éléments à jours ?