Résolu Probleme résolu + explication a bush à XP
-
Dans onBlockActivated rajoute ça : System.out.println(world.getBlockMetadata(x, y, z)); qui va afficher le metadata correspondant lorsque tu cliques pour vérifier que ton block a le bon metadata
-
EDIT : C’est bon ça drop maintenant donc sa change de texture.
Mais le probleme c’est que ça continue de drop apres le changement de metadata.
Alors que se n’est pas désiré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[] {"block0","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) System.out.println(world.getBlockMetadata(x, y, z)); { world.setBlock(x, y, z, this, 0, 3); this.dropBlockAsItem(world, x, y, z, new ItemStack(Items.experience_bottle)); } 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]; } }
Mon code est t’il bon ?
-
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) == 2) { world.setBlock(x, y, z, this, 0, 3); this.dropBlockAsItem(world, x, y, z, new ItemStack(Items.experience_bottle)); } return false; }
Il faut faire comme ça.
Actuellement ton dropBlockAsItem et le setBlock ne sont pas dans la condition, tu as mit System.out.println(world.getBlockMetadata(x, y, z)); à l’intérieur de la condition. -
Merci beaucoup !
ça marche impeccable !
EDIT : par contre désormais j’ai 3 blocs dans l’inventaire ça veux dire que quand on va miner on va recupere 2 block different dépendra de la metadata.
Moyen de ne faire en sorte que le block une fois casser soit dropper a l’etat metadata 0 ? -
Enlève ces deux fonctions :
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)); } }
Tu peux aussi retirer l’item bloc.
-
Merci beaucoup !
Et sinon pour créer un item qui peux giver de l’experience.
J’ai trouver ça se matin :
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { event.player.addPotionEffect(new PotionEffect(id, temps, level)); if (!player.capabilities.isCreativeMode) { –stack.stackSize; } return stack; }
Je doit utiliser ça et faire quoi exactement ?
J’ai regarder ton tuto sur faire tes item basique -
player.experience ou player.experienceLevel, ensuite tout dépend de ce que tu veux faire
-
J’aimerais que apres un clic droit sur l’item qu’il soit consommer et donne un certain taux d’xp au joueur.
-
Tu as juste à faire player.experience += XPSSupplementaire dans ta fonction.
Le code que robin t’as demandé de supprimer va permettre juste de ne pas récupérer le block avec le metadata et d’afficher seulement le block avec le metadata 0 en créatif
-
oui je n’ai pas été assez patient
J’ai reediter -
Voila ! Mais petit problème au niveau de :
player.addExperience += 1;
player est en rouge.
-
Où est le problème ?
-
J’ai ecris ça dans la class de mon item
package fr.xperiaonline.xperiamod.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class ItemXpDust { public void onItemRightClick(World world, EntityPlayer player) { player.addExperience(5); } }
Mais ça ne fait rien en jeux enfin j’ai l’item. Mais sa ne me donne pas d’xp
Je suis tellement mauvais xd
-
Rajoute un System.out.println(“quelque chose”) dans ta fonction pour voir si le code est appelé
-
public void onItemRightClick(World world, EntityPlayer player) ``` devient ça : ```java @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
Et rajoutes un “return stack;” à la fin de la fonction.
Tu n’avais pas la bonne fonction, elle n’était donc pas appelée. -
ça ne marche toujours pas
pas d’erreur dans le code mais aucune action en jeu. -
Rajoute un System.out.println(“quelque chose”) dedans pour voir si ta fonction est appelée
PS : as-tu laissé le @Override au-dessus de ta fonction ?
-
Voici le code et ça ne marche toujours pas.
public class ItemXpDust { @Override public ItemStack onItemRightClick(World world, ItemStack stack, EntityPlayer player) { player.addExperience(5); System.out.println("quelque chose"); return stack; } }
-
Est-ce que le “quelque chose” est affiché dans la console ? Si oui -> ta fonction est appelée. Si non -> as-tu bien cliqué sur le bon item ?
-
Rien écris dans la console, et je n’ai qu’un sel item contenant mes caracteres. Donc oui j’ai cliqué sur le bon item.