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

mysterioxes a dit:
ok val j'ai compris enfete c'est écrit juste en bas bon enfin bref j'ai voulut créer des enumtool je c'est pas comment appeler sa mdr bon voila le code et les 35 erreurs mdr
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;


public enum EnumToolMaterial
{
    WOOD("WOOD", 0, 0, 59, 2.0F, 0),
    STONE("STONE", 1, 1, 131, 4F, 1),
    IRON("IRON", 2, 2, 250, 6F, 2),
    EMERALD("EMERALD", 3, 3, 1561, 8F, 3),
    GOLD("GOLD", 4, 0, 32, 12F, 0);
	MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
	DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
	CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
	ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
	PURE("PURE", 10, 10, 5000, 50F, 10);
/*
    public static EnumToolMaterial[] values()
    {
        return (EnumToolMaterial[])j.clone();
    }

    public static EnumToolMaterial valueOf(String s)
    {
        return (EnumToolMaterial)Enum.valueOf(net.minecraft.src.EnumToolMaterial.class, s);
    }
*/
    private EnumToolMaterial(String s, int i, int k, int l, float f, int i1)
    {
//        super(s, i);
        harvestLevel = k;
        maxUses = l;
        efficiencyOnProperMaterial = f;
        damageVsEntity = i1;
    }

    public int getMaxUses()
    {
        return maxUses;
    }

    public float getEfficiencyOnProperMaterial()
    {
        return efficiencyOnProperMaterial;
    }

    public int getDamageVsEntity()
    {
        return damageVsEntity;
    }

    public int getHarvestLevel()
    {
        return harvestLevel;
    }
/*
    public static final EnumToolMaterial WOOD;
    public static final EnumToolMaterial STONE;
    public static final EnumToolMaterial IRON;
    public static final EnumToolMaterial EMERALD;
    public static final EnumToolMaterial GOLD;
	public static final EnumToolMaterial MACHALITE;
	public static final EnumToolMaterial DRAGONITE;
	public static final EnumToolMaterial CARBALITE;
	public static final EnumToolMaterial ELTALITE;
	public static final EnumToolMaterial PURE;
*/
    private final int harvestLevel;
    private final int maxUses;
    private final float efficiencyOnProperMaterial;
    private final int damageVsEntity;
//    private static final EnumToolMaterial j[]; /* synthetic field */
/*
    static 
    {
        WOOD = new EnumToolMaterial("WOOD", 0, 0, 59, 2.0F, 0);
        STONE = new EnumToolMaterial("STONE", 1, 1, 131, 4F, 1);
        IRON = new EnumToolMaterial("IRON", 2, 2, 250, 6F, 2);
        EMERALD = new EnumToolMaterial("EMERALD", 3, 3, 1561, 8F, 3);
        GOLD = new EnumToolMaterial("GOLD", 4, 0, 32, 12F, 0);
		MACHALITE = new EnumToolMaterial("MACHALITE", 4, 3, 250, 50F, 1);
		DRAGONITE = new EnumToolMaterial("DRAGONITE", 10, 10, 500, 12F, 2);
		CARBALITE = new EnumToolMaterial("CARBALITE", 4, 6, 5000, 12F, 5);
		ELTALITE = new EnumToolMaterial("ELTALITE", 4, 9, 32, 12F, 10);
		PURE = new EnumToolMaterial("PURE", 10, 10, 5000, 50F, 10);
        j = (new EnumToolMaterial[] {
            WOOD, STONE, IRON, EMERALD, GOLD, MACHALITE, DRAGONITE, CARBALITE, ELTALITE,PURE
        });
    }
*/
}
puis ma console
Code:
== MCP v4.1 ==
> Recompiling client...
javac.exe -g -verbose -classpath "lib/;lib/*;jars/bin/minecraft.jar;jars/bin/jin
put.jar;jars/bin/lwjgl.jar;jars/bin/lwjgl_util.jar" -sourcepath src/minecraft -d
 bin/minecraft src/minecraft\net\minecraft\client\*.java src/minecraft\net\minec
