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

Stormweaker a dit:
Frank1010 a dit:
Autres questions :
-Comment ajouter une variable propre au jouer ? Où cela se fait-il ?
-Puis comme la récupérer dans un fichier bloc ?

Une variable pour faire quoi?

C'est dans l'idée du mod que j'ai envie de créer, enfin si j'arrive à comprendre le fonctionnement de l'explosion d'un bloc...

Mais j'aimerais modifier le comportement de l'explosion en fonction des actions du joueurs. J'aimerais donc pouvoir stocker dans une variable le faite que le joueur est trouvé ou non un objet. Ou bien à partir du moment, où il a l'objet en lui, modifier le comportement de l'explosion.

Mais grosso-modo je veux qu'à partir d'une donnée situé dans un fichier A, je puisse l'utiliser dans un fichier B, sans forcément le passage en paramètre d'une fonction...
 
Un petit cours sur les fonctions: (qui semblent être appropriées dans ta situation)

Elles permettent de stocker un code dans un espace, ce code peut être réutilisé autant de fois que nécessaire.

Dans ton cas, il te suffit de faire ceci:

Code:
public class Test {
public void ActionDuJoueur {

// là tu met ton code
  }
}

Et si tu veux utiliser le code dans un fichier tu fais:

Code:
Test a = new Test();
a.ActionDuJoueur

Exemple d'un programme tout simple (ou pas dailleurs) utilisant les fonctions:

Main.java:

Code:
package paulapp; public class Main {  public static void main(String [] arg) 
{ Figure programme = new Figure(); programme.programme(); } }

Figure.java:

Code:
package paulapp;
import java.util.*;

public class Figure {
    
     public int coté1,coté2,coté3,rayon,coté,longueur,largeur, choix, choix2;
     public int nbcoté,Mafigure,longueurB,largeurB,cotéValeur;
     static public Figure Fi = new Figure();
     static public int f1, f2, f3, f4, f5, f6, tmp;
     public String choix3, choix4, carré = "carré", rectangle = "rectangle";
     public String triangle = "triangle", cercle = "cercle";
     public String MaFigure = "Mafigure", parallélogramme = "parallélogramme";
     Scanner ecriture = new Scanner(System.in);
    
    public void programme()
    {
        System.out.println("Bienvenue dans l'interface de création de figures. Voulez vous créer:");
        Fi.choix1();
    }
    
    public void choix1()
    {
    System.out.println("1: un carré");
    System.out.println("2: un rectangle");
    System.out.println("3: un triangle");
    System.out.println("4: un cercle");
    System.out.println("5: créer un parallélogramme");
    System.out.println("6: créer votre propre figure");
    System.out.println();
    choix = ecriture.nextInt();
    if ((choix > 6) || (choix < 1)) {
        System.out.println("Valeur non valide. Veuillez rentrer une valeur valide. Valeurs possibles: ");
        Fi.choix1(); }
    if (choix == 1)
        Fi.créerUnCarré();
    if (choix == 2)
        Fi.créerUnRectangle();
    if (choix == 3)
        Fi.créerUnTriangle();
    if (choix == 4)
        Fi.créerUnCercle();
    if (choix == 5)
        Fi.créerUnParallélogramme();
    if (choix == 6)
        Fi.créerSaPropreFigure();
    System.out.println();
    Fi.choix2();
    }
    
    public void choix2() 
    {
             System.out.print("Voulez-vous:");
             System.out.println();
    System.out.println("1: Changer les proportions d'une des figures");
    System.out.println("2: Créer une nouvelle figure");
    System.out.println("3: Détruire une figure");
    System.out.println("4: Fermer le programme");
    System.out.println("Choix: ");
    choix2 = ecriture.nextInt();
    if (choix2 == 1)
        Fi.ChangerProportionsFigure();
    if (choix2 == 3)
        Fi.DétruireUneFigure();
    if (choix2 == 2)
        Fi.choix1();
    if (choix2 == 4)
        System.exit(0);
    if ((choix2 > 4) || (choix2 < 1)) {
        System.out.println("Valeur non valide. Veuillez rentrer une valeur valide.");
        Fi.choix2(); }
    }
    
    public void créerUnCarré()
    {
        f1++;
        System.out.println("coté: ");
        coté = ecriture.nextInt();
        if (coté == 0) {
        System.out.println("Votre carré ne peut pas avoir 0 cm de coté!");
        Fi.créerUnCarré(); }
        System.out.println("Vous avez créé un carré de "+ coté +" cm de coté.");
    }
    
    public void créerUnRectangle()
    {
         f2++;
        System.out.println("longueur: ");
        longueur = ecriture.nextInt();
        System.out.println("largeur: ");
        largeur = ecriture.nextInt();
        if (longueur == 0) {
        System.out.println("Votre rectangle ne peut pas avoir 0 cm de longueur ! veuillez rentrer à nouveau des valeurs:");
        Fi.créerUnRectangle(); }
        if (largeur == 0) {
        System.out.println("Votre recrangle ne peut pas avoir 0 cm de largeur ! veuillez rentrer à nouveau des valeurs:");
        Fi.créerUnRectangle(); }
        System.out.println("Vous avez créé un rectangle de "+ longueur +" cm de longueur et "+ largeur +" cm de largeur.");
    }
    
