**For years growth rate issues have plagued spiggot.**

Where the modifiers seemingly did not effect the server if increased and required significant decrease to reduce.

Today I have discovered why.

**Within "BlockCrops.randomTick", there is an if statement as follows:**

*if (randomsource.nextInt((int)(100.0F/ (float)modifier * (25.0F / f)) + 1 ==0)*

**This is catastrophically wrong.**

The vanilla probability of crop growth is **1/(25 / f +1)**

A modifier to this chance would be **100/Modifier**[1/(25 / f +1)]{*}with 100 being normal growth.

**This is NOT what occurs in the if statement above.**

*(int)(100.0F/ (float)modifier * (25.0F / f))* is where the problem lies.

This value will always come out as an integer rounded down. I hope it is clear to see that, say for a case of modifier = 100 and f = 10

that (int) 100.0F / (float)100 * (25.0F/10) < 1 and hence = 0.

**Hence, most cases (until modifier is equal to or less than 40) the growth chance will always be based on:**

*if (randomsource.nextInt(0 + 1 ==0)*

Hence a 50% chance as a random int between 0 and 1 are chosen. If 0 , then true.

This is a bug that, considering forum posts about the issue, has been persistent for years.

As such I will offer my personal recommendation at a fix below:

**int chancevanilla = (int)(100/(floor(25.0F/f)+1))-1; //%chance in vanilla MC**

**int ModMult = (int)(modifier/100.0F);**

**int chancemod = (int)(chancevanilla*ModMult;**

**if((randomsource.nextInt(99) <= chancemod) // rolls a random integer between 0 and 99 (100 numbers).//** **If chancevanilla or lower is rolled, then true.**

I.e. if chance vanilla == 33 and then the modifier was 200, then chancemod would be 65 and hence have a 66% chance of success (66 choices lead to a true if statement out of the potential 100 ints between 0 and 99)