raft\isom\*.java src/minecraft\net\minecraft\src\*.java  conf/patches/*.java fai
led.
Return code : 1

== ERRORS FOUND ==

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: invalid method declara
tion; return type required
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: illegal start of type
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: illegal start of type
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: illegal start of type
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: illegal start of type
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: illegal start of type
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:15: illegal start of type
MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: invalid method declara
tion; return type required
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: illegal start of type
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: illegal start of type
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: illegal start of type
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: illegal start of type
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: illegal start of type
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:16: illegal start of type
DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: invalid method declara
tion; return type required
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: illegal start of type
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: illegal start of type
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: illegal start of type
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: illegal start of type
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: illegal start of type
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:17: illegal start of type
CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: invalid method declara
tion; return type required
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: illegal start of type
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: illegal start of type
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: illegal start of type
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: illegal start of type
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: illegal start of type
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:18: illegal start of type
ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: invalid method declara
tion; return type required
PURE("PURE", 10, 10, 5000, 50F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: illegal start of type
PURE("PURE", 10, 10, 5000, 50F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: illegal start of type
PURE("PURE", 10, 10, 5000, 50F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: illegal start of type
PURE("PURE", 10, 10, 5000, 50F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: illegal start of type
PURE("PURE", 10, 10, 5000, 50F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: illegal start of type
PURE("PURE", 10, 10, 5000, 50F, 10);
^

src\minecraft\net\minecraft\src\EnumToolMaterial.java:19: illegal start of type
PURE("PURE", 10, 10, 5000, 50F, 10);
^

35 errors
==================

> Done in 1.27 seconds
> Recompiling server...
!! Can not find server sources !!
Appuyez sur une touche pour continuer...


sans le vouloir tu as fait l'erreur la plus fréquemment faite (je pense^^)

donc toi tu as mis sa:
Code:
public enum EnumToolMaterial
{
    WOOD("WOOD", 0, 0, 59, 2.0F, 0),
    STONE("STONE", 1, 1, 131, 4F, 1),
    IRON("IRON", 2, 2, 250, 6F, 2),
    EMERALD("EMERALD", 3, 3, 1561, 8F, 3),
    GOLD("GOLD", 4, 0, 32, 12F, 0);
	MACHALITE("MACHALITE", 4, 3, 250, 50F, 1);
	DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2);
	CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5);
	ELTALITE("ELTALITE", 4, 9, 32, 2F, 10);
	PURE("PURE", 10, 10, 5000, 50F, 10);

alors qu'il faut mettre sa:
Code:
public enum EnumToolMaterial
{
    WOOD("WOOD", 0, 0, 59, 2.0F, 0),
    STONE("STONE", 1, 1, 131, 4F, 1),
    IRON("IRON", 2, 2, 250, 6F, 2),
    EMERALD("EMERALD", 3, 3, 1561, 8F, 3),
    GOLD("GOLD", 4, 0, 32, 12F, 0),
	MACHALITE("MACHALITE", 4, 3, 250, 50F, 1),
	DRAGONITE("DRAGONITE", 10, 10, 500, 5F, 2),
	CARBALITE("CARBALITE", 4, 6, 5000, 10F, 5),
	ELTALITE("ELTALITE", 4, 9, 32, 2F, 10),
	PURE("PURE", 10, 10, 5000, 50F, 10);
tu avait mis plusieur fois d'affilé le ";" alors qu'il faut le mettre qu'une fois a la fin
 
j'avais pas remarquer merci^^ comment tu a fait dans ton mod( je tiens a dire que c'st un tres bon mod a par pour les piikachu yen a de partout mdr) bon comment tu a fait pour faire genere une plante style la rose noir ?
 
je me suis inspirée du code de la fleure et ensuite pour les généré regarde dans chunkprovidergenerate.java
ps: j'avoue que l'idée des pikachu est pas top enfin je vais les laissé mais les faire apparaitre que dans le désert et BEAUCOUP moins souvent ^^
 
Destruct a dit:
@ KiwiAtomique
Dans ton fichier bière.java, tu n'as qu'un constructeur avec deux entiers :

Code:
public ItemBiere (int i, int j)
{
super(i);
healAmount = j;
maxStackSize = 1;
}

Hors, tu utilise un constructeur avec un seul entier
Code:
Biere = (new ItemBiere(361)).setItemName("Biere").setIconIndex(ModLoader.addOverride("/gui/items.png","mod/biere.png"));

La solution serait de soit rajouter un constructeur avec un seul entier, soit rajouter une valeur à ItemBiere, comme ceci :
Code:
Biere = (new ItemBiere(361,[b]x[/b])).setItemName("Biere").setIconIndex(ModLoader.addOverride("/gui/items.png","mod/biere.png"));

où x serait la valeur de la restauration.





MERCI BEAUCOUP !!!!
 
j'aimerais qu'un bloc sois collant , c'est a dire que quand on marche dessus on reste dessus le seul moyen de partir est de casser le bloc merci des réponse
 
Bonjour, j'ai juste une petite question, comment fait-t'on pour que lorsque l'on casse un bloc, il drop plusieurs bloc, du style lorsque l'on mine un oreRedstone, on obtiens plusieurs Redstone... ?
Si quelqu'un à la réponse je suis preneur, d'avance merci !

Je n'ai pas la réponse à ta question, Val166, mais je trouve que c'est une très bonne idée =) !
 
En tant que novice, je ne vois qu'un code similaire à la toile d'araignée ou à la soul sand, comme ceci:

Code:
public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
    {
        entity.motionX *= 0.40000000000000002D;
        entity.motionZ *= 0.40000000000000002D;
    }
}

(tiré du soul sand)
où tu remplacerais les 0.4 par 0 uniquement.
Aprés, si tu ne veux pas que le personnage ne tombe pas, tu peux aussi rajouter

Code:
entity.motionY *= 0.0D;

mais c'est à vérifier.

Sinon, des idées pour mon soucis de laine (donc, un bloc, une ID, plusieurs textures)

Une des pistes serait de modifier le damage, mais je ne sais pas comment ^^"
 
Code:
public int idDropped(int i, Random random)
    {
        return Item.redstone.shiftedIndex;
    }

    public int quantityDropped(Random random)
    {
        return 4 + random.nextInt(2);
    }

Voilà comment il faut faire pour le block comme la RedstoneOre.
 
Effectivement Destruct, je pense que c'est une bonne idée !

Merci beaucoup Sorax ;) !

Ouch... que d'erreurs !

Alors voilà, je voudrais créer un bloc qui serait généré dans le monde à partir de y=30 (En dessous de 30 donc). Le bloc appelé "Hard Stone" servirait seulement être miné, lorsqu'il l'es, il rend de 5 à 9 Stone.
Seul(s) problèmes... ces 10 erreurs !

Code:
== MCP v4.1 ==
> Recompiling client...
"C:\Program Files\Java\jdk1.6.0_26\bin\javac.exe" -g -verbose -classpath "lib/;l
ib/*;jars/bin/minecraft.jar;jars/bin/jinput.jar;jars/bin/lwjgl.jar;jars/bin/lwjg
l_util.jar" -sourcepath src/minecraft -d bin/minecraft src/minecraft\net\minecra
ft\client\*.java src/minecraft\net\minecraft\isom\*.java src/minecraft\net\minec
raft\src\*.java  conf/patches/*.java failed.
Return code : 1

== ERRORS FOUND ==

src\minecraft\net\minecraft\src\BlockHardStone.java:12: <identifier> expected
public int.idDropped(int i, Random random)
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:11: ')' expected
ModLoader.AddRecipe(new ItemStack(HardStone, 1) new Object[]
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:11: not a statement
ModLoader.AddRecipe(new ItemStack(HardStone, 1) new Object[]
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:11: ';' expected
ModLoader.AddRecipe(new ItemStack(HardStone, 1) new Object[]
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:12: not a statement
{"###","###","###",Character.valueOf('#'), Block.stone});
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:12: ';' expected
{"###","###","###",Character.valueOf('#'), Block.stone});
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:12: ';' expected
{"###","###","###",Character.valueOf('#'), Block.stone});
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:12: not a statement
{"###","###","###",Character.valueOf('#'), Block.stone});
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:12: ';' expected
{"###","###","###",Character.valueOf('#'), Block.stone});
^

src\minecraft\net\minecraft\src\mod_nexcraft.java:12: illegal start of expressio
n
{"###","###","###",Character.valueOf('#'), Block.stone});
^

10 errors
==================

> Done in 2.39 seconds
> Recompiling server...
!! Can not find server sources !!
Appuyez sur une touche pour continuer...


Si besoin voici mes lignes de code :

Pour le mod :
Code:
package net.minecraft.src;

import java.util.Random;

public class mod_nexcraft extends BaseMod
{
	public mod_nexcraft()
	{
		ModLoader.RegisterBlock(HardStone);
		ModLoader.AddName(HardStone, "Hard Stone");
		ModLoader.AddRecipe(new ItemStack(HardStone, 1) new Object[]
		{"###","###","###",Character.valueOf('#'), Block.stone});
	}
	
	public void GenerateSurface(World world, Random rand, int chunkX, int chunkZ)
	{
		for(int i = 0; i < 15; i++)
		{
			int randPosX = chunkX + rand.nextInt(16);
			int randPosY = rand.nextInt(30);
			int randPoxZ = chunkZ + rand.nextInt(16);
			(new WorldGenMinable(Block.HardStone.blockID, 8)).generate(world, rand, randPosX, randPosY, randPosZ);
		}
	}	
	
	public static final Block HardStone = (new BlockHardStone(10002,ModLoader.addOverride("/terrain.png", "/HardStone.png")).steHardness(2.0F).setResistance(15F).setStepSound(Block.soundStoneFootstep).setLightValue(0.3F).setBlockName("Hard Stone"));

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

Et pour le bloc :
Code:
package net.minecraft.src;

import java.util.Random;

public class BlockHardStone extends Block
{
	public BlockHardStone(int i, int j)
	{
		super(i,j, Material.rock);
	}

	public int.idDropped(int i, Random random)
	{
		return Block.stone.BlockID;
	}
	
	public int quantityDropped(Random random)
    {
        return 5 + random.nextInt(4);
    }

}

D'avance merci... !