Résolu 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 ? -
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
-
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 ?
-
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