I agree with @PeterFlom. What matters primarily to the choice of your model is the nature of your response variable. This means you should almost certainly be using a model based on the Poisson distribution. You should check to see if you have overdispersion, and if so account for that. You mention that you have zeros, but that can be fine, if the lambda parameter (which governs the Poisson distribution) is low, so whether that's a problem depends.
The other side of this is that generally no assumptions are being made about the distribution of your explanatory variables, except that they are fixed and known. For example, there is no problem with the fact that
plant coverage is a percentile, you just couldn't use a value outside of the interval $(0,1)$ with your model. Likewise, there is no problem with the fact that
habitat is a factor, and, although I also find using
year as a categorical variable to be weird, it won't really be a problem, either.