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

Ba en fait dans mon mod pour l'instant j'ai ajouté 2 nouveaux minerais, et quelque recipes, la j'en suis a faire la pioche et j'arrive pas, et c'est a cause de la pioche en emeraude que je veut faire que je suis bloqué.
Jte fait voir mon code:


mod_mymod.java
Code:
package net.minecraft.src;

    import java.util.Random;

    public class mod_mymod extends BaseMod
    {
	    public mod_mymod()
       {
          ModLoader.RegisterBlock(Emeraude);
          Emeraude.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/ModTexture/Emeraude.png");
          EmeraudeGemme.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/EmeraudeGemme.png");         
		  EmeraudePoussiere.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/EmeraudePoussiere.png"); 
          EmeraudePickaxe.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/EmeraudePioche.png");		 
		 
		  ModLoader.AddName(Emeraude, "Bloc d'Emeraude");
          ModLoader.AddName(EmeraudeGemme, "Emeraude");    
		  ModLoader.AddName(EmeraudePoussiere, "Poussière d'Emeraude");
	   	  ModLoader.AddName(EmeraudePickaxe, "Pioche en Emeraude");

  		  ModLoader.RegisterBlock(Rubis);
          Rubis.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/ModTexture/Rubis.png");
          RubisGemme.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/RubisGemme.png");         
          RubisPoussiere.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/RubisPoussiere.png");		 
          EmeraldPoussiere.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/EmeraldPoussiere.png");		 
		  OnyxPoussiere.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/OnyxPoussiere.png");
		  OnyxGemme.iconIndex = ModLoader.addOverride("/gui/items.png", "/ModTexture/OnyxGemme.png");
		 
		  ModLoader.AddName(Rubis, "Bloc de Rubis");
          ModLoader.AddName(RubisGemme, "Rubis");  
		  ModLoader.AddName(RubisPoussiere, "Poussière de Rubis");
		  ModLoader.AddName(EmeraldPoussiere, "Poussière de Diamand");
		  ModLoader.AddName(OnyxPoussiere, "Poussière d'Onyx");
		  ModLoader.AddName(OnyxGemme, "Onyx");
          
     	  ModLoader.AddRecipe(new ItemStack(EmeraudePoussiere, 1), new Object[]{ "##", "##", Character.valueOf('#'), EmeraudeGemme});
          ModLoader.AddRecipe(new ItemStack(RubisPoussiere, 1), new Object[]{ "##", "##", Character.valueOf('#'), RubisGemme});
		  ModLoader.AddRecipe(new ItemStack(EmeraldPoussiere, 1),new Object[]{ "##", "##", Character.valueOf('#'), Item.diamond});
		  ModLoader.AddRecipe(new ItemStack(OnyxPoussiere, 1),new Object[]{ "#XY", Character.valueOf('#'), EmeraudePoussiere, Character.valueOf('X'), RubisPoussiere, Character.valueOf('Y'), EmeraldPoussiere});
		  ModLoader.AddRecipe(new ItemStack(EmeraudePickaxe, 1),new Object[]{ "###", " X ", " X ", Character.valueOf('#'), EmeraudeGemme, Character.valueOf('X'), Item.ingotIron});
		  
		  
		  ModLoader.AddSmelting(OnyxPoussiere.shiftedIndex, new ItemStack(OnyxGemme, 1));
		  
		}
	   
	   public String Version()
       {
          return "1.5";
       }
	
       public void GenerateSurface(World worldObj, Random rand, int k, int l)
	   {
	      for(int i4 = 0; i4 < 3; i4++)
          {
              int j7 = k + rand.nextInt(16);
              int k10 = rand.nextInt(16);
              int i15 = l + rand.nextInt(16);
              (new WorldGenMinable(Emeraude.blockID, 7)).generate(worldObj, rand, j7, k10, i15);
          }
	   	
	
      
	   
	      for(int i4 = 0; i4 < 2; i4++)
          {
              int j7 = k + rand.nextInt(16);
              int k10 = rand.nextInt(16);
              int i15 = l + rand.nextInt(16);
              (new WorldGenMinable(Rubis.blockID, 7)).generate(worldObj, rand, j7, k10, i15);
          }
	   }	
     	
		public static final Block Emeraude;
        public static final Item EmeraudeGemme;
		public static final Item EmeraudePoussiere;
		public static final Block Rubis;
		public static final Item RubisGemme;
		public static final Item RubisPoussiere;
		public static final Item EmeraldPoussiere;
		public static final Item OnyxPoussiere;
		public static final Item OnyxGemme;
		public static final Item EmeraudePickaxe;
		
		static 
        {
           Emeraude = new BlockEmeraude(99, 0).setHardness(2.0F).setResistance(10.0F).setBlockName("Emeraude");
		   EmeraudeGemme= new Item(1000).setItemName("EmeraudeGemme");
		   EmeraudePoussiere = new Item(1002).setItemName("EmeraudePoussiere");
		   EmeraudePickaxe = (new ItemEmeraudePickaxe(2000, EnumToolMod.EMERAUDE)).setIconCoord(0, 0).setItemName("EmeraudePickaxe");
		   Rubis = new BlockRubis(100,0).setHardness(2.0F).setResistance(10.0F).setBlockName("Rubis");
		   RubisGemme= new Item(1001).setItemName("RubisGemme");
		   RubisPoussiere = new Item (1003).setItemName("RubisPoussiere");
	       EmeraldPoussiere = new Item (1004).setItemName("EmeraldPoussiere");
           OnyxPoussiere = new Item (1005).setItemName("OnyxPoussiere");
           OnyxGemme = new Item (1006).setItemName("OnyxGemme");
           		   
		} 
		

	}

