Résolu Faire changer un item avec un clique droit sur un block
-
Oui, l’index du slot concerné, qu’on obtient grâce à la variable currentItem, précédemment énoncé.
-
comme ça ?
package com.tuto.mod.blocks; import com.tuto.mod.init.ItemsMod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; public class MachineMod extends Block { public MachineMod(Material materialIn) { super(materialIn); setResistance(3F); setHardness(3F); setHarvestLevel("pickaxe", 1); } public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { if(player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() == ItemsMod.supT) { player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(ItemsMod.dust)); } else { player.addChatMessage(new TextComponentString("L'item n'est pas le bon")); } } }
-
Je teste et je te réponds
Essaye de faire ça :player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(ItemsMod.dust));
-
non ça ne fonctionne pas, ce n’est pas ça alors… je vois pas vraiment quoi mettre en tant qu’index
C’est exactement ce que j’ai mit avant ;D Et sinon non toujours pas
-
Moi de mon coté en 1.7.10 l’item est remplacé pendant un millième de seconde
et toi ? -
Je ne peu pas lancer le jeu ! c’est ça le probleme ;D
la fonction OnBlockActivated demande un return en false, ce qui ne fonctionne alors pas :d -
Crash report ?
EDIT : essaie de retourner en true
-
Ok deja le jeu ce lance, c’est bien ça ! j’avais juste mal fait ma déclaration de block, deux block register au meme id …
Mais en jeu, cela ne fait absolument rien … meme pas le message
Je rappellepackage com.tuto.mod.blocks; import com.tuto.mod.init.ItemsMod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; public class MachineMod extends Block { public MachineMod(Material materialIn) { super(materialIn); setResistance(3F); setHardness(3F); setHarvestLevel("pickaxe", 1); } public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { if(player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() == ItemsMod.supT) { player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(ItemsMod.dust)); } else { player.addChatMessage(new TextComponentString("L'item n'est pas le bon")); } } }
-
rajoute un return true avant la dernière accolade
-
Je l’ai deja fait avant et ca ne fonctionne pas, c’est pour ça que je l’ai delete
-
Essaie de le mettre et envoie moi ton crash report
-
Je n’ai pas de crash, Ni d’erreur dans les logs …
-
Ajoutes un @Override au dessus de la fonction, si tu as une erreur tu n’as pas les bon arguments.
-
Avec ou sans le return ?
-
Avec, une fonction de type boolean doit forcement avoir un return.
-
en return quoi ?
return true ?et j’ai l’erreur avec le @Override, je ne vois pas pourquoi et comment changé ceci, je pense que cela vien de ça
player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(ItemsMod.dust));
mais je ne sais pas pourquoi ;C
le code actuel
package com.tuto.mod.blocks; import com.tuto.mod.init.ItemsMod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; public class MachineMod extends Block { public MachineMod(Material materialIn) { super(materialIn); setResistance(3F); setHardness(3F); setHarvestLevel("pickaxe", 1); } @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { if(player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() == ItemsMod.supT) { player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(ItemsMod.dust)); } else { player.addChatMessage(new TextComponentString("L'item n'est pas le bon")); } return true; } }
-
Si tu as une erreur, c’est que tu n’as pas implémenté la bonne fonction, essaie de prendre la bonne cette fois-ci.
Si tu n’es pas sûr d’y arriver, tu peux aller dans Source -> Override/Implement methods… -
je viens de regarder, il y a aussi la fonction onBlockClicked, est-elle mieux approprié ?
J’essaye quelque chose, je vous dit si cela fonctionne
[EDIT]
Cela fonctionne merci !
et par contre, quand je n’ai pas d’item ou le mauvais, cela spam le chat, il faudrait rajouter quelque chose apres du style attendre 1 seconde Mais comment faire ? -
onBlockActivated -> Clic droit
onBlockClicked -> Clic gauche