Minecraft 1.7.10: HAMMER NE PERD PAS DE DURABILITEE



  • Hello tout le monde !
    J'ai créer un Hammer pour mon serveur minecraft. Tout fonctionne bien mais ce dernier ne perd pas du dura. Je pense que ça vient du cancel event que j'ai fais mais je sais vraiment pas comment faire. Si quelqu'un pourrait m'aider, ce serait sympas 🙂 !

    package com.mod.aktezia.items;
    
    import java.util.List;
    import java.util.Set;
    
    import com.google.common.collect.ImmutableSet;
    import com.google.common.collect.Sets;
    
    import net.minecraft.block.Block;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.ItemPickaxe;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.MathHelper;
    import net.minecraft.util.Vec3;
    import net.minecraft.world.World;
    import net.minecraftforge.common.ForgeHooks;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.world.BlockEvent.BreakEvent;
    
    public class ItemHammer extends ItemPickaxe
    {
        
        public ItemHammer(ToolMaterial p_i45347_1_)
        {
            super(p_i45347_1_);
            // TODO Auto-generated constructor stub
        }
    
    
        public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase entity) {
            if(entity instanceof EntityPlayer) {
    
            EntityPlayer player = (EntityPlayer)entity;
    
            Vec3 lookVec = player.getLookVec();
            double xLook = Math.abs(lookVec.xCoord);
            double yLook = Math.abs(lookVec.yCoord);
            double zLook = Math.abs(lookVec.zCoord);
    
    
            double max = Math.max(xLook, Math.max(yLook, zLook));
    
    
    
            int addX = 1;
            int addY = 1;
            int addZ = 1;
    
            if(max == xLook) {
            y -= 1;
            z -= 1;
            addX = 3;
            } else if(max == yLook) {
            x -= 1;
            z -= 1;
            addY = 3;
            } else if(max == zLook) {
            x -= 1;
            y -= 1;
            addZ = 3;
            }
    
            for(int xOffset = 0; xOffset < 3; xOffset += addX) {
            for(int yOffset = 0; yOffset < 3; yOffset += addY) {
            for(int zOffset = 0; zOffset < 3; zOffset += addZ) {
    
            Block currentBlock = world.getBlock(x + xOffset, y + yOffset, z + zOffset);
            int blockMetadata = world.getBlockMetadata(x + xOffset, y + yOffset, z + zOffset);
    
            BreakEvent event = new BreakEvent(x + xOffset, y + yOffset, x + zOffset, world, currentBlock, blockMetadata, (EntityPlayer)player);
            event.setCanceled(!player.capabilities.isCreativeMode);
    
            if(currentBlock.getBlockHardness(world, x + xOffset, y + yOffset, z + zOffset) <= 4.0F) {
            event.setCanceled(false);
            }
    
            MinecraftForge.EVENT_BUS.post(event);
    
            if(!event.isCanceled()) {
            currentBlock.harvestBlock(world, (EntityPlayer)player, x + xOffset, y + yOffset, z + zOffset, blockMetadata);
            world.setBlockToAir(x + xOffset, y + yOffset, z + zOffset);
    
            boolean hasSilk = EnchantmentHelper.getSilkTouchModifier(player);
            boolean canSilk = currentBlock.canSilkHarvest(world, (EntityPlayer)player, x + xOffset, y + yOffset, z + zOffset, blockMetadata);
            if(ForgeHooks.canHarvestBlock(currentBlock, (EntityPlayer)player, blockMetadata) && (!hasSilk || hasSilk && !canSilk)) {
    
            int exp = currentBlock.getExpDrop(world, blockMetadata, EnchantmentHelper.getFortuneModifier(player));
            currentBlock.dropXpOnBlockBreak(world, x + xOffset, y + yOffset, z + zOffset, exp);
            }
            }
            }
            }
            }
            return true;
            }
            return false;
            }
        
        public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par2List, boolean par4)
        {
        par2List.add("\u00A73" + "> Ce marteau permet:");
    
        par2List.add("\u00A7e" + "> De miner en 3*3*1");
        
        par2List.add("\u00A7e" + "> Utile pour le minage");
        }
       
    
        
    
    }
    
    

    Je remercie d'avance les gens qui vont m'aider !


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    Je ne vois aucun event cancel dans ton code.
    Ce que je ne vois pas non plus, c'est du code permettant d’endommager l'item.
    Donc forcement il ne va pas s'abimer.

    De tête, c'est stack.damageItem(entity, 1);



  • Mercii beaucoup, problème régler !


Log in to reply