PlaceholderAPI - A hub for your placeholders

I suppose so, but the issue is that there is much more limited information about CommandSource than there is about Player, so I am unsure about that. I might try to switch to an annotation system similar to how Sponge handles listeners, something like this:

@Placeholder("player")
public Object placeholder(@Source Player player, @Token Optional<String> token) {
    // Placeholder annotation requires id to be specified and to be attached to a method
    // Method can return anything but I am using Object to support a variety of different outputs for one method
    // Source can specify what requirements the placeholder has, for instance CommandSource, Player, Locatable, etc
    ...
}

@Player("sound")
public void sound(@Source Player player) {
    // The only parameter annotation required is @Source, order should be irrelevant
    ...
}

@Placeholder(id = "player", author = "Wundero", version = "1.0", desc = "Relational player placeholders.")
@Relational
public Object relate(@Source CommandSource source, @Observer CommandSource observer, @Token String token) {
    // Relational placeholders register separately from normal ones
    // Token can be String or Optional<String> but if it is String it is nullable
    ...
}

This way might be the best way of handling placeholders as it is more dynamic, but it will definitely take a while to implement. If I am to do the CommandSource change, I am going to do all of this at once.

@dualspiral Any thoughts on this or is this a good way to move forwards?