package in.twizmwaz.cardinal.module.modules.header; import in.twizmwaz.cardinal.Cardinal; import in.twizmwaz.cardinal.GameHandler; import in.twizmwaz.cardinal.chat.ChatConstant; import in.twizmwaz.cardinal.chat.ChatMessage; import in.twizmwaz.cardinal.chat.UnlocalizedChatMessage; import in.twizmwaz.cardinal.event.CycleCompleteEvent; import in.twizmwaz.cardinal.event.MatchEndEvent; import in.twizmwaz.cardinal.module.TaskedModule; import in.twizmwaz.cardinal.module.modules.matchTimer.MatchTimer; import in.twizmwaz.cardinal.rotation.LoadedMap; import in.twizmwaz.cardinal.util.Contributor; import in.twizmwaz.cardinal.util.StringUtils; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLocaleChangeEvent; import java.util.List; public class HeaderModule implements TaskedModule { private final ChatMessage header; private final String message; private int last; public HeaderModule(LoadedMap map) { this.last = 0; this.message = Cardinal.getInstance().getConfig().getString("server-message"); this.header = new UnlocalizedChatMessage(ChatColor.AQUA.toString() + ChatColor.BOLD + map.getName() + ChatColor.RESET.toString() + ChatColor.DARK_GRAY + " {0} {1}", ChatConstant.MISC_BY.asMessage(), assembleAuthors(map.getAuthors())); } @Override public void unload() { HandlerList.unregisterAll(this); } @Override public void run() { if (Math.round(MatchTimer.getTimeInSeconds()) > last) { last = (int) Math.round(MatchTimer.getTimeInSeconds()); for (Player player : Bukkit.getOnlinePlayers()) { updatePlayer(player, player.getLocale()); } } } @EventHandler public void onCycleComplete(CycleCompleteEvent event) { for (Player player : Bukkit.getOnlinePlayers()) { updatePlayer(player, player.getLocale()); } } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { updatePlayer(event.getPlayer(), event.getPlayer().getLocale()); } @EventHandler public void onMatchEnd(MatchEndEvent event) { for (Player player : Bukkit.getOnlinePlayers()) { updatePlayer(player, player.getLocale()); } } @EventHandler public void onLangChange(PlayerLocaleChangeEvent event) { updatePlayer(event.getPlayer(), event.getNewLocale()); } private void updatePlayer(Player player, String locale) { StringBuilder footer = new StringBuilder() .append(ChatColor.BOLD) .append(message) .append(ChatColor.RESET) .append(ChatColor.DARK_GRAY) .append(" - ") .append(ChatColor.GRAY) .append(ChatConstant.UI_TIME.getMessage(locale)) .append(": ") .append(GameHandler.getGameHandler().getMatch().isRunning() ? ChatColor.GREEN : ChatColor.GOLD) .append(StringUtils.formatTime(MatchTimer.getTimeInSeconds())) .append(ChatColor.DARK_GRAY) .append(" - ") .append(ChatColor.WHITE) .append(ChatColor.BOLD) .append("Cardinal"); player.setPlayerListHeaderFooter(new TextComponent(header.getMessage(locale)), new TextComponent(footer.toString())); } private ChatMessage assembleAuthors(List<Contributor> authors) { StringBuilder builder = new StringBuilder(); if (authors.size() == 1) builder.append(ChatColor.GRAY).append(authors.get(0).getName()); else if (authors.size() > 1) { for (Contributor author : authors) { if (authors.indexOf(author) < authors.size() - 2) { builder.append(ChatColor.GRAY).append(author.getName()).append(ChatColor.DARK_GRAY).append(", "); } else if (authors.indexOf(author) == authors.size() - 2) { builder.append(ChatColor.GRAY).append(author.getName()).append(ChatColor.DARK_GRAY).append(" {0} "); } else if (authors.indexOf(author) == authors.size() - 1) { builder.append(ChatColor.GRAY).append(author.getName()); } } } return new UnlocalizedChatMessage(builder.toString(), ChatConstant.MISC_AND.asMessage()); } }