Wow I had that idea in the beginning but thought Nah that wont work....
@SubscribeEvent
public void onCropGrow(BonemealEvent event) {
event.setCanceled(true);
World world = event.getWorld();
IBlockState state = event.getBlock();
BlockPos pos = event.getPos();
ItemStack stack = event.getEntityPlayer().getActiveItemStack();
if (state.getBlock() instanceof IGrowable) {
IGrowable igrowable = (IGrowable) state.getBlock();
if (igrowable.canGrow(world, pos, state, world.isRemote)) {
if (!world.isRemote) {
igrowable.grow(world, world.rand, pos, state);
while (igrowable.canGrow(world, pos, state, world.isRemote)) {
igrowable.grow(world, world.rand, pos, state);
}
stack.shrink(1);
}
}
}
}
Let's test this out