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 ranks = new HashMap<>(); /** * gets ranks * @return HashMap */ public static HashMap 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; } } }