В Sponge есть такая вещь, как cause stack
. Она содержит в себе цепочку "причины" вызова эвента.
Например игрок включает редстоун схему, схема включается и когда активируется самый последний механизм - он будет содержать в себе игрока, который включил.
Так вот, @Root
возвращает "источник", причину вызова этого эвента.(плюс делает проверку типов)
Например
public void onConnect(ClientConnectionEvent.Join event, @Root Player player) {
// тут код
}
Аналогом этого кода будет это:
public void onConnect(ClientConnectionEvent.Join event) {
Object source = event.getSource(); // Или event.getCause().root();
if (!(source instanceof Player)) {
return;
}
Player player = (Player) source;
// тут код
}
Есть еще такие аннотации-фильтры. Как-нибудь напишу туториал-описание этих аннотаций.