Résolu Probleme résolu + explication a bush à XP
-
Envoies ton code actuelle.
-
Voila voila
package fr.xperiaonline.xperiamod.common; import java.util.List; import java.util.Random; import javax.swing.Icon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockModBush extends Block { public static String[] subBlock = new String[]{"block1", "block2"}; public IIcon[] iconArray = new IIcon[subBlock.length]; protected BlockModBush() { super(Material.rock); this.setTickRandomly(true); } public void updateTick(World world, int x, int y, int z, Random rand) { if(world.getBlockMetadata(x, y, z) < 2) world.setBlock(x, y, z, this, world.getBlockMetadata(x, y, z) + 1, 1); } public int tickRate(World world) { return 1; // nombre à changer ici } public int damageDropped(int metadata) { return metadata; } public void getSubBlocks(Item item, CreativeTabs tabs, List list) { for(int i = 0; i < subBlock.length; i++) { list.add(new ItemStack(item, 1, i)); } } public void registerBlockIcons(IIconRegister iconRegister) { for(int i = 0; i < subBlock.length; i++) { this.iconArray* = iconRegister.registerIcon("xperiamod:"+ subBlock*); } } public IIcon getIcon(int side, int metadata) { if(metadata >= 0 && metadata < subBlock.length) { return this.iconArray[metadata]; } return this.iconArray[0]; } }
-
étrange, il n’y a pas de raison pour que le metadata passe au dessus de 3 …
-
Non mais elle reste entre 1 et 2 sauf que elle repasse de 2 a 1… j’aimerais que ça ne se fasse pas. Et que ça se fasse seulement quand on fait un clic droit.
-
ça ne devrait le faire non plus, c’est ça qui est étrange.
-
Pourtant j’ai suivie ton code parfaitement…
-
Effectivement il ne devrais pas continuer à augmenter, tu ne t’es pas trompé dans les textures sans faire exprès ?
-
non mais il n’augmentent pas ! Il reviens au dépard !___Vous voulez mes sources ?
-
Si ton code à changé depuis que tu l’a posté il y a une heure, oui.
PS : double post attention. -
Je vous le mets sur qu’elle site ?
-
Comme tu veux, MediaFire par exemple.
-
Sinon zip -> pièce jointe.
-
-
Les textures du metadata 0, 2, et 3 sont identiques.
Il n’y a que le 1 qui est différent.
Pas étonnant que tu ai l’impression que ça revient à 0 …Et tu avais le mauvais flag (1 au lieu de 3) pour le setBlock, du-coup le bloc n’était pas actualisé.
package fr.xperiaonline.xperiamod.common; import java.util.List; import java.util.Random; import javax.swing.Icon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockModBush extends Block { public static String[] subBlock = new String[] {"block1", "block2"}; public IIcon[] iconArray = new IIcon[subBlock.length]; protected BlockModBush() { super(Material.rock); this.setTickRandomly(true); } public void updateTick(World world, int x, int y, int z, Random rand) { if(world.getBlockMetadata(x, y, z) < 2) { world.setBlock(x, y, z, this, world.getBlockMetadata(x, y, z) + 1, 3); } } public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if(world.getBlockMetadata(x, y, z) == 3) { world.setBlock(x, y, z, this, 0, 3); this.dropBlockAsItem(world, x, y, z, new ItemStack(Items.diamond)); } return false; } public int tickRate(World world) { return 1; } public int damageDropped(int metadata) { return metadata; } public void getSubBlocks(Item item, CreativeTabs tabs, List list) { for(int i = 0; i < subBlock.length; i++) { list.add(new ItemStack(item, 1, i)); } } public void registerBlockIcons(IIconRegister iconRegister) { for(int i = 0; i < subBlock.length; i++) { this.iconArray* = iconRegister.registerIcon("xperiamod:" + subBlock*); } } public IIcon getIcon(int side, int metadata) { if(metadata >= 0 && metadata < subBlock.length) { return this.iconArray[metadata]; } return this.iconArray[0]; } }
-
Et donc pour faire en sorte que je puisse récupérer un item en faisant un clic droit dessus a la 2 eme metadata je doit faire quoi ?
-
if(world.getBlockMetadata(x, y, z) == 1) { world.setBlock(x, y, z, this, 0, 3); this.dropBlockAsItem(world, x, y, z, new ItemStack(Items.diamond)); }
?
-
Deuxième ou troisième ?
Dans le code que je t’ai donné si tu fais un clic droit sur le bloc lorsque son metadata est 3 il revient à 0 et drop un diamant. -
Non 3 eme désolé mais ça marche pas…
ADIT : Si ça marche mais pas avec la texture de ma 3 eme metadata
Je vais voir si je peux y changer quelque chose avec la textureMais c’est bizard malgré tout.
-
Oublie pas que le 0 est aussi un metadata possible
-
Okay ; donc j’ai rajouté une texture
public static String[] subBlock = new String[] {"block0", "block1","block2"};
J’ai ajouter le “block0”.
J’ai actuellement mes 3 block avec
-la première texture qui est celle ci pour “block0”:-la deuxieme texture qui est celle ci pour “block1”:
- et pour finir la troisieme texture qui est celle ci pour “block2”:
sauf que j’ai beau faire clic droit dans chacun des stades d’évolution de la texture mais je ne drop rien.
Pourtant le code comprend bien que je dois cliquer parce que la texture bloque a la 3 eme.Des idées pour résoudre ça ?
- et pour finir la troisieme texture qui est celle ci pour “block2”: