151 lines
4.8 KiB
Java
151 lines
4.8 KiB
Java
package net.anxuiz.tourney;
|
|
|
|
import javax.annotation.Nullable;
|
|
import javax.inject.Inject;
|
|
import javax.inject.Provider;
|
|
|
|
import net.anxuiz.tourney.listener.KDMListener;
|
|
import net.md_5.bungee.api.ChatColor;
|
|
import net.md_5.bungee.api.chat.TranslatableComponent;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.event.HandlerList;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import tc.oc.api.docs.Tournament;
|
|
import tc.oc.api.tourney.TournamentService;
|
|
import tc.oc.api.tourney.TournamentStore;
|
|
import tc.oc.commons.bukkit.chat.Audiences;
|
|
import tc.oc.commons.bukkit.chat.ListComponent;
|
|
import tc.oc.commons.bukkit.inject.BukkitPluginManifest;
|
|
import tc.oc.commons.core.chat.Component;
|
|
import tc.oc.commons.core.concurrent.Flexecutor;
|
|
import tc.oc.inject.ProtectedBinder;
|
|
import tc.oc.minecraft.scheduler.Sync;
|
|
|
|
import static com.google.common.base.Preconditions.checkNotNull;
|
|
|
|
public class Tourney extends JavaPlugin {
|
|
|
|
private static Tourney inst;
|
|
|
|
private @Nullable KDMSession kdmSession;
|
|
private @Nullable KDMListener kdmListener;
|
|
|
|
@Inject private @Sync Flexecutor executor;
|
|
@Inject private TournamentService tournamentService;
|
|
@Inject private TournamentStore tournamentStore;
|
|
@Inject private Audiences audiences;
|
|
@Inject private Provider<Tournament> tournamentProvider;
|
|
@Inject private Provider<MatchManager> matchManagerProvider;
|
|
@Inject private Provider<KDMSession> kdmSessionProvider;
|
|
|
|
public static Tourney get() {
|
|
return checkNotNull(inst);
|
|
}
|
|
|
|
public Tourney() {
|
|
inst = this;
|
|
}
|
|
|
|
@Override
|
|
public boolean isActive() {
|
|
return Config.tournamentID() != null;
|
|
}
|
|
|
|
@Override
|
|
public void configure(ProtectedBinder binder) {
|
|
binder.install(new BukkitPluginManifest());
|
|
binder.install(new TourneyManifest());
|
|
}
|
|
|
|
public Tournament getTournament() {
|
|
return tournamentProvider.get();
|
|
}
|
|
|
|
public void recordMatch(String matchId) {
|
|
executor.callback(
|
|
tournamentService.recordMatch(tournamentProvider.get(), matchId),
|
|
response -> {
|
|
if(!response.entrants().isEmpty()) {
|
|
final TranslatableComponent message = new TranslatableComponent(
|
|
"tourney.recordedMatch",
|
|
new Component(response.match()._id(), ChatColor.AQUA),
|
|
new Component(response.match().map().name(), ChatColor.LIGHT_PURPLE),
|
|
new ListComponent(response.entrants()
|
|
.stream()
|
|
.map(entrant -> new Component(entrant.team().name(), ChatColor.YELLOW)))
|
|
);
|
|
|
|
audiences.get(Bukkit.getConsoleSender()).sendMessage(message);
|
|
audiences.permission(TourneyPermissions.REFEREE).sendMessage(message);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
public boolean isRecordQueued() {
|
|
return matchManagerProvider.get().isRecordQueued();
|
|
}
|
|
|
|
public void setRecordQueued(boolean recordQueued) {
|
|
matchManagerProvider.get().setRecordQueued(recordQueued);
|
|
}
|
|
|
|
public TourneyState getState() {
|
|
return matchManagerProvider.get().getState();
|
|
}
|
|
|
|
public void setState(TourneyState state) {
|
|
matchManagerProvider.get().setState(state);
|
|
}
|
|
|
|
|
|
public @Nullable KDMSession getKDMSession() {
|
|
return this.kdmSession;
|
|
}
|
|
|
|
public void createKDMSession() {
|
|
if(kdmSession == null) {
|
|
getLogger().info("Creating KDM session");
|
|
kdmSession = kdmSessionProvider.get();
|
|
kdmListener = new KDMListener(kdmSession);
|
|
eventRegistry().registerListener(kdmListener);
|
|
}
|
|
}
|
|
|
|
public void clearKDMSession() {
|
|
if(kdmSession != null) {
|
|
eventRegistry().unregisterListener(kdmListener);
|
|
kdmListener = null;
|
|
kdmSession = null;
|
|
}
|
|
}
|
|
|
|
public MatchManager getMatchManager() {
|
|
return matchManagerProvider.get();
|
|
}
|
|
|
|
@Override
|
|
public void onDisable() {
|
|
HandlerList.unregisterAll(this);
|
|
|
|
this.clearKDMSession();
|
|
inst = null;
|
|
}
|
|
|
|
@Override
|
|
public void onEnable() {
|
|
this.getConfig().options().copyDefaults(true);
|
|
this.saveConfig();
|
|
|
|
getLogger().info("Loading tournament " + tournamentProvider.get().name());
|
|
|
|
if (!Config.betterSprintAllowed()) {
|
|
this.getServer().getMessenger().registerIncomingPluginChannel(this, "BSprint", (s, player, bytes) -> player.kickPlayer(
|
|
ChatColor.BLACK + "" + ChatColor.RED + ChatColor.RED + "It looks like you're using BetterSprint.\n\n" +
|
|
ChatColor.RED + "We do not allow BetterSprint to be used for tournament matches.\n\n" +
|
|
ChatColor.RED + "Please re-connect without BetterSprint enabled."
|
|
));
|
|
}
|
|
}
|
|
}
|