Faire changer un item avec un clique droit sur un block
-
Essaie ceci :
player.inventory.currentItem = new ItemStack(ItemsMod.dust); -
Je le met ou ? Apres le if
-
Dedans
-
Tu le mets là où tu veux voir apparaître ton nouvel item en main. Mais je me suis trompé, currentItem renvoie un integer qui est l’index du slot actuellement occupé. Du coup il faudrait mieux utiliser la méthode InventoryPlayer#setInventorySlotContents, avec en premier argument l’index du slot, puis ensuite l’itemstack. Tu as désormais tous les élément, je te laisse faire !
-
Non, ca ne fonctionne pas, ça dit "type mismatch: cannot convert from ItemStack to int
-
Partage ton code ça a l’air pas compliqué ,je vais essayer de t’aider
-
Euh j’ai pas tout compris … je débute vraiment en modding …
-
Alors ?
EDIT : Ok
-
Attendez un peu, je fait quelque chose, je vous partage le code actuelle dans quelques minutes
Voila
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(new ItemStack(ItemsMod.dust)); } else { player.addChatMessage(new TextComponentString("L item n est pas le bon")); } } }il manque quelque chose entre setInventorySlotContents et new Item stack …
-
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