I think the issue is that the Parrot bonus (and a few others) has FeatureBooleans defined, but no FeatureTerrainBooleans. This does not work.
The code in the plot's canHaveBonus function (ignoring the multi-feature version since it is essentially the same but slightly more complicated) goes like this:
Code:
if (getFeatureType() != NO_FEATURE)
{
if (!(GC.getBonusInfo(eBonus).isFeature(getFeatureType())))
{
return false;
}
if (!(GC.getBonusInfo(eBonus).isFeatureTerrain(getTerrainType())))
{
return false;
}
}
When a plot has a feature the "isFeature" checks for a matching FeatureBoolean. However, it then always checks to see if the bonus has a FeatureTerrainBoolean that matches the plot's terrain. So the FeatureBooleans only ever make a bonus valid if there is also a FeatureTerrainBoolean defined (and one that the feature can appear on) since if it does not have one that matches the terrain for the plot the return for the canHaveBonus function is an immediate "false".
I am assuming every place in the code that normally places the bonuses uses that canHaveBonus function, but it might get bypassed somewhere in come cases so there is some slim chance that a bonus that violates that will still sometimes show up every once in a while.
Since the parrot has FeatureBooleans for FEATURE_JUNGLE and FEATURE_SWORD_GRASS, I suggest that it should get FeatureTerrainBooleans of TERRAIN_GRASS at least, and probably also TERRAIN_LUSH, TERRAIN_MUDDY, and perhaps TERRAIN_MARSH.
In addition to parrots, there are 3 other bonuses in the main BonusInfo file that have FeatureBooleans but no FeaterTerrainBooleans:
BONUS_CLAY - this shows up anyway because it also has a TerrainBoolean so it can appear on plains that have no feature, but it is also defined to show up on FEATURE_FLOOD_PLAINS but with no terrain specified it won't do so - I suggest TERRAIN_DESERT and TERRAIN_SCRUB and possibly TERRAIN_DUNES since flood plains can show up on all three of those.
BONUS_GUAVA - also never showing up as it only has a FeatureBoolean
BONUS_KAVA - also never showing up as it only has a FeatureBoolean
Both of those last two should probably get about the same FeatureTerrainBooleans as parrots.