package net.shockverse.survivalgames.core;
import java.util.HashMap;
import java.util.Map;
import net.shockverse.survivalgames.SurvivalGames;
import net.shockverse.survivalgames.extras.DebugDetailLevel;
import org.bukkit.entity.Player;
/**
* @description Handles debugging for the plugin.
* @author Duker02, LegitModern, Tagette
*/
public class Debug {
private Map<Player, DebugDetailLevel> debugees;
private boolean debugging;
private DebugDetailLevel detailLevel;
private SurvivalGames plugin;
private Settings settings;
public Debug(SurvivalGames instance) {
plugin = instance;
this.settings = plugin.getSettings();
debugging = settings.initialDebug;
debugees = new HashMap<Player, DebugDetailLevel>();
detailLevel = settings.debugLevel;
}
public void disable(){
debugees.clear();
debugees = null;
debugging = false;
}
/*
* Checks is the plugin is in debug mode.
*/
public boolean inDebugMode() {
return !debugees.isEmpty() || debugging;
}
/*
* Checks if a player is in debug mode.
*
* @param player The player to check.
*/
public boolean isDebugging(Player player) {
return debugees.get(player) != null;
}
public void startDebugging() {
if (!inDebugMode())
debugging = Constants.debugAllowed;
}
/*
* Sets a players debug mode.
*
* @param player The player to set the debug mode of.
*/
public void startDebugging(Player player) {
if (Constants.debugAllowed && !isDebugging(player)) {
debugees.put(player, settings.debugLevel);
}
}
public void stopDebugging(Player player) {
if (inDebugMode()) {
debugees.remove(player);
if(debugees.isEmpty())
debugging = false;
}
}
public void stopDebugging(String displayMessage) {
if (inDebugMode()) {
for (Player player : debugees.keySet()) {
player.sendMessage(displayMessage);
}
debugees.clear();
debugging = false;
}
}
public void everything(String message) {
if (inDebugMode()) {
if (DebugDetailLevel.EVERYTHING.compareTo(detailLevel) >= 0) {
Logger.info(message);
}
for (Player player : debugees.keySet()) {
if (DebugDetailLevel.EVERYTHING.compareTo(debugees.get(player)) >= 0) {
player.sendMessage(message);
}
}
}
}
public void normal(String message) {
if (inDebugMode()) {
if (DebugDetailLevel.NORMAL.compareTo(detailLevel) >= 0) {
Logger.info(message);
}
for (Player player : debugees.keySet()) {
if (DebugDetailLevel.NORMAL.compareTo(debugees.get(player)) >= 0) {
player.sendMessage(message);
}
}
}
}
public void important(String message) {
if (inDebugMode()) {
if (DebugDetailLevel.IMPORTANT.compareTo(detailLevel) >= 0) {
Logger.info(message);
}
for (Player player : debugees.keySet()) {
if (DebugDetailLevel.IMPORTANT.compareTo(debugees.get(player)) >= 0) {
player.sendMessage(message);
}
}
}
}
public void setDetailLevel(DebugDetailLevel level){
detailLevel = level;
}
public void setDetailLevel(Player player, DebugDetailLevel detail){
if(isDebugging(player)){
debugees.remove(player);
debugees.put(player, detail);
}
}
}