Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
209 changes: 94 additions & 115 deletions src/main/java/fr/hashtek/spigot/breakffa/tablist/TablistManager.java
Original file line number Diff line number Diff line change
@@ -1,140 +1,119 @@
package fr.hashtek.spigot.breakffa.tablist;

import fr.hashtek.spigot.hashboard.HashTabList;
import fr.hashtek.spigot.hashboard.exceptions.StrangeException;
import fr.hashtek.hashlogger.HashLoggable;
import fr.hashtek.hashlogger.HashLogger;
import fr.hashtek.spigot.breakffa.BreakFFA;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.simpleyaml.configuration.file.YamlFile;

import java.util.Arrays;
import java.util.List;

public class TablistManager
implements HashLoggable
{

private final BreakFFA main;
private final HashLogger logger;
private final BreakFFA main;
private final HashLogger logger;

private final HashTabList tablist;
private final HashTabList tablist;

private String header;
private String footer;
private String header;
private String footer;


/**
* Creates a new instance of Tablist.
*
* @param main BreakFFA instance
*/
public TablistManager(BreakFFA main)
{
this.main = main;
this.logger = main.getHashLogger();
/**
* Creates a new instance of Tablist.
*
* @param main BreakFFA instance
*/
public TablistManager(BreakFFA main)
{
this.main = main;
this.logger = main.getHashLogger();

this.tablist = new HashTabList();
}
this.tablist = new HashTabList();
}


/**
* Setups the Tablist according to configuration file content.
*
* @param yaml Configuration file content
* @throws NoSuchFieldException Field not found (invalid content)
*/
public void setup(YamlFile yaml)
throws NoSuchFieldException
{
this.logger.info(this, "Loading Tablist...");
/**
* Setups the Tablist according to configuration file content.
*
* @param yaml Configuration file content
* @throws NoSuchFieldException Field not found (invalid content)
*/
public void setup(YamlFile yaml)
throws NoSuchFieldException
{
this.logger.info(this, "Loading Tablist...");

final String prefix = "tablist";
final String prefix = "tablist";

final List<String> requiredKeys = Arrays.asList("", ".header", ".footer");
final List<String> requiredKeys = Arrays.asList("", ".header", ".footer");

for (String key : requiredKeys) {
if (!yaml.contains(prefix + key)) {
throw new NoSuchFieldException("\"" + prefix + key + "\" field not found.");
}
for (String key : requiredKeys) {
if (!yaml.contains(prefix + key)) {
throw new NoSuchFieldException("\"" + prefix + key + "\" field not found.");
}

this.header = ChatColor.translateAlternateColorCodes('&', yaml.getString(prefix + ".header"));
this.footer = ChatColor.translateAlternateColorCodes('&', yaml.getString(prefix + ".footer"));

this.logger.info(this, String.format(
"Successfully loaded tablist.\n" +
"(Header: `%s`, Footer: `%s`)",
this.header, this.footer
));
}

/**
* Refreshes Tablist content
*
* @param minusOnePlayer When disconnecting, put this to true.
*/
public void refresh(boolean minusOnePlayer)
{
int onlinePlayers = this.main.getServer().getOnlinePlayers().size();

if (minusOnePlayer) {
onlinePlayers--;
}
this.header = ChatColor.translateAlternateColorCodes('&', yaml.getString(prefix + ".header"));
this.footer = ChatColor.translateAlternateColorCodes('&', yaml.getString(prefix + ".footer"));

this.tablist.setHeader(this.header);
this.logger.info(this, String.format(
"Successfully loaded tablist.\n" +
"(Header: `%s`, Footer: `%s`)",
this.header, this.footer
));
}

this.tablist.setFooter(
this.footer
.replace("{version}", "v1.0")
.replace("{players}", String.valueOf(onlinePlayers))
.replace("{plural}", onlinePlayers == 1 ? "" : "s")
);
}
/**
* Refreshes Tablist content
*
* @param minusOnePlayer When disconnecting, put this to true.
*/
public void refresh(boolean minusOnePlayer)
{
int onlinePlayers = this.main.getServer().getOnlinePlayers().size();

/**
* Refreshes Tablist content.
*/
public void refresh()
{
this.refresh(false);
if (minusOnePlayer) {
onlinePlayers--;
}

this.tablist.setHeader(this.header);

/**
* Updates the tablist for a Player.
*
* @param player Player
* @throws StrangeException Tablist exception
*/
public void update(Player player)
throws StrangeException
{
this.tablist.update(player);
}
this.tablist.setFooter(
this.footer
.replace("{version}", "v1.0")
.replace("{players}", String.valueOf(onlinePlayers))
.replace("{plural}", onlinePlayers == 1 ? "" : "s")
);
}

/**
* Refreshes Tablist content.
*/
public void refresh()
{
this.refresh(false);
}

/**
* Updates the tablist for every player online.
*
* @throws StrangeException Tablist exception
*/
public void update()
throws StrangeException
{
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
this.update(player);
}
}

/**
* Updates the tablist for a Player.
*
* @param player Player
* @throws StrangeException Tablist exception
*/
public void update(Player player)
throws StrangeException
{
this.tablist.update(player);
}

/**
* @return Tablist
*/
public HashTabList getTablist()
{
return this.tablist;
/**
* Updates the tablist for every player online.
*
* @throws StrangeException Tablist exception
*/
public void update()
throws StrangeException
{
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
this.update(player);
}
}


/**
* @return Tablist
*/
public HashTabList getTablist()
{
return this.tablist;
}