55 lines
1.6 KiB
Java
55 lines
1.6 KiB
Java
package tc.oc.pgm.listing;
|
|
|
|
import javax.annotation.Nullable;
|
|
import javax.inject.Inject;
|
|
import javax.inject.Provider;
|
|
import javax.inject.Singleton;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.server.ServerListPingEvent;
|
|
import tc.oc.minecraft.api.event.Enableable;
|
|
import tc.oc.pgm.match.Match;
|
|
|
|
@Singleton
|
|
public class PingListener implements Listener, Enableable {
|
|
|
|
private final Provider<Match> matchProvider;
|
|
private final ListingService listingService;
|
|
|
|
@Inject PingListener(Provider<Match> matchProvider, ListingService listingService) {
|
|
this.matchProvider = matchProvider;
|
|
this.listingService = listingService;
|
|
}
|
|
|
|
@EventHandler
|
|
private void onPing(ServerListPingEvent event) {
|
|
event.getExtra().put("pgm", new Info());
|
|
}
|
|
|
|
private class Info {
|
|
private class Map {
|
|
final String name;
|
|
final @Nullable String icon;
|
|
|
|
private Map(String name, String icon) {
|
|
this.name = name;
|
|
this.icon = icon;
|
|
}
|
|
}
|
|
|
|
final @Nullable String session = listingService.sessionDigest();
|
|
final Map map;
|
|
final int participants;
|
|
final int observers;
|
|
|
|
Info() {
|
|
final Match match = matchProvider.get();
|
|
this.map = new Map(match.getMap().getName(),
|
|
match.getMap().getThumbnailUri().orElse(null));
|
|
this.participants = match.getParticipatingPlayers().size();
|
|
this.observers = match.getObservingPlayers().size();
|
|
}
|
|
}
|
|
}
|