Plantation



  • Bonjour , je fais des plantations pour mon mods mais j'ai quelque problèmes : quand je casse ma plantation le drop est une carrot et les plans non pas de textures lors des stages.
    ma class :

    package thecraft.mod.common.blocks;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.block.BlockCarrot;
    import net.minecraft.block.BlockCrops;
    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.util.IIcon;
    import thecraft.mod.common.ewifaction;
    
    public class BlockCultureTomate extends BlockCarrot {
    
    public static String[] type = new String[]{"tomate_stage_0", "tomate_stage_1", "tomate_stage_2"};
    private IIcon[] IconArray;
    
    public BlockCultureTomate ()
    {
    super();
    }
    
           public IIcon getIcon(int side, int metadata)
           {
              return (IIcon) (metadata < type.length && metadata >= 0 ? IconArray[metadata] : IconArray[0]);
           }
    
           public void registerBlockIcons(IIconRegister iconregister)
    {
            IconArray = new IIcon[type.length];
    
    for(int i = 0; i < type.length; i++)
    {
    IconArray* = (IIcon) iconregister.registerIcon("ewifaction:" + type*);
    }
    }
    
    protected Item getSeedItem()
    {
    return ewifaction.GraineTomate;
    }
    
    protected Item getCropItem()
    {
    return ewifaction.ItemTomate;
    }
    
    public int damageDropped(int metadata)
    {
    return metadata;
    }
    }
    

    merci d'avance pour votre aide

    edit : j'ai pas mal chercher sur le forum et je suis arrivé  la :

    extends BlockCrops {
    
    public static final String name = "BlockCultureTomate";
    private IIcon[] textures;
    
    public BlockCultureTomate()
    {
    setBlockTextureName(ewifaction.MODID + ":" + name);
    }
    
    @Override
    public IIcon getIcon(int side, int meta) {
    if (meta < 4) {
    if (meta == 3) {
    meta = 2;
    }
    
    return this.textures[meta >> 1];
    } else {
    return this.textures[3];
    }
    }
    
    @Override
    protected Item func_149866_i() {
    return ewifaction.GraineTomate;
    }
    
    @Override
    protected Item func_149865_P() {
    return ewifaction.ItemTomate;
    }
    
    @Override
    public void registerBlockIcons(IIconRegister p_149651_1_) {
    this.textures = new IIcon[4];
    
    for (int i = 0; i < this.textures.length; ++i) {
    this.textures* = p_149651_1_.registerIcon(this.getTextureName() + "_stage_" + i);
    }
    }
    }
    

    il reste un seul problème le block n'evolue pas il reste a la première texture même avec de la bone meal



  • après de nombreux test et recherche je suis arrivé la dessus :

    package thecraft.mod.common.blocks;
    
    import java.util.Random;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.block.BlockCarrot;
    import net.minecraft.block.BlockCrops;
    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.util.ChatComponentText;
    import net.minecraft.util.IIcon;
    import net.minecraft.world.World;
    import thecraft.mod.common.ewifaction;
    
    public class BlockCultureTomate extends BlockCrops
    {
    public static final String name = "BlockCultureTomate";
    private IIcon[] textures;
    
    public BlockCultureTomate() {
    setBlockTextureName(ewifaction.MODID + ":" + name);
    }
    
    @Override
    public IIcon getIcon(int side, int meta) {
    if (meta < 0 || meta > 2) {
    meta = 2;
    }
    
    return this.textures[meta];
    }
    
    @Override
    public Item func_149866_i() {
    return ewifaction.ItemTomate;
    }
    
    @Override
    public Item func_149865_P() {
    return ewifaction.ItemTomate;
    }
    
    @Override
    public void registerBlockIcons(IIconRegister p_149651_1_) {
    this.textures = new IIcon[3];
    
    for (int i = 0; i < this.textures.length; ++i) {
    this.textures* = p_149651_1_.registerIcon(this.getTextureName() + "_stage_" + i);
    }
    }
    
    @Override
    public boolean func_149851_a(World p_149851_1_, int p_149851_2_, int p_149851_3_, int p_149851_4_, boolean p_149851_5_) {
    return false;
    }
    
    @Override
    public boolean func_149852_a(World p_149852_1_, Random p_149852_2_, int p_149852_3_, int p_149852_4_, int p_149852_5_) {
    return false;
    }
    
    }
    
    

    le seul problème restant est que les drop sont toujours une seul tomate.
    quelqu'un aurait une solution ?


  • Administrateurs

    Il faut gérer ça avec la fonction quantityDropped



  • voila se que j'ai fait mais  quand la plante est en état final le drop est toujours de 1 :

    public int quantityDropped(Random random, int meta)
    {
    if(meta > 1)
    {
    return 3;
    }
    else
    {
    return 1;
    }
    


  • Tu veux faire quoi en fait ? tu veux modifier le nombre d'item drop ? mais tu veux le faire aléatoirement ?



  • non je veux juste le modifier pas en aléatoire mais dans l'état actuel du code quand je case la plante peut importe l'étape de la plante le drop est 1 seul tomate.



  • Ahh en fonction de la hauteur de ton bloc tu veux drop plus d'item d'accord.

    Je t'avoue que je sais pas trop a quoi correspond l'Integer meta, essaye de faire un System.out.println(meta); dans la fonction quantityDropped


  • Administrateurs

    Il y a deux variantes de la fonction damageDropped.
    Celle-ci :

    public int quantityDropped(Random p_149745_1_)
    {
    return 1;
    }
    

    Ou celle-ci :

    public int quantityDropped(int meta, int fortune, Random random)
    {
    /**
    * Returns the usual quantity dropped by the block plus a bonus of 1 to 'i' (inclusive).
    */
    return quantityDroppedWithBonus(fortune, random);
    }
    

    public int quantityDropped(Random random, int meta) n'existe pas.



  • je ne vois pas trop comment utiliser se code un exemple serait il possible ?


  • Administrateurs

    C'est une blague ?

    public int quantityDropped(int meta, int fortune, Random random)
    {
    if(meta > 1)
    {
    return 3;
    }
    return 1;
    }
    


  • non j'ai voulu chercher compliqué la ou il n'y avait pas lieu d'être en effet comme sa le code parait logique