Efficiently return a ChatColor
I'm guessing that you call this method frequently.  If so, you might consider memoizing the result.  Something like 

private Map&lt;Player, ChatColor&gt; playerChatColors = new HashMap&lt;&gt;();


in the class.  Possibly make this static.  And then at the beginning of the method, replace 


    ChatColor color = ChatColor.GRAY;



with 

    ChatColor color = playerChatColors.get(p);
    if (color != null) {
        return color;
    }
    color = ChatColor.GRAY;


And then before the return at the end, add something like 

    playerChatColors.put(p, color);


I don't know if this is faster or not.  In the typical case, it will just do a single hash access.  If that is fast, then it's faster.  If that's slow, then it might not be.  

There's also the problem that if the permissions change, this won't adjust.   I'm assuming that this will be rare enough not to matter.  If that's not so, you might need to find a way to invalidate the caching when permissions change.  Of course, if you invalidate too often, you lose the benefits of caching.  The first call to this method will be slower.  It's the subsequent calls that this might help.