    public void créerUnTriangle()
    {
        f3++;
        System.out.println("premier coté: ");
        coté1 = ecriture.nextInt();
        System.out.println("deuxième coté: ");
        coté2 = ecriture.nextInt();
        System.out.println("troisième coté: ");
        coté3 = ecriture.nextInt();
        if ((coté1 == 0) || (coté2 == 0) || (coté3 == 0)) {
        System.out.println("Un de vos cotés est égal à 0 ! Veuillez rentrer à nouveau des valeurs:");
        Fi.créerUnTriangle(); }
        System.out.println("Vous avez créé un triangle de dimensions "+ coté1 +", "+ coté2 +" et "+ coté3 +"cm de coté.");
    }
    
    public void créerUnCercle()
    {
        f4++;
        System.out.println("rayon: ");
        rayon = ecriture.nextInt();
        if (rayon <= 0) {
        System.out.println("Votre rayon ne peut être égal ou inférieur à 0. Veuillez rentrer à nouveau un rayon.");
        Fi.créerUnCercle(); }
        System.out.println("Vous avez créé un cercle de "+ rayon +" cm de rayon.");
    }
    
    public void créerUnParallélogramme()
    {
        f5++;
        System.out.println("longueur: ");
        longueurB = ecriture.nextInt();
        System.out.println("largeur: ");
        largeurB = ecriture.nextInt();
        if (longueurB == 0) {
        System.out.println("Votre parallélogramme ne peut pas avoir 0 cm de longueur ! veuillez rentrer à nouveau des valeurs:");
        Fi.créerUnParallélogramme(); }
        if (largeurB == 0) {
        System.out.println("Votre recrangle ne peut pas avoir 0 cm de largeur ! veuillez rentrer à nouveau des valeurs:");
        Fi.créerUnParallélogramme(); }
        System.out.println("Vous avez créé parallélogramme de "+ longueurB +" cm de longueur et "+ largeurB +" cm de largeur.");
    }
    
    public void créerSaPropreFigure()
    {
        System.out.println("Nombre de cotés: (max: 10)");
        nbcoté = ecriture.nextInt();
        if (nbcoté < 3) {
            System.out.println("Veuillez définir un nombre de cotés positif et supérieur à 2.");
            Fi.créerSaPropreFigure(); }
        
        for (Mafigure = 0; Mafigure < nbcoté; Mafigure++) {
            System.out.println("Coté "+ (Mafigure+1) +": ");
            cotéValeur = ecriture.nextInt(); }
        
        f6++;
        System.out.println("Votre figure a été crée.");
        Fi.choix2();
    }
    
    public void ChangerProportionsFigure()
    {
        if ((f1 == 0) && (f2 == 0) && (f3 == 0) && (f4 == 0) && (f5 == 0) && (f6 == 0)) {
            System.out.println("Vous n'avez pas de figures ! Retour au choix.");
            Fi.choix2(); }
            
        tmp = 1;
        System.out.println("Pour quelle figure voulez vous modifier les proportions ?");
        System.out.println("Vous avez:");
        {
        if (f1 > 0)
            System.out.println("un carré (Choix: carré)");
        if (f2 > 0)
            System.out.println("un rectangle (choix: rectangle)");
        if (f3 > 0)
            System.out.println("un triangle (choix: triangle)");
        if (f4 > 0)
            System.out.println("un cercle (choix: cercle)");
        if (f5 > 0)
            System.out.println("un parallélogramme (choix: parallélogramme)");
        if (f6 > 0)
            System.out.println("Votre propre figure (choix: Mafigure)");
        }
        System.out.println("Choix: ");
        choix3 = ecriture.next();
        if (f1 > 0) {
        if (choix3.regionMatches(true, 0, carré, 0, 5))
            Fi.créerUnCarré(); tmp = 0; }
        if (f2 > 0) {
        if (choix3.regionMatches(true, 0, rectangle, 0, 5))
            Fi.créerUnRectangle(); tmp = 0; }
        if (f3 > 0) {
        if (choix3.regionMatches(true, 0, triangle, 0, 5))
            Fi.créerUnTriangle(); tmp = 0; }
        if (f4 > 0) {
        if (choix3.regionMatches(true, 0, cercle, 0, 5))
            Fi.créerUnCercle(); tmp = 0; }
        if (f5 > 0) {
        if (choix3.regionMatches(true, 0, parallélogramme, 0, 5))
            Fi.créerUnParallélogramme(); tmp = 0; }
        if (f6 > 0) {
        if (choix3.regionMatches(true, 0, MaFigure, 0, 8))
            Fi.créerSaPropreFigure(); tmp = 0;}
        if (tmp == 1) {
            System.out.println("Choix non valide. Retour à la liste des choix.");
            Fi.ChangerProportionsFigure(); }
        Fi.choix2();
    }
    