EnumToolMod.java
Code:
package net.minecraft.src;

    public enum EnumToolMod 
	{

       EMERAUDE("EMERAUDE", 5, 3, 831, 12F, 3);
       
        private EnumToolMod(String s, int i, int j, int k, float f, int l)
        {
            harvestLevel = j;
            maxUses = k;
            efficiencyOnProperMaterial = f;
            damageVsEntity = l;
        }

        public int getMaxUses()
        {
            return maxUses;
        }

        public float getEfficiencyOnProperMaterial()
        {
            return efficiencyOnProperMaterial;
        }

        public int getDamageVsEntity()
        {
            return damageVsEntity;
        }

        public int getHarvestLevel()
        {
            return harvestLevel;
        }
       
        private final int harvestLevel;
        private final int maxUses;
        private final float efficiencyOnProperMaterial;
        private final int damageVsEntity;
     
    }

ItemEmeraudePickaxe
Code:
package net.minecraft.src;
// 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 


public class ItemEmeraudePickaxe extends ItemTool
{

    protected ItemEmeraudePickaxe(int i, EnumToolMod enumtoolmod)
    {
        super(i, 2, enumtoolmod, blocksEffectiveAgainst);
    }

    public boolean canHarvestBlock(Block block)
    {
        if(block == Block.obsidian)
        {
            return toolMaterial.getHarvestLevel() == 3;
        }
        if(block == Block.blockDiamond || block == Block.oreDiamond)
        {
            return toolMaterial.getHarvestLevel() >= 2;
        }
        if(block == Block.blockGold || block == Block.oreGold)
        {
            return toolMaterial.getHarvestLevel() >= 2;
        }
        if(block == Block.blockSteel || block == Block.oreIron)
        {
            return toolMaterial.getHarvestLevel() >= 1;
        }
        if(block == Block.blockLapis || block == Block.oreLapis)
        {
            return toolMaterial.getHarvestLevel() >= 1;
        }
        if(block == Block.oreRedstone || block == Block.oreRedstoneGlowing)
        {
            return toolMaterial.getHarvestLevel() >= 2;
        }
        if(block.blockMaterial == Material.rock)
        {
            return true;
        }
        return block.blockMaterial == Material.iron;
    }

    private static Block blocksEffectiveAgainst[];

