MINECRAFT 1.7.10 - Hammer casse la bedrock



  • Hello tous le monde !
    J'ai un petit problème avec mon hammer. Tout fonctionne très bien sauf que je peux arriver a casser de la bedrock.
    En gros je prends de la bedrock, je fais un cube de 3*3 et je place n'importe quel bloc au milieu et pouff la bedrock se casse grace au bloc que j'ai placé au milieu...

    Si quelqu'un pourrait m'aider, ce sertait hyper cool de sa part 🙂 !

    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;
            stack.damageItem(1, 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");
        }
       
    
        
    
    }
    
    


  • yop, ce code est immonde, ya bcp trop de chose inutile dedans, pour ton probleme de bedrock verifie juste si l'outil peut casser se block ya un fonction pour : entityplayer#canHarvestBlock



  • le truc, c'est qu'il ne peut pas casser la bedrock mais il peut grâce au block au milieu qui lieu peut être casser.


  • Administrateurs

    Compléter la condition suivante :

    if(currentBlock.getBlockHardness(world, x + xOffset, y + yOffset, z + zOffset) <= 4.0F) {
            event.setCanceled(false);
    }
    

    Comme ceci :

    if(currentBlock.getBlockHardness(world, x + xOffset, y + yOffset, z + zOffset) <= 4.0F && currentBlock.getBlockHardness(world, x + xOffset, y + yOffset, z + zOffset)  >= 0F) {
            event.setCanceled(false);
    }
    

    réglera le problème.

    Actuellement tu autorise à casse le bloc s'il est en créatif ou si la résistance du bloc est inférieur à 4. Problème, les blocs incassable ont une résistance de -1, il faut donc les exclure en ajoutant une condition vérifiant que la résistance est >= 0.



  • Oulala, vous êtes mes sauveurs, merci beaucoup !

    Vous pouvez passer ce sujet en résolu en espérant que cela puisse aider d'autres gens



  • le passer en resolu c'est a toi de le faire x)


  • Administrateurs