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

315 lines
9.2 KiB
Java

package eu.univento.core.api.player;
import eu.univento.core.Core;
import eu.univento.core.api.database.MySQL;
import org.bukkit.Color;
import org.bukkit.scoreboard.NameTagVisibility;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
/**
* some permission management
* @author joethei
* @version 1.0
*/
public class Perms{
/**
* contains all joined players and there ranks
*/
private static HashMap<CustomPlayer, Ranks> ranks = new HashMap<>();
/**
* gets ranks
* @return HashMap<CustomPlayer, Ranks>
*/
public static HashMap<CustomPlayer, Ranks> getRanks() {
return ranks;
}
/**
* gets the prefix of a player
* @param r Ranks
* @return String
*/
static String getPrefix(Ranks r) {
switch(r) {
case Admin: return "§8[§4Admin§8]§4 ";
case SrDeveloper: return "§8[§3Dev+§8]§3 ";
case Developer: return "§8[§3Dev§8]§3 ";
case SrModerator: return "§8[§cSrMod§8]§c ";
case HeadBuilder: return "§8[§aHead-Builder§8]§a ";
case Moderator: return "§8[§cMod§8]§c ";
case Builder: return "§8[§2Builder§8]§2 ";
case Supporter: return "§8[§9Supporter§8]§9 ";
case Youtuber: return "§5";
case Premium: return "§6";
case Player: return "§e";
default: return "§cFehler ";
}
}
/**
* gets the suffix of a player
* @param r Ranks
* @return String
*/
static String getSuffix(Ranks r) {
switch(r) {
case Admin: return "§8 »§7 ";
case SrDeveloper: return "§8 »§7";
case Developer: return "§8 »§7 ";
case SrModerator: return "§8 »§7 ";
case HeadBuilder: return "§8 »§7 ";
case Moderator: return "§8 »§7 ";
case Builder: return "§8 »§7 ";
case Supporter: return "§8 »§7 ";
case Youtuber: return "§8 »§7 ";
case Premium: return "§8 »§7 ";
case Player: return "§8 »§7 ";
default: return "§cFehler";
}
}
/**
* gets color of a player
* @param r Ranks
* @return String
*/
static String getColor(Ranks r) {
switch(r) {
case Admin: return "§4";
case SrDeveloper: return "§3";
case Developer: return "§3";
case SrModerator: return "§c";
case HeadBuilder: return "§a";
case Moderator: return "§c";
case Builder: return "§2";
case Supporter: return "§9";
case Youtuber: return "§5";
case Premium: return "§6";
case Player: return "§e";
default: return "§cFehler";
}
}
static Color getArmorColor(Ranks r) {
switch (r) {
case Admin: return Color.MAROON;
case SrDeveloper: return Color.TEAL;
case Developer: return Color.TEAL;
case SrModerator: return Color.RED;
case HeadBuilder: return Color.LIME;
case Moderator: return Color.RED;
case Builder: return Color.GREEN;
case Supporter: return Color.PURPLE;
default: return null;
}
}
/**
* contains all scoreboard ranks
* @author joethei
* @version 1.0
*/
public static class Teams {
CustomPlayer player;
public Scoreboard board;
public Team Admin;
public Team SrDeveloper;
public Team Developer;
public Team SrModerator;
public Team Moderator;
public Team HeadBuilder;
public Team Builder;
public Team Supporter;
public Team Youtuber;
public Team Premium;
public Team Player;
public Teams(CustomPlayer player) {
this.player = player;
board = player.getScoreboard();
Admin = board.getTeam("a");
SrDeveloper = board.getTeam("b");
Developer = board.getTeam("c");
SrModerator = board.getTeam("d");
HeadBuilder = board.getTeam("e");
Moderator = board.getTeam("f");
Builder = board.getTeam("g");
Supporter = board.getTeam("h");
Youtuber = board.getTeam("i");
Premium = board.getTeam("j");
Player = board.getTeam("k");
}
/**
* returns scoreboard team for rank
* @param p CustomPlayer
* @return Team
*/
public static Team getTeam(CustomPlayer p) {
Teams teams = new Teams(p);
switch(p.getRank()) {
case Admin: return teams.Admin;
case SrDeveloper: return teams.SrDeveloper;
case Developer: return teams.Developer;
case SrModerator: return teams.SrModerator;
case HeadBuilder: return teams.HeadBuilder;
case Moderator: return teams.Moderator;
case Builder: return teams.Builder;
case Supporter: return teams.Supporter;
case Youtuber: return teams.Youtuber;
case Premium: return teams.Premium;
case Player: return teams.Player;
default: return null;
}
}
}
/**
* setup scoreboards
*/
public static void initScoreboard(CustomPlayer p) {
Scoreboard board = p.getScoreboard();
board.getTeams().forEach(Team::unregister);
Team Admin = board.registerNewTeam("a");
Team SrDeveloper = board.registerNewTeam("b");
Team Developer = board.registerNewTeam("c");
Team SrModerator = board.registerNewTeam("d");
Team HeadBuilder = board.registerNewTeam("e");
Team Moderator = board.registerNewTeam("f");
Team Builder = board.registerNewTeam("g");
Team Supporter = board.registerNewTeam("h");
Team Youtuber = board.registerNewTeam("i");
Team Premium = board.registerNewTeam("j");
Team Player = board.registerNewTeam("k");
Admin.setPrefix(getColor(Ranks.Admin));
SrDeveloper.setPrefix(getColor(Ranks.SrDeveloper));
Developer.setPrefix(getColor(Ranks.Developer));
SrModerator.setPrefix(getColor(Ranks.SrModerator));
HeadBuilder.setPrefix(getColor(Ranks.HeadBuilder));
Moderator.setPrefix(getColor(Ranks.Moderator));
Builder.setPrefix(getColor(Ranks.Builder));
Supporter.setPrefix(getColor(Ranks.Supporter));
Youtuber.setPrefix(getColor(Ranks.Youtuber));
Premium.setPrefix(getColor(Ranks.Premium));
Player.setPrefix(getColor(Ranks.Player));
Admin.setNameTagVisibility(NameTagVisibility.ALWAYS);
SrDeveloper.setNameTagVisibility(NameTagVisibility.ALWAYS);
Developer.setNameTagVisibility(NameTagVisibility.ALWAYS);
SrModerator.setNameTagVisibility(NameTagVisibility.ALWAYS);
HeadBuilder.setNameTagVisibility(NameTagVisibility.ALWAYS);
Moderator.setNameTagVisibility(NameTagVisibility.ALWAYS);
Builder.setNameTagVisibility(NameTagVisibility.ALWAYS);
Supporter.setNameTagVisibility(NameTagVisibility.ALWAYS);
Youtuber.setNameTagVisibility(NameTagVisibility.ALWAYS);
Premium.setNameTagVisibility(NameTagVisibility.ALWAYS);
Player.setNameTagVisibility(NameTagVisibility.ALWAYS);
}
/**
* gets Rank of player
* @param p Player
* @return Ranks
* @throws ClassNotFoundException Class couldn't be found
* @throws SQLException SQL server not available or throwing error
*/
static Ranks getRank(CustomPlayer p) throws ClassNotFoundException, SQLException {
if(getRanks().get(p) != null) {
return getRanks().get(p);
}else {
return getRankFresh(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
*/
static Ranks getRankFresh(CustomPlayer p) throws SQLException, ClassNotFoundException {
MySQL sql = Core.returnSQL();
sql.openConnection();
String uuid = p.getUniqueId().toString();
PreparedStatement st = sql.getConnection().prepareStatement("SELECT * FROM users WHERE UUID= '" + uuid + "';");
ResultSet rs = st.executeQuery();
if(rs.next()) {
String rank = rs.getString("Rank");
sql.closeConnection();
return Ranks.valueOf(rank);
}else {
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
*/
static void setRank(CustomPlayer p, Ranks r) throws ClassNotFoundException, SQLException {
MySQL sql = Core.returnSQL();
sql.openConnection();
PreparedStatement st = sql.getConnection().prepareStatement("UPDATE users SET Rank='" + r.toString() + "' WHERE ID='" + p.getID() + "';");
st.execute();
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
*/
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;
}
/**
* contains all ranks
* @author joethei
* @version 1.0
*/
public static enum Ranks{
Admin(11),
SrDeveloper(10),
Developer(9),
SrModerator(8),
HeadBuilder(7),
Moderator(6),
Builder(5),
Supporter(4),
Youtuber(3),
Premium(2),
Player(1);
public final int value;
private Ranks(int n) {
this.value = n;
}
}
}