Core/src/eu/univento/core/api/player/Perms.java

239 lines
6.8 KiB
Java

package eu.univento.core.api.player;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.scoreboard.NameTagVisibility;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import eu.univento.core.Core;
import eu.univento.core.api.MySQL;
/**
* some permission management
* @author joethei
* @version 1.0
*/
public class Perms{
private static HashMap<CustomPlayer, Ranks> ranks = new HashMap<CustomPlayer, Ranks>();
public static HashMap<CustomPlayer, Ranks> getRanks() {
return ranks;
}
/**
* gets the prefix of a player
* @param r Ranks
* @return String
*/
public static String getPrefix(Ranks r) {
switch(r) {
case Admin: return "§7[§4Admin§7]§4 ";
case Developer: return "§7[§3Developer§7]§3 ";
case Moderator: return "§7[§cModerator§7]§c ";
case HeadBuilder: return "§7[§aHead-Builder§7]§a ";
case Builder: return "§7[§2Builder§7]§2 ";
case Supporter: return "§7[§bSupporter§7]§b ";
case Youtuber: return "§5";
case Premium: return "§6";
case Spieler: return "§7";
default: return "§cFehler ";
}
}
/**
* gets the suffix of a player
* @param r Ranks
* @return String
*/
public static String getSuffix(Ranks r) {
switch(r) {
case Admin: return " §8» §f§l";
case Developer: return " §8» §f";
case Moderator: return " §8» §f";
case HeadBuilder: return " §8» §f";
case Builder: return " §8» §f";
case Supporter: return " §8» §f";
case Youtuber: return " §8» §f";
case Premium: return " §8» §f";
case Spieler: return " §8» §f";
default: return "§cFehler";
}
}
/**
* gets color of a player
* @param r Ranks
* @return String
*/
public static String getColor(Ranks r) {
switch(r) {
case Admin: return "§4";
case Developer: return "§3";
case Moderator: return "§c";
case HeadBuilder: return "§a";
case Builder: return "§2";
case Supporter: return "§b";
case Youtuber: return "§5";
case Premium: return "§6";
case Spieler: return "§7";
default: return "§cFehler";
}
}
/**
* returns scoreboard team for rank
* @param r Ranks
* @return Team
*/
public static Team getTeam(Ranks r) {
switch(r) {
case Admin: return Teams.Admin;
case Developer: return Teams.Developer;
case Moderator: return Teams.Moderator;
case HeadBuilder: return Teams.HeadBuilder;
case Builder: return Teams.Builder;
case Supporter: return Teams.Supporter;
case Youtuber: return Teams.Youtuber;
case Premium: return Teams.Premium;
case Spieler: return Teams.Spieler;
default: return null;
}
}
/**
* @author joethei
* @version 1.0
*/
public static class Teams {
private static Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
public static Team Admin = board.getTeam("a");
public static Team Developer = board.getTeam("b");
public static Team Moderator = board.getTeam("c");
public static Team HeadBuilder = board.getTeam("d");
public static Team Builder = board.getTeam("e");
public static Team Supporter = board.getTeam("f");
public static Team Youtuber = board.getTeam("g");
public static Team Premium = board.getTeam("h");
public static Team Spieler = board.getTeam("i");
}
/**
* setsup scoreboards
*/
public static void initScoreboard() {
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
Teams.Admin.unregister();
Teams.Developer.unregister();
Teams.Moderator.unregister();
Teams.HeadBuilder.unregister();
Teams.Builder.unregister();
Teams.Supporter.unregister();
Teams.Youtuber.unregister();
Teams.Premium.unregister();
Teams.Spieler.unregister();
Team Admin = board.registerNewTeam("a");
Team Developer = board.registerNewTeam("b");
Team Moderator = board.registerNewTeam("c");
Team HeadBuilder = board.registerNewTeam("d");
Team Builder = board.registerNewTeam("e");
Team Supporter = board.registerNewTeam("f");
Team Youtuber = board.registerNewTeam("g");
Team Premium = board.registerNewTeam("h");
Team Spieler = board.registerNewTeam("i");
Teams.Admin.setPrefix(getColor(Ranks.Admin));
Teams.Developer.setPrefix(getColor(Ranks.Developer));
Teams.Moderator.setPrefix(getColor(Ranks.Moderator));
Teams.HeadBuilder.setPrefix(getColor(Ranks.HeadBuilder));
Teams.Builder.setPrefix(getColor(Ranks.Builder));
Teams.Supporter.setPrefix(getColor(Ranks.Supporter));
Teams.Youtuber.setPrefix(getColor(Ranks.Youtuber));
Teams.Premium.setPrefix(getColor(Ranks.Premium));
Teams.Spieler.setPrefix(getColor(Ranks.Spieler));
}
/**
* gets Rank of player
* @param p Player
* @return Ranks
*/
public static Ranks getRank(CustomPlayer p) {
return getRanks().get(p);
}
/**
* gets Rank of player fresh from database
* @param p Player
* @return Ranks
* @throws ClassNotFoundException Class couldn't be found
* @throws SQLException SQL server not available or throwing error
*/
public static Ranks getRankFresh(CustomPlayer p) throws SQLException, ClassNotFoundException {
MySQL sql = Core.returnSQL();
sql.openConnection();
ResultSet rs = sql.getConnection().createStatement().executeQuery("SELECT * FROM PlayerData WHERE player_uuid='" + p.getUniqueId() + "'");
rs.next();
if (rs.getString("player_uuid") != null) {
String rank = rs.getString("Rank");
Ranks Rank = Ranks.valueOf(rank);
sql.closeConnection();
return Rank;
}
sql.closeConnection();
return null;
}
/**
* sets rank for player
* @param p Player
* @param r Ranks
* @throws ClassNotFoundException Class couldn't be found
* @throws SQLException SQL server not available or throwing error
*/
public static void setRank(CustomPlayer p, Ranks r) throws ClassNotFoundException, SQLException {
MySQL sql = Core.returnSQL();
sql.openConnection();
sql.getConnection().createStatement().execute("UPDATE PlayerData SET Rank='" + r.toString() + "' WHERE player_uuid='" + p.getUniqueId() + "';");
sql.closeConnection();
}
/**
* if player is allowed to do
* @param p Player
* @param r Ranks
* @return true / false
* @throws ClassNotFoundException Class couldn't be found
* @throws SQLException SQL server not available or throwing error
*/
public static boolean isAllowed(CustomPlayer p, Ranks r) throws ClassNotFoundException, SQLException{
Ranks rank;
if(getRank(p) == null) {
rank = getRankFresh(p);
}else {
rank = getRank(p);
}
return rank.value >= r.value;
}
public static enum Ranks{
Admin(9),
Developer(8),
Moderator(7),
HeadBuilder(6),
Builder(5),
Supporter(4),
Youtuber(3),
Premium(2),
Spieler(1);
public final int value;
private Ranks(int n) {
this.value = n;
}
}
}