315 lines
9.2 KiB
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;
|
|
}
|
|
}
|
|
} |