Résolu Comment faire pour qu'un item puisse retirer un block
-
Bonsoir,
Je vient vers vous pour vous demandez de l’aide. Voilà après plusieurs tentatives de ma part pour faire en sorte que mon item puisse retirer un block avec la fonction onItemRightClick, mais je n’arrive pas à faire fonctionner.
Voici la classe de l’item :
package fr.vesperia.vesperiamod.items.tools; import fr.vesperia.vesperiamod.VesperiaMod; import fr.vesperia.vesperiamod.init.ModItems; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; public class ItemBreakerObsidian extends Item { public ItemBreakerObsidian(String name) { setRegistryName(name); setUnlocalizedName(name); maxStackSize = 1; setMaxDamage(100); setCreativeTab(VesperiaMod.Modtab); ModItems.instance.getItems().add(this); } public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { } }
Merci d’avance
-
Salut !
C’est assez simple : tu vérifies si le monde n’est pas client :!world.isRemote
puis tu faisworld.destroyBlock(BlockPos, dropBlock);
mais utilise la fonctiononItemUse
car cette fonction s’executes quand tu click sur un block et te donnes aussi la position du block -
@Eno_gamer10 a dit dans Comment faire pour qu'un item puisse retirer un block :
world.destroyBlock(BlockPos, dropBlock);
C’est ce que j’ai fait plus ou moins, mais je souhaite faire en sorte que l’item casse un block en particulier et aussi qui permet de la durabilité.
Voici le code que j’ai fait :
import fr.vesperia.vesperiamod.VesperiaMod; import fr.vesperia.vesperiamod.init.ModItems; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class ItemBreakerObsidian extends Item { public ItemBreakerObsidian(String name) { setRegistryName(name); setUnlocalizedName(name); maxStackSize = 1; setMaxDamage(100); setCreativeTab(VesperiaMod.Modtab); ModItems.instance.getItems().add(this); } @Override public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if(!worldIn.isRemote) { worldIn.destroyBlock(pos.offset(facing), false); } return super.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); } }
Merci pour ton aide.
-
Pour faire ça tu check le block à la position comme ça :
if(world.getBlockState(BlockPos).getBlock() == Blocks.OBSIDIAN)
Puis pour enlever de la durabilité tu fais comme ça :
player.getHeldItemMainhand().damageItem(1, player);
Ici l’itemstack va avoir 1 en moins dans sa durabilité mais met bien cette fonction dans la condition sinon meme quand le block ne sera pas celui que tu voudras l’item va être cassé
-
@Eno_gamer10 a dit dans Comment faire pour qu'un item puisse retirer un block :
player.getHeldItemMainhand().damageItem(1, player);
Alors ça enlève la durabilité et ça fait l’action, mais le block ne ce retire pas.
-
pourquoi
pos.offset(facing)
? justepos
Tu peux me montrer ton code ? -
Oui c’est moi je suis bête, mais merci beaucoup ça fonctionne.
Passe une bonne soirée à toi.