package tc.oc.pgm.tablist;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import tc.oc.commons.core.scheduler.Task;
import tc.oc.commons.bukkit.tablist.DynamicTabEntry;
import tc.oc.commons.bukkit.tablist.TabView;
import tc.oc.commons.core.chat.Component;
import tc.oc.commons.core.formatting.PeriodFormats;
import tc.oc.pgm.Config;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.MatchScope;
import tc.oc.pgm.PGMTranslations;
import tc.oc.commons.core.util.DefaultProvider;
import javax.annotation.Nullable;
public class MatchFooterTabEntry extends DynamicTabEntry {
public static class Factory implements DefaultProvider<Match, MatchFooterTabEntry> {
@Override
public MatchFooterTabEntry get(Match key) {
return new MatchFooterTabEntry(key);
}
}
private final Match match;
private @Nullable Task tickTask;
public MatchFooterTabEntry(Match match) {
this.match = match;
}
@Override
public void addToView(TabView view) {
super.addToView(view);
if(this.tickTask == null) {
Runnable tick = new Runnable() {
@Override public void run() {
MatchFooterTabEntry.this.invalidate();
}
};
this.tickTask = match.getScheduler(MatchScope.LOADED).createRepeatingTask(5, 20, tick);
}
}
@Override
public void removeFromView(TabView view) {
super.removeFromView(view);
if(!this.hasViews() && this.tickTask != null) {
this.tickTask.cancel();
this.tickTask = null;
}
}
@Override
public BaseComponent getContent(TabView view) {
Component content = new Component(ChatColor.DARK_GRAY);
String datacenter = Config.PlayerList.datacenter();
String server = Config.PlayerList.server();
if(datacenter != null) {
content.extra(new Component(datacenter, ChatColor.WHITE, ChatColor.BOLD),
new Component(" - "));
}
content.extra(new Component(PGMTranslations.get().t("command.match.matchInfo.time", view.getViewer()) + ": ", ChatColor.GRAY),
new Component(PeriodFormats.formatColons(this.match.runningTime()), this.match.isRunning() ? ChatColor.GREEN : ChatColor.GOLD));
if(server != null) {
content.extra(new Component(" - "),
new Component(server, ChatColor.WHITE, ChatColor.BOLD));
}
return content;
}
}