    static 
    {
        blocksEffectiveAgainst = (new Block[] {
            Block.cobblestone, Block.stairDouble, Block.stairSingle, Block.stone, Block.sandStone, Block.cobblestoneMossy, Block.oreIron, Block.blockSteel, Block.oreCoal, Block.blockGold, 
            Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.netherrack, Block.oreLapis, Block.blockLapis
        });
    }
}


Franchement la dedans tu trouve une erreure? Il y a tout ce qui faut pour faire la pioche mais franchement j'ai toujours cette erreure et sa me gonfle parceque je perd mon temps je fait rien sa fait depuis hier que j'ai ce problème...

(edit: l'erreur que j'ai posté au dessus c'est l'erreur que j'ai quand je recompile sa)
 
bon je répète ma question : vous avez fait comment à l'étape deux du tuto quand il faut créer des fichier appellé: ''mod_MyMod'' et l'autre pour qu'il soient en ''.java''. merci pour toute l'aide apporté.
 
Moi perso, bien que j'ai changé le code avec le "public static final" rien n'a changé, je ne peu toujours pas crafter mon bol de lait :/
 
mod_bowlMilk
Code:
package net.minecraft.src;
	public class mod_bowlMilk extends BaseMod
	{
		public String Version()
		{
			return "1.5_01";
		}
		
		public mod_bowlMilk()
		{
		ModLoader.AddRecipe(new ItemStack(mybowlMilk, 1), new Object[] {"A", "B",
		Character.valueOf('A'), ItemBucket.bucketMilk, Character.valueOf('B'), Item.bowlEmpty});
		}
		
	public static final Item mybowlMilk = 
		(new ItemMybowlMilk(100,226)).setItemName("Bol de Lait").setIconIndex
		(ModLoader.addOverride("/gui/items.png", "/mod/mocreaturefr.png"));
		
		
		
	}

And ItemMybowlMilk :

Code:
package net.minecraft.src;
public class ItemMybowlMilk extends ItemFood
{
	public ItemMybowlMilk(int i, int j)
		{
		  super(i, j, false);
		  maxStackSize = 1;
		}
	public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
		{
		  entityplayer.heal(1);
		  super.onItemRightClick(itemstack, world, entityplayer);
		  return new ItemStack(Item.bowlEmpty);
		}	
}
 
Re bonjour, je voulais juste savoir car dans le tuto 2 en me dit que dans ces lignes:
{
myBloc = (new BlockMyBloc(95,
224)).setHardness(2.0F).setResistance(10F).setStepSound(Block.soundStoneFootstep);
}
que le numéro 224 correspond à un endroit sur l'image terrain.png et je voudrai savoir s'il était possible de faire que ça corresponde non a un endroit sur terrain.png met à une image ailleur. Est-ce possible ?? Merci de tout réponse proposée.
 
emerzit -> Oui,c'est possible.
Remplace simplement la valeur (ici 224) par la fonction "AddOverride" de ModLoader.
Ce qui donne:
Code:
ModLoader.addOverride("/terrain.png", "/mymod/mybloc.png")

"mymod" est le nom du dossier de minecraft.jar où se trouve l'image,et "mybloc.png" le nom de cette image,qui est utilisé pour le bloc.
 
Salut tous le monde , a chaquee foix que je lance le recompile.bat il me trouve toujour des erreurs si quelqu'un peut me les corriger svp voila le code
package net.minecraft.src;
public class mod_MyMod extends BaseMod
{
public mod_MyMod()
{
ModLoader.RegisterBlock(myBloc);
ModLoader.AddRecipe(new ItemStack(myBloc, 8), new Object[]
{"###,,###",Character.valueOf('#'), Block.cobblestone,
});
.public static;final Block myBloc = (new
BlockMyBloc(99,224)).setHardness(2.0F).setResistance(10F)
.setStepSound(Block.soundStoneFootstep);
.public string Version;});
{
return "1.5_01";
}
}
Je vous remercie d'avance
Cordialement