I looked in BlockFlower.java and found:
public boolean canPlace(World world, int i, int j, int k) {
return super.canPlace(world, i, j, k) && this.d_(world.getTypeId(i, j - 1, k));
}
protected boolean d_(int i) {
return i == Block.GRASS.id || i == Block.DIRT.id || i == Block.SOIL.id;
}
I'm not sure if d_ is still called that in forge now, but one of those functions is what you want to override.
(I'm at work now and can't access forge. If you need more help, I'll check it when I get home.)