ProjectAres/PGM/src/main/java/tc/oc/pgm/listing/PingListener.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();
}
}
}