    public void DétruireUneFigure()
    {
        if ((f1 == 0) && (f2 == 0) && (f3 == 0) && (f5 == 0) && (f6 == 0)) {
            System.out.println("Vous n'avez pas de figures ! Retour au choix.");
            Fi.choix2(); }
        System.out.println("Quelle figure voulez-vous détruire ?");
        System.out.println("Vous avez:");
        {
        if (f1 > 0)
            System.out.println("un carré (Choix: carré)");
        if (f2 > 0)
            System.out.println("un rectangle (choix: rectangle)");
        if (f3 > 0)
            System.out.println("un triangle (choix: triangle)");
        if (f4 > 0)
            System.out.println("un cercle (choix: cercle)");
        if (f5 > 0)
            System.out.println("un parallélogramme (choix: parallélogramme)");
        if (f6 > 0)
            System.out.println("Votre propre figure (choix : Mafigure)");
        System.out.println("choix: ");
        choix4 = ecriture.next();
        if (f1 > 0) {
        if (choix4.regionMatches(true, 0, carré, 0, 5)) {
            System.out.println("Le carré de coté "+ coté +" a été détruit.");
            f1 = 0; } }
        if (f2 > 0) {
        if (choix4.regionMatches(true, 0, rectangle, 0, 9)) {
            System.out.println("Le rectangle de longueur "+ longueur +"cm et de largeur "+ largeur +"cm a été détruit.");
            f2 = 0; } }
        if (f3 > 0) {
        if (choix4.regionMatches(true, 0, triangle, 0, 8)) {
            System.out.println("Le triangle de cotés "+ coté1 +", "+ coté2 +" et "+ coté3 +" cm a été détruit.");
            f3 = 0; } }
        if (f4 > 0) {
        if (choix4.regionMatches(true, 0, cercle, 0, 6)) {
            System.out.println("Le cercle de rayon "+ rayon +" cm a été détruit.");
            f4 = 0; } }
        if (f5 > 0) {
        if (choix4.regionMatches(true, 0, parallélogramme, 0, 15)) {
            System.out.println("Le parallélogramme de longueur "+ longueurB +"cm et de largeur "+ largeurB +"cm a été détruit.");
            f5 = 0; } }
        if (f6 > 0) {
        if (choix4.regionMatches(true, 0, MaFigure, 0, 8)) {
            System.out.println("Votre figure a été détruite.");
            f6 = 0; } }
        if ((f1 != 0) && (f2 != 0) && (f3 != 0) && (f4 != 0) && (f5 != 0) && (f6 != 0)) {
            System.out.println("Choix non valide. Retour à la liste des choix.");
            Fi.DétruireUneFigure(); }
        Fi.choix2();
            
        }
    }
    
}

Voilà j'ai fait mon petit cours sur les fonctions :P
 
Gugu42 a dit:
Bon , je me lance , souhaiter moi bonne chance :P

Mais , pour la resistance , comment ça marche ?

.setHardness(2.0F).setResistance(10F)

A quoi correspont les chiffres et le F ?

Merci de votre aide !

Pour les chiffres, il faudrait que tu te rapportes aux fonctions les utilisants, il suffit de voir le calcul... Pour le F, je crois qu'il indique, float, c'est à dire un nombre à virgule (et donc ce n'est pas un entier, notamment pour 10, il faut le considérer comme 10.0).


Au pire je risque de passer pour un con, mais je fais des étudies d'informatique, donc je connais un peu le principe. En faite, ce que je voulais dire, et d'un côté, c'est vrai que je ne connais pas le Java, mais c'était dans quel fichier, insérer le bout de code concernant le joueur ? Et comme le récupérer, car (malgré moi je connais le C++) et je sais comment ça marche, mais un peu moins le Java. Donc il suffit d'utiliser les packages si j'ai bien compris.

Enfin merci quand même pour ce petit rappel.

Faut savoir aussi que c'est la première fois que je me plonge dans le code plutôt compliqué d'un programme, et venant de la décompilation, sans commentaire... pas facile. En faite, c'est surtout le faite de ne pas du tout connaître l'organisation du projet qui me paume un peu.
Pour l'instant, j'ai juste compris que tous les blocks héritaient de la classe block et deux trois autres petites choses... mais voilà.

Donc en faite pour résumé ma question, c'était surtout où insérer des variables propre au joueur ?

Et donc si j'ai bien compris, je dois ensuite, dans le fichier de mon nouveau block insérer la ligne package avec le nom de la classe correspondante (là où il y a ma variable). Puis instancier un objet de cette classe pour y récupérer la variable ?

Mais du coup, dois-je déclarer la variable en private comme le veux le principe d'encapsulation, et créer une fonction get, ou bien la déclarer public directement ?
 
Hello, j'ai un gros problème que je n'arrive pas à résoudre.



mon code

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 Block myBloc = (new BlockExtracteur(99,250)).setHardness(2.0F).setResistance(10F).setStepSound(Block.soundStoneFootstep);
    public String Version()
    {
    return "1.01";
    }
}

BlockExtracteur
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);
            entityplayer.displayGUIFurnace(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 si vous savez m'aidez.