@Override public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, EntityPlayer player) { if(!ToolHelper.isBroken(itemstack) && this instanceof IAoeTool && ((IAoeTool) this).isAoeHarvestTool()) { for(BlockPos extraPos : ((IAoeTool) this).getAOEBlocks(itemstack, player.getEntityWorld(), player, pos)) { breakExtraBlock(itemstack, player.getEntityWorld(), player, extraPos, pos); } } // this is a really dumb hack. // Basically when something with silktouch harvests a block from the offhand // the game can't detect that. so we have to switch around the items in the hands for the break call // it's switched back in onBlockDestroyed if(DualToolHarvestUtils.shouldUseOffhand(player, pos, player.getHeldItemMainhand())) { ItemStack off = player.getHeldItemOffhand(); switchItemsInHands(player); // remember, off is in the mainhand now NBTTagCompound tag = TagUtil.getTagSafe(off); tag.setLong(TAG_SWITCHED_HAND_HAX, player.getEntityWorld().getTotalWorldTime()); off.setTagCompound(tag); } return breakBlock(itemstack, pos, player); }