From 61e2f1a0c363061b7ede37dcd04e0b352d17a6ac Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Fri, 19 Sep 2014 22:02:29 +0200 Subject: [PATCH] Fix break-speed not taking harvest-tool for blocks into account (-> doesn't work with custom materials) and AOE tools not taking it into account either. --- .../library/tools/AOEHarvestTool.java | 3 ++- .../tconstruct/library/tools/HarvestTool.java | 27 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/tconstruct/library/tools/AOEHarvestTool.java b/src/main/java/tconstruct/library/tools/AOEHarvestTool.java index a79748aefbd..34bf19ba649 100644 --- a/src/main/java/tconstruct/library/tools/AOEHarvestTool.java +++ b/src/main/java/tconstruct/library/tools/AOEHarvestTool.java @@ -30,7 +30,8 @@ public AOEHarvestTool(int baseDamage, int breakRadius, int breakDepth) { public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player) { // only effective materials matter. We don't want to aoe when beraking dirt with a hammer. Block block = player.worldObj.getBlock(x,y,z); - if(block == null || !isEffective(block.getMaterial())) + int meta = player.worldObj.getBlockMetadata(x,y,z); + if(block == null || !isEffective(block, meta)) return super.onBlockStartBreak(stack, x,y,z, player); boolean originalBlock = true; diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index ff67101374b..7e211dbff55 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -62,20 +62,9 @@ public float getDigSpeed (ItemStack stack, Block block, int meta) if (tags.getBoolean("Broken")) return 0.1f; - Material[] materials = getEffectiveMaterials(); - for (int i = 0; i < materials.length; i++) - { - if (materials[i] == block.getMaterial()) - { - return calculateStrength(tags, block, meta); - } - } - if (this.getHarvestType().equals(block.getHarvestTool(meta)) && block.getHarvestLevel(meta) > 0) - { - return calculateStrength(tags, block, meta); // No issue if the - // harvest level is - // too low - } + if(isEffective(block, meta)) + return calculateStrength(tags, block, meta); + return super.getDigSpeed(stack, block, meta); } @@ -125,6 +114,14 @@ public String[] getTraits () protected abstract String getHarvestType (); + public boolean isEffective (Block block, int meta) + { + if(this.getHarvestType().equals(block.getHarvestTool(meta))) + return true; + + else return isEffective(block.getMaterial()); + } + public boolean isEffective (Material material) { for (Material m : getEffectiveMaterials()) @@ -226,7 +223,7 @@ protected void breakExtraBlock(World world, int x, int y, int z, int sidehit, En int meta = world.getBlockMetadata(x, y, z); // only effective materials - if (!isEffective(block.getMaterial())) + if (!isEffective(block, meta)) return; // only harvestable blocks that aren't impossibly slow to harvest