diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index ec81983..c0656a5 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -28,15 +28,15 @@ import de.steamwar.bungeecore.listeners.ping.PingListener; import de.steamwar.bungeecore.network.BungeeNetworkHandler; import de.steamwar.bungeecore.network.NetworkReceiver; import de.steamwar.bungeecore.network.SWScriptSyntaxForwarder; -import de.steamwar.sql.Punishment; -import de.steamwar.sql.SteamwarUser; -import de.steamwar.sql.UserElo; import de.steamwar.bungeecore.tablist.TablistManager; import de.steamwar.command.SWCommandUtils; import de.steamwar.command.SWTypeMapperCreator; import de.steamwar.command.TabCompletionCache; import de.steamwar.command.TypeMapper; +import de.steamwar.sql.Punishment; +import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.Team; +import de.steamwar.sql.UserElo; import de.steamwar.sql.internal.Statement; import net.md_5.bungee.BungeeCord; import net.md_5.bungee.api.ChatMessageType; @@ -56,9 +56,7 @@ import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -72,9 +70,6 @@ public class BungeeCore extends Plugin { private static BungeeCore instance; - public static final Map serverPermissions = new HashMap<>(); - public static final Map commands = new HashMap<>(); - public static Node local; private ErrorLogger errorLogger; private TablistManager tablistManager; @@ -128,11 +123,6 @@ public class BungeeCore extends Plugin { //new Node.RemoteNode("lx"); } - commands.put("/tp", null); - commands.put("/bc", null); - commands.put("/bauchat", null); - commands.put("/local", null); - new TeamchatCommand(); new MsgCommand(); new RCommand(); @@ -326,12 +316,10 @@ public class BungeeCore extends Plugin { for(final String serverName : servers.getKeys()){ final Configuration server = servers.getSection(serverName); List cmds = server.getStringList("commands"); - serverPermissions.put(serverName, "bungeecore.server." + server.getString("permission")); String cmd = cmds.remove(0); new ServerSwitchCommand( cmd, serverName, - serverPermissions.get(serverName), cmds.toArray(new String[0]) ); if(server.getBoolean("modchecked", false)) { diff --git a/src/de/steamwar/bungeecore/Message.java b/src/de/steamwar/bungeecore/Message.java index 8ff88e7..683b9ed 100644 --- a/src/de/steamwar/bungeecore/Message.java +++ b/src/de/steamwar/bungeecore/Message.java @@ -123,7 +123,7 @@ public class Message { } public static void team(String message, String onHover, ClickEvent onClick, Object... params) { - ChatSender.serverteamReceivers().filter(player -> player.user().getUserGroup().isTeamGroup()).forEach(player -> player.prefixless(message, onHover != null ? new Message(onHover, params) : null, onClick, params)); + ChatSender.serverteamReceivers().forEach(player -> player.prefixless(message, onHover != null ? new Message(onHover, params) : null, onClick, params)); } private final String format; diff --git a/src/de/steamwar/bungeecore/bot/commands/BasicDiscordCommand.java b/src/de/steamwar/bungeecore/bot/commands/BasicDiscordCommand.java index 8dbb58b..16df83d 100644 --- a/src/de/steamwar/bungeecore/bot/commands/BasicDiscordCommand.java +++ b/src/de/steamwar/bungeecore/bot/commands/BasicDiscordCommand.java @@ -20,7 +20,7 @@ package de.steamwar.bungeecore.bot.commands; import de.steamwar.sql.SteamwarUser; -import de.steamwar.sql.UserGroup; +import de.steamwar.sql.UserPerm; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; @@ -45,7 +45,7 @@ public abstract class BasicDiscordCommand extends CommandData { protected boolean testPermission(SlashCommandEvent event) { Member member = event.getMember(); SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong()); - if (steamwarUser == null || (!steamwarUser.getUserGroup().isTeamGroup() && steamwarUser.getUserGroup() != UserGroup.Builder)) { + if (steamwarUser == null || (!steamwarUser.hasPerm(UserPerm.TEAM))) { event.reply("Du hast für " + event.getName() + " keine Rechte oder es existiert keine Verknüpfung für dich.").setEphemeral(true).queue(); return false; } diff --git a/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java b/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java index 844d1e2..c85a438 100644 --- a/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java +++ b/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java @@ -19,7 +19,7 @@ package de.steamwar.bungeecore.bot.config; -import de.steamwar.sql.UserGroup; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.config.Configuration; import java.util.ArrayList; @@ -52,7 +52,7 @@ public class SteamwarDiscordBotConfig { public static String TICKET_CREATED; public static String TICKET_LOG; public static Map TICKET_TYPES; - public static Map RANKS; + public static Map RANKS; public static void loadConfig(Configuration config) { TOKEN = config.getString("token"); @@ -109,7 +109,7 @@ public class SteamwarDiscordBotConfig { RANKS = new HashMap<>(); Configuration ranksSections = config.getSection("ranks"); for (String type : ranksSections.getKeys()) { - RANKS.put(UserGroup.getUsergroup(type), ranksSections.getString(type)); + RANKS.put(UserPerm.valueOf(type.toUpperCase()), ranksSections.getString(type)); } loaded = true; } diff --git a/src/de/steamwar/bungeecore/bot/listeners/DiscordTicketListener.java b/src/de/steamwar/bungeecore/bot/listeners/DiscordTicketListener.java index 525dd08..e41342e 100644 --- a/src/de/steamwar/bungeecore/bot/listeners/DiscordTicketListener.java +++ b/src/de/steamwar/bungeecore/bot/listeners/DiscordTicketListener.java @@ -24,6 +24,7 @@ import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.bot.config.DiscordTicketType; import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.UserPerm; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.MessageBuilder; import net.dv8tion.jda.api.Permission; @@ -141,10 +142,10 @@ public class DiscordTicketListener extends BasicDiscordListener { SteamwarUser user = SteamwarUser.get(player.getUniqueId()); boolean sendMessage; if(user.getDiscordId() == null) { - sendMessage = user.getUserGroup().isCheckSchematics(); + sendMessage = user.hasPerm(UserPerm.CHECK); } else { if(event.getAuthor().getId().equals(user.getDiscordId())) return; - sendMessage = user.getDiscordId().equals(event.getChannel().getTopic()) || user.getUserGroup().isCheckSchematics(); + sendMessage = user.getDiscordId().equals(event.getChannel().getTopic()) || user.hasPerm(UserPerm.CHECK); } if(sendMessage) { Message.sendPrefixless("DISCORD_TICKET_MESSAGE", player, "Zur nachricht", new ClickEvent(ClickEvent.Action.OPEN_URL, event.getMessage().getJumpUrl()), event.getChannel().getName(), event.getAuthor().getName(), event.getMessage().getContentRaw()); diff --git a/src/de/steamwar/bungeecore/bot/util/DiscordRanks.java b/src/de/steamwar/bungeecore/bot/util/DiscordRanks.java index e9ec857..f62dea0 100644 --- a/src/de/steamwar/bungeecore/bot/util/DiscordRanks.java +++ b/src/de/steamwar/bungeecore/bot/util/DiscordRanks.java @@ -42,7 +42,7 @@ public class DiscordRanks { guild.retrieveMemberById(steamwarUser.getDiscordId()).queue(member -> { List roleList = member.getRoles(); Set strings = new HashSet<>(SteamwarDiscordBotConfig.RANKS.values()); - String needed = SteamwarDiscordBotConfig.RANKS.get(steamwarUser.getUserGroup()); + String needed = SteamwarDiscordBotConfig.RANKS.get(steamwarUser.prefix()); for (Role role : roleList) { if (!strings.contains(role.getId())) { continue; diff --git a/src/de/steamwar/bungeecore/commands/AlertCommand.java b/src/de/steamwar/bungeecore/commands/AlertCommand.java index 9eb32d3..7b56870 100644 --- a/src/de/steamwar/bungeecore/commands/AlertCommand.java +++ b/src/de/steamwar/bungeecore/commands/AlertCommand.java @@ -21,6 +21,7 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.bot.SteamwarDiscordBot; +import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.command.SWCommand; import de.steamwar.messages.ChatSender; import net.md_5.bungee.api.ChatColor; @@ -29,7 +30,7 @@ import net.md_5.bungee.api.CommandSender; public class AlertCommand extends SWCommand { public AlertCommand() { - super("alert", "bungeecore.alert", "broadcast", "bbc"); + super("alert", ConnectionListener.ALERT_PERMISSION, "broadcast", "bbc"); } @Register(description = "USAGE_ALERT") diff --git a/src/de/steamwar/bungeecore/commands/BuilderCloudCommand.java b/src/de/steamwar/bungeecore/commands/BuilderCloudCommand.java index 2c3c9a0..90eb22f 100644 --- a/src/de/steamwar/bungeecore/commands/BuilderCloudCommand.java +++ b/src/de/steamwar/bungeecore/commands/BuilderCloudCommand.java @@ -3,6 +3,7 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.ArenaMode; import de.steamwar.bungeecore.BungeeCore; import de.steamwar.bungeecore.ServerStarter; +import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeMapper; import de.steamwar.messages.ChatSender; @@ -21,7 +22,7 @@ public class BuilderCloudCommand extends SWCommand { private final Map versionMap = new HashMap<>(); public BuilderCloudCommand() { - super("buildercloud", "bungeecore.server.team", "builder"); + super("buildercloud", ConnectionListener.BUILDERCLOUD_PERMISSION, "builder"); versionMap.put("15", ServerStarter.Version.SPIGOT_15); versionMap.put("1.15", ServerStarter.Version.SPIGOT_15); diff --git a/src/de/steamwar/bungeecore/commands/JoinmeCommand.java b/src/de/steamwar/bungeecore/commands/JoinmeCommand.java index 073fc80..54d4bec 100644 --- a/src/de/steamwar/bungeecore/commands/JoinmeCommand.java +++ b/src/de/steamwar/bungeecore/commands/JoinmeCommand.java @@ -19,13 +19,13 @@ package de.steamwar.bungeecore.commands; -import de.steamwar.bungeecore.*; -import de.steamwar.sql.BauweltMember; +import de.steamwar.bungeecore.Message; +import de.steamwar.bungeecore.Subserver; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeValidator; -import net.md_5.bungee.api.CommandSender; +import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; public class JoinmeCommand extends SWCommand { @@ -36,7 +36,7 @@ public class JoinmeCommand extends SWCommand { @Register(description = "JOINME_USAGE") public void genericCommand(ProxiedPlayer player) { - if (!player.hasPermission("bungeecore.joinme")) { + if (!SteamwarUser.get(player.getUniqueId()).hasPerm(UserPerm.TEAM)) { Message.send("JOINME_USAGE", player); return; } @@ -50,35 +50,9 @@ public class JoinmeCommand extends SWCommand { Message.send("JOINME_PLAYER_SELF", player); return; } - ServerInfo server = target.getServer().getInfo(); - String serverPerm = BungeeCore.serverPermissions.get(server.getName()); - Subserver subserver = Subserver.getSubserver(target); - if(subserver != null) { - Servertype type = subserver.getType(); - if (type == Servertype.ARENA) { - SubserverSystem.sendPlayer(subserver, player); - } else if (type == Servertype.BAUSERVER) { - Bauserver bauserver = (Bauserver) subserver; - if (bauserver.getOwner().equals(player.getUniqueId()) || - BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) != null) { - SubserverSystem.sendPlayer(subserver, player); - } else { - SubserverSystem.sendDeniedMessage(player, bauserver.getOwner()); - Message.send("JOIN_PLAYER_BLOCK", player); - } - } else if(type == Servertype.BUILDER && !player.hasPermission("bungeecore.server.team")) { - Message.send("JOIN_PLAYER_BLOCK", player); - } else { - SubserverSystem.sendPlayer(subserver, player); - } - }else if(serverPerm != null && !player.hasPermission(serverPerm)){ - Message.send("JOIN_PLAYER_BLOCK", player); - }else if(serverPerm == null && !player.getGroups().contains("team")) { - Message.send("JOIN_PLAYER_BLOCK", player); - }else{ - player.connect(server); - } + Subserver subserver = Subserver.getSubserver(target); + TpCommand.teleport(player, subserver != null ? subserver.getServer() : target.getServer().getInfo()); } @ClassValidator(ProxiedPlayer.class) diff --git a/src/de/steamwar/bungeecore/commands/KickCommand.java b/src/de/steamwar/bungeecore/commands/KickCommand.java index 54a2e49..041e58b 100644 --- a/src/de/steamwar/bungeecore/commands/KickCommand.java +++ b/src/de/steamwar/bungeecore/commands/KickCommand.java @@ -21,6 +21,7 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.BungeeCore; import de.steamwar.bungeecore.Message; +import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; @@ -34,7 +35,7 @@ import java.util.stream.Collectors; public class KickCommand extends SWCommand { public KickCommand() { - super("kick", "bungeecore.kick"); + super("kick", ConnectionListener.KICK_PERMISSION); } @Register(description = "KICK_USAGE") diff --git a/src/de/steamwar/bungeecore/commands/PollresultCommand.java b/src/de/steamwar/bungeecore/commands/PollresultCommand.java index 4951771..4e62b4c 100644 --- a/src/de/steamwar/bungeecore/commands/PollresultCommand.java +++ b/src/de/steamwar/bungeecore/commands/PollresultCommand.java @@ -20,6 +20,7 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.Message; +import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.bungeecore.listeners.PollSystem; import de.steamwar.sql.PollAnswer; import de.steamwar.command.SWCommand; @@ -31,7 +32,7 @@ import java.util.Map; public class PollresultCommand extends SWCommand { public PollresultCommand() { - super("pollresult", "bungeecore.pollresults"); + super("pollresult", ConnectionListener.POLLRESULT_PERMISSION); } @Register diff --git a/src/de/steamwar/bungeecore/commands/PunishmentCommand.java b/src/de/steamwar/bungeecore/commands/PunishmentCommand.java index a4b9189..020a353 100644 --- a/src/de/steamwar/bungeecore/commands/PunishmentCommand.java +++ b/src/de/steamwar/bungeecore/commands/PunishmentCommand.java @@ -22,11 +22,13 @@ package de.steamwar.bungeecore.commands; import com.google.gson.JsonParser; import de.steamwar.bungeecore.BungeeCore; import de.steamwar.bungeecore.Message; +import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.command.SWCommand; import de.steamwar.messages.ChatSender; import de.steamwar.sql.BannedUserIPs; import de.steamwar.sql.Punishment; import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; @@ -114,12 +116,12 @@ public class PunishmentCommand { } public PunishmentCommand(String command, Punishment.PunishmentType punishmentType) { - new SWCommand(command, "bungeecore.ban") { + new SWCommand(command, ConnectionListener.BAN_PERMISSION) { @Register public void genericCommand(ProxiedPlayer player, String toPunish, String date, @ErrorMessage(allowEAs = false, value = "PUNISHMENT_USAGE_REASON") String... message) { SteamwarUser punisher = SteamwarUser.get(player.getUniqueId()); - if (punishmentType.isNeedsAdmin() && !punisher.getUserGroup().isAdminGroup()) { + if (punishmentType.isNeedsAdmin() && !punisher.hasPerm(UserPerm.MODERATION)) { return; } @@ -149,10 +151,10 @@ public class PunishmentCommand { return; } String antiCommand = "un" + command; - new SWCommand(antiCommand, "bungeecore.ban") { + new SWCommand(antiCommand, ConnectionListener.BAN_PERMISSION) { @Register public void genericCommand(ProxiedPlayer player, String toUnpunish) { - if (punishmentType.isNeedsAdmin() && !SteamwarUser.get(player.getUniqueId()).getUserGroup().isAdminGroup()) { + if (punishmentType.isNeedsAdmin() && !SteamwarUser.get(player.getUniqueId()).hasPerm(UserPerm.MODERATION)) { return; } diff --git a/src/de/steamwar/bungeecore/commands/ReplayCommand.java b/src/de/steamwar/bungeecore/commands/ReplayCommand.java index e318938..5f8256c 100644 --- a/src/de/steamwar/bungeecore/commands/ReplayCommand.java +++ b/src/de/steamwar/bungeecore/commands/ReplayCommand.java @@ -23,10 +23,7 @@ import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.inventory.SWItem; import de.steamwar.bungeecore.inventory.SWListInv; import de.steamwar.bungeecore.inventory.SWStreamInv; -import de.steamwar.sql.Fight; -import de.steamwar.sql.Punishment; -import de.steamwar.sql.SchematicType; -import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.*; import de.steamwar.command.SWCommand; import de.steamwar.messages.ChatSender; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -58,7 +55,7 @@ public class ReplayCommand extends SWCommand { if (tMap != null) map = tMap; } - if (user.getUserGroup().isAdminGroup() && click.isShiftClick() && fight.replayExists()) { + if (user.hasPerm(UserPerm.MODERATION) && click.isShiftClick() && fight.replayExists()) { starter.test(mode, map, player).start(); } else if(!fight.replayAllowed()) { sender.system("REPLAY_UNAVAILABLE"); diff --git a/src/de/steamwar/bungeecore/commands/ServerSwitchCommand.java b/src/de/steamwar/bungeecore/commands/ServerSwitchCommand.java index 19974fd..8107a16 100644 --- a/src/de/steamwar/bungeecore/commands/ServerSwitchCommand.java +++ b/src/de/steamwar/bungeecore/commands/ServerSwitchCommand.java @@ -20,17 +20,16 @@ package de.steamwar.bungeecore.commands; import de.steamwar.command.SWCommand; -import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; public class ServerSwitchCommand extends SWCommand { - private String serverName; + private final String serverName; - public ServerSwitchCommand(String cmd, String name, String permission, String... aliases) { - super(cmd, permission, aliases); + public ServerSwitchCommand(String cmd, String name, String... aliases) { + super(cmd, null, aliases); serverName = name; } diff --git a/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java b/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java index e22c68f..b768b1a 100644 --- a/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java +++ b/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java @@ -20,6 +20,7 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.listeners.ChatListener; +import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.command.SWCommand; import de.steamwar.messages.ChatSender; import net.md_5.bungee.api.CommandSender; @@ -27,7 +28,7 @@ import net.md_5.bungee.api.CommandSender; public class ServerTeamchatCommand extends SWCommand { public ServerTeamchatCommand() { - super("stc", "bungeecore.teamchat","serverteamchat"); + super("stc", ConnectionListener.TEAMCHAT_PERMISSION,"serverteamchat"); } @Register(description = "STC_USAGE") diff --git a/src/de/steamwar/bungeecore/commands/TpCommand.java b/src/de/steamwar/bungeecore/commands/TpCommand.java index b4d9399..247062f 100644 --- a/src/de/steamwar/bungeecore/commands/TpCommand.java +++ b/src/de/steamwar/bungeecore/commands/TpCommand.java @@ -20,16 +20,12 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.*; -import de.steamwar.sql.BauweltMember; -import de.steamwar.sql.Punishment; -import de.steamwar.sql.SteamwarUser; -import de.steamwar.sql.Team; +import de.steamwar.sql.*; import de.steamwar.bungeecore.util.BauLock; import de.steamwar.bungeecore.util.Chat19; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeMapper; import de.steamwar.messages.ChatSender; -import de.steamwar.sql.Event; import net.md_5.bungee.BungeeCord; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; @@ -95,48 +91,52 @@ public class TpCommand extends SWCommand { }; } - public static void teleport(ProxiedPlayer player, ServerInfo server){ + public static void teleport (ProxiedPlayer player, ServerInfo server) { ChatSender sender = ChatSender.of(player); if(CheckCommand.isChecking(player)){ sender.system("CHECK_CHECKING"); return; } - String serverPerm = BungeeCore.serverPermissions.get(server.getName()); Subserver subserver = Subserver.getSubserver(server); - - if (subserver != null && subserver.getType() == Servertype.ARENA) { - if (!PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) - SubserverSystem.sendPlayer(subserver, player); - - } else if(subserver instanceof Bauserver) { - Bauserver bauserver = (Bauserver) subserver; - ProxiedPlayer checker = BungeeCord.getInstance().getPlayer(bauserver.getOwner()); - if (checker != null && CheckCommand.isChecking(checker)) { - SteamwarUser steamwarUser = SteamwarUser.get(player.getUniqueId()); - if (steamwarUser.getUserGroup().isCheckSchematics() || CheckCommand.getCheckingSchem(checker).getOwner() == steamwarUser.getId()) { - SubserverSystem.sendPlayer(subserver, player); - } else { - sender.system("JOIN_PLAYER_BLOCK"); - } - }else if (BauLock.isLocked(SteamwarUser.get(bauserver.getOwner()), sender.user())) { - Message.send("BAU_LOCKED_NOALLOWED", player); - }else if (bauserver.getOwner().equals(player.getUniqueId()) || BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) != null) { - SubserverSystem.sendPlayer(subserver, player); - } else { - SubserverSystem.sendDeniedMessage(player, bauserver.getOwner()); - sender.system("JOIN_PLAYER_BLOCK"); - } - - } else if(subserver instanceof Builderserver && !player.hasPermission("bungeecore.server.team")) { - sender.system("JOIN_PLAYER_BLOCK"); - } else if (serverPerm != null && !player.hasPermission(serverPerm)) { - sender.system("JOIN_PLAYER_BLOCK"); - } else if (serverPerm == null && !player.getGroups().contains("team")) { - sender.system("JOIN_PLAYER_BLOCK"); - } else { + if(subserver == null) { player.connect(server); + return; } + + switch (subserver.getType()) { + case ARENA: + if (PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) + return; + break; + + case BAUSERVER: + Bauserver bauserver = (Bauserver) subserver; + ProxiedPlayer checker = BungeeCord.getInstance().getPlayer(bauserver.getOwner()); + if (checker != null && CheckCommand.isChecking(checker)) { + if (!sender.user().hasPerm(UserPerm.CHECK) && CheckCommand.getCheckingSchem(checker).getOwner() != sender.user().getId()) { + sender.system("JOIN_PLAYER_BLOCK"); + return; + } + } else if (BauLock.isLocked(SteamwarUser.get(bauserver.getOwner()), sender.user())) { + sender.system("BAU_LOCKED_NOALLOWED"); + return; + } else if (!bauserver.getOwner().equals(player.getUniqueId()) && BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) == null) { + SubserverSystem.sendDeniedMessage(player, bauserver.getOwner()); + sender.system("JOIN_PLAYER_BLOCK"); + return; + } + break; + + case BUILDER: + if(!sender.user().hasPerm(UserPerm.BUILD)) { + sender.system("JOIN_PLAYER_BLOCK"); + return; + } + break; + } + + SubserverSystem.sendPlayer(subserver, player); } private static ServerInfo getTarget(String arg) { diff --git a/src/de/steamwar/bungeecore/commands/TutorialCommand.java b/src/de/steamwar/bungeecore/commands/TutorialCommand.java index aa27b76..d7bce43 100644 --- a/src/de/steamwar/bungeecore/commands/TutorialCommand.java +++ b/src/de/steamwar/bungeecore/commands/TutorialCommand.java @@ -29,6 +29,7 @@ import de.steamwar.command.SWCommand; import de.steamwar.command.TypeValidator; import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.Tutorial; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -83,9 +84,7 @@ public class TutorialCommand extends SWCommand { @Validator("unreleased") public TypeValidator unreleasedChecker() { - return (sender, value, messageSender) -> { - return (SteamwarUser.get((value).getUniqueId()).getUserGroup().isTeamGroup()); - }; + return (sender, value, messageSender) -> (SteamwarUser.get((value).getUniqueId()).hasPerm(UserPerm.TEAM)); } private void openInventory(ProxiedPlayer player, boolean released, boolean own) { @@ -95,7 +94,7 @@ public class TutorialCommand extends SWCommand { player, Message.parse("TUTORIAL_TITLE", player), (click, tutorial) -> { - if(!released && click.isShiftClick() && user.getUserGroup().isTeamGroup() && user.getId() != tutorial.getCreator()) { + if(!released && click.isShiftClick() && user.hasPerm(UserPerm.TEAM) && user.getId() != tutorial.getCreator()) { tutorial.release(); openInventory(player, released, own); return; diff --git a/src/de/steamwar/bungeecore/commands/WhoisCommand.java b/src/de/steamwar/bungeecore/commands/WhoisCommand.java index 581e618..af50b60 100644 --- a/src/de/steamwar/bungeecore/commands/WhoisCommand.java +++ b/src/de/steamwar/bungeecore/commands/WhoisCommand.java @@ -78,15 +78,15 @@ public class WhoisCommand extends SWCommand { } private static void sendUserinfo(ProxiedPlayer player, SteamwarUser user, EnumSet parameterTypes) { - UserGroup userGroup = SteamwarUser.get(player.getUniqueId()).getUserGroup(); + SteamwarUser sender = SteamwarUser.get(player.getUniqueId()); Message.send("WHOIS_USERNAME", player, user.getUserName()); - Message.send("WHOIS_GROUP", player, user.getUserGroup().getColorCode(), user.getUserGroup().name()); + Message.send("WHOIS_PERMS", player, user.perms().stream().map(Enum::name).collect(Collectors.joining(", "))); Team team = Team.get(user.getTeam()); Message.send("WHOIS_TEAM", player, Message.parse("WHOIS_TEAM_HOVER", player, team.getTeamName()), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team info " + team.getTeamKuerzel()), team.getTeamColor(), team.getTeamKuerzel(), team.getTeamName()); - if (!userGroup.isTeamGroup()) return; + if (!sender.hasPerm(UserPerm.TEAM)) return; - if (userGroup.isAdminGroup()) { + if (sender.hasPerm(UserPerm.MODERATION)) { Message.send("WHOIS_UUID", player, Message.parse("WHOIS_UUID_HOVER", player), new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, user.getUUID().toString()), user.getUUID().toString()); Message.send("WHOIS_ID", player, user.getId()); if (user.getDiscordId() != null) { @@ -153,9 +153,9 @@ public class WhoisCommand extends SWCommand { return new TypeMapper() { @Override public WhoisParameterTypes map(CommandSender commandSender, String[] previousArguments, String s) { - UserGroup userGroup = SteamwarUser.get(((ProxiedPlayer) commandSender).getUniqueId()).getUserGroup(); + SteamwarUser user = SteamwarUser.get(((ProxiedPlayer) commandSender).getUniqueId()); return Stream.of(values) - .filter(p -> p.userGroupSet.contains(userGroup)) + .filter(p -> user.hasPerm(p.perm)) .filter(p -> p.getTabCompletes().contains(s)) .findFirst() .orElse(null); @@ -163,9 +163,9 @@ public class WhoisCommand extends SWCommand { @Override public Collection tabCompletes(CommandSender commandSender, String[] previousArguments, String s) { - UserGroup userGroup = SteamwarUser.get(((ProxiedPlayer) commandSender).getUniqueId()).getUserGroup(); + SteamwarUser user = SteamwarUser.get(((ProxiedPlayer) commandSender).getUniqueId()); return Stream.of(values) - .filter(p -> p.userGroupSet.contains(userGroup)) + .filter(p -> user.hasPerm(p.perm)) .flatMap(p -> p.getTabCompletes().stream()) .collect(Collectors.toList()); } @@ -173,17 +173,17 @@ public class WhoisCommand extends SWCommand { } private enum WhoisParameterTypes { - ALL(Arrays.asList("-a", "-all"), UserGroup.Admin, UserGroup.Moderator, UserGroup.Developer, UserGroup.Supporter, UserGroup.Builder), - MOD(Arrays.asList("-m", "-mod", "-mods"), UserGroup.Admin, UserGroup.Moderator, UserGroup.Developer); + ALL(Arrays.asList("-a", "-all"), UserPerm.TEAM), + MOD(Arrays.asList("-m", "-mod", "-mods"), UserPerm.MODERATION); - private final EnumSet userGroupSet; + private final UserPerm perm; @Getter private List tabCompletes; - WhoisParameterTypes(List tabCompletes, UserGroup... userGroups) { - this.userGroupSet = EnumSet.copyOf(Arrays.asList(userGroups)); + WhoisParameterTypes(List tabCompletes, UserPerm perm) { + this.perm = perm; this.tabCompletes = tabCompletes; } } diff --git a/src/de/steamwar/bungeecore/listeners/BanListener.java b/src/de/steamwar/bungeecore/listeners/BanListener.java index 51ded5c..97165d2 100644 --- a/src/de/steamwar/bungeecore/listeners/BanListener.java +++ b/src/de/steamwar/bungeecore/listeners/BanListener.java @@ -28,6 +28,7 @@ import de.steamwar.sql.BannedUserIPs; import de.steamwar.sql.Punishment; import de.steamwar.sql.SteamwarUser; import de.steamwar.messages.ChatSender; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; @@ -80,7 +81,7 @@ public class BanListener extends BasicListener { + " Bannumgehung"); for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ - if ((target.hasPermission("bungeecore.teamchat")) + if (SteamwarUser.get(target.getUniqueId()).hasPerm(UserPerm.TEAM) && (target.getChatMode() == ProxiedPlayer.ChatMode.COMMANDS_ONLY || target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN)){ StringBuilder potentialBan = new StringBuilder(); diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index 78af5ad..8690c98 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -101,7 +101,7 @@ public class ChatListener extends BasicListener { public static void sendChat(ChatSender sender, Stream receivers, String format, ChatSender msgReceiver, String message) { SteamwarUser user = sender.user(); - final String coloredMessage = (user.getUserGroup() != UserGroup.Member || coloredTeams.contains(user.getTeam())) ? ChatColor.translateAlternateColorCodes('&', message) : message; + final String coloredMessage = (user.prefix() != UserPerm.emptyPrefix || coloredTeams.contains(user.getTeam())) ? ChatColor.translateAlternateColorCodes('&', message) : message; if(chatFilter(sender, coloredMessage)) return; @@ -153,8 +153,7 @@ public class ChatListener extends BasicListener { } SteamwarUser user = sender.user(); - UserGroup group = user.getUserGroup(); - if(!group.isTeamGroup() && (message.contains("http:") || message.contains("https:") || message.contains("www."))){ + if(!user.hasPerm(UserPerm.TEAM) && (message.contains("http:") || message.contains("https:") || message.contains("www."))){ sender.system("CHAT_NO_LINKS"); return true; } @@ -173,16 +172,17 @@ public class ChatListener extends BasicListener { } private static void chatToReciever(ChatSender receiver, ChatSender msgReceiver, SteamwarUser sender, String format, String message) { - UserGroup group = sender.getUserGroup(); + UserPerm.Prefix prefix = sender.prefix(); + String chatColorCode = sender.hasPerm(UserPerm.TEAM) ? "§f" : "§7"; receiver.chat(new Message(format, sender, msgReceiver == null ? receiver : msgReceiver, - highlightMentions(message, group.getChatColorCode(), receiver), + highlightMentions(message, chatColorCode, receiver), sender.getTeam() == 0 ? "" : "§" + Team.get(sender.getTeam()).getTeamColor() + Team.get(sender.getTeam()).getTeamKuerzel() + " ", UserElo.getEmblem(sender, rankedModes), - group.getColorCode(), - group.getChatPrefix().length() == 0 ? "§f" : group.getChatPrefix() + " ", - group.getChatColorCode())); + prefix.getColorCode(), + prefix.getChatPrefix().length() == 0 ? "§f" : prefix.getChatPrefix() + " ", + chatColorCode)); } private static boolean filteredCommand(CommandSender sender, String message) { @@ -242,15 +242,6 @@ public class ChatListener extends BasicListener { } } } - - if(e.getSender() instanceof ProxiedPlayer && cursor.length == 1 && cursor[0].startsWith("/")){ - ProxiedPlayer player = (ProxiedPlayer) e.getSender(); - for(String cmd : BungeeCore.commands.keySet()){ - if(cmd.startsWith(cursor[0]) && player.hasPermission(BungeeCore.commands.get(cmd))){ - suggestions.add(cmd); - } - } - } } @EventHandler diff --git a/src/de/steamwar/bungeecore/listeners/ConnectionListener.java b/src/de/steamwar/bungeecore/listeners/ConnectionListener.java index ddde4f7..fa8a3be 100644 --- a/src/de/steamwar/bungeecore/listeners/ConnectionListener.java +++ b/src/de/steamwar/bungeecore/listeners/ConnectionListener.java @@ -31,7 +31,7 @@ import de.steamwar.bungeecore.commands.ModCommand; import de.steamwar.bungeecore.commands.MsgCommand; import de.steamwar.bungeecore.listeners.mods.Utils; import de.steamwar.sql.SteamwarUser; -import de.steamwar.sql.UserGroup; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.AbstractReconnectHandler; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ClickEvent; @@ -47,10 +47,16 @@ import java.util.*; public class ConnectionListener extends BasicListener { - private static final String ADMIN_GROUP = "admin"; - public static final String TEAM_GROUP = "team"; + private static final String TEAM_GROUP = "team"; + + public static final String ALERT_PERMISSION = "bungeecore.alert"; + public static final String BAN_PERMISSION = "bungeecore.ban"; + public static final String BUILDERCLOUD_PERMISSION = "bungeecore.buildercloud"; public static final String CHECK_PERMISSION = "bungeecore.check"; - private static final String YOUTUBER_MODS = "bungeecore.youtubermods"; + public static final String KICK_PERMISSION = "bungeecore.kick"; + public static final String POLLRESULT_PERMISSION = "bungeecore.pollresult"; + public static final String SOFTRELOAD_PERMISSION = "bungeecore.softreload"; + public static final String TEAMCHAT_PERMISSION = "bungeecore.teamchat"; private static final Set newPlayers = new HashSet<>(); @@ -63,25 +69,36 @@ public class ConnectionListener extends BasicListener { ProxiedPlayer player = event.getPlayer(); SteamwarUser user = SteamwarUser.get(player.getUniqueId()); - player.removeGroups("Admin", "team"); + player.removeGroups(TEAM_GROUP); - if(user.getUserGroup().isAdminGroup()) - player.addGroups(ADMIN_GROUP); - - if(user.getUserGroup().isTeamGroup()) { - player.addGroups(TEAM_GROUP); - CheckCommand.sendReminder(player); + if(user.hasPerm(UserPerm.ADMINISTRATION)) { + player.setPermission("bungeecord.command.end", true); + player.setPermission("bungeecord.command.reload", true); + player.setPermission("bungeecord.command.ip", true); + player.setPermission(SOFTRELOAD_PERMISSION, true); } - if(user.getUserGroup().isCheckSchematics()) - player.setPermission(CHECK_PERMISSION, true); + if(user.hasPerm(UserPerm.MODERATION)) { + player.setPermission(ALERT_PERMISSION, true); + player.setPermission(KICK_PERMISSION, true); + player.setPermission(POLLRESULT_PERMISSION, true); + } - if(user.getUserGroup() != UserGroup.Member) { - player.setPermission(YOUTUBER_MODS, true); - player.setDisplayName(user.getUserGroup().getColorCode() + user.getUserGroup().getChatPrefix() + " " + player.getName() + "§r"); - player.setPermission("bungeecore.group." + user.getUserGroup().name().toLowerCase(), true); - }else { - player.setDisplayName("§f" + player.getName()); + if(user.hasPerm(UserPerm.TEAM)) { + player.setPermission("bungeecord.command.list", true); + player.setPermission("bungeecord.command.send", true); + player.setPermission("bungeecord.command.server", true); + player.setPermission(TEAMCHAT_PERMISSION, true); + player.setPermission(BAN_PERMISSION, true); + } + + if(user.hasPerm(UserPerm.CHECK)) { + CheckCommand.sendReminder(player); + player.setPermission(CHECK_PERMISSION, true); + } + + if(user.hasPerm(UserPerm.BUILD)) { + player.setPermission(BUILDERCLOUD_PERMISSION, true); } for(Subserver subserver : Subserver.getServerList()){ diff --git a/src/de/steamwar/bungeecore/listeners/mods/Utils.java b/src/de/steamwar/bungeecore/listeners/mods/Utils.java index 15e66bb..ae5d472 100644 --- a/src/de/steamwar/bungeecore/listeners/mods/Utils.java +++ b/src/de/steamwar/bungeecore/listeners/mods/Utils.java @@ -26,6 +26,7 @@ import de.steamwar.sql.SteamwarUser; import de.steamwar.messages.ChatSender; import de.steamwar.sql.Mod; import de.steamwar.sql.Mod.ModType; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -68,14 +69,13 @@ public class Utils { static boolean handleMods(UUID uuid, Locale locale, Consumer disconnect, List mods){ SteamwarUser user = SteamwarUser.get(uuid); - boolean privileged = user.getUserGroup().isPrivilegedMods(); playerModMap.put(uuid,new ArrayList<>(mods)); ModType max = ModType.YELLOW; Iterator it = mods.iterator(); while(it.hasNext()){ Mod mod = it.next(); - if(mod.getModType() == ModType.UNKLASSIFIED || mod.getModType() == ModType.GREEN || (mod.getModType() == ModType.YOUTUBER_ONLY && privileged)) + if(mod.getModType() == ModType.UNKLASSIFIED || mod.getModType() == ModType.GREEN || (mod.getModType() == ModType.YOUTUBER_ONLY && user.hasPerm(UserPerm.RESTRICTED_MODS))) it.remove(); else if(mod.getModType() == ModType.RED) max = ModType.RED; diff --git a/src/de/steamwar/bungeecore/tablist/TablistPart.java b/src/de/steamwar/bungeecore/tablist/TablistPart.java index 061ae92..56b8851 100644 --- a/src/de/steamwar/bungeecore/tablist/TablistPart.java +++ b/src/de/steamwar/bungeecore/tablist/TablistPart.java @@ -19,9 +19,9 @@ package de.steamwar.bungeecore.tablist; -import de.steamwar.sql.SteamwarUser; -import de.steamwar.sql.UserGroup; import de.steamwar.messages.ChatSender; +import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.chat.ComponentSerializer; @@ -62,11 +62,11 @@ interface TablistPart { public Item(ProxiedPlayer player, boolean sameTeam) { this.uuid = player.getUniqueId(); - UserGroup userGroup = SteamwarUser.get(player.getUniqueId()).getUserGroup(); - if (userGroup == UserGroup.Member && sameTeam) { + UserPerm.Prefix prefix = SteamwarUser.get(player.getUniqueId()).prefix(); + if (prefix == UserPerm.emptyPrefix && sameTeam) { this.displayName = reformat("§f" + player.getName()); } else { - this.displayName = reformat(userGroup.getColorCode() + player.getName()); + this.displayName = reformat(prefix.getColorCode() + player.getName()); } this.properties = playerProperties(player); } diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index b4e339f..6a690ef 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -593,7 +593,7 @@ WHOIS_USERNAME=§7Username§8: §e{0} WHOIS_UUID=§7UUID§8: §e{0} WHOIS_UUID_HOVER=§eCopy UUID WHOIS_ID=§7ID§8: §e{0} -WHOIS_GROUP=§7Group§8: {0}{1} +WHOIS_PERMS=§7Perms§8: §7{0} WHOIS_DISCORD_ID=§7Discord-ID§8: §e{0} WHOIS_JOINED_FIRST=§7Joined on§8: §e{0} WHOIS_HOURS_PLAYED=§7Online Time§8: §e{0}h diff --git a/src/de/steamwar/messages/BungeeCore_de.properties b/src/de/steamwar/messages/BungeeCore_de.properties index 275c455..95c01db 100644 --- a/src/de/steamwar/messages/BungeeCore_de.properties +++ b/src/de/steamwar/messages/BungeeCore_de.properties @@ -569,7 +569,7 @@ SERVER_WORLD_ERROR=§cDas Erstellen der Welt ist fehlgeschlagen. #WhoisCommand WHOIS_USAGE=§c/whois [Spieler/ID] [-a/-m] WHOIS_USERNAME=§7Username§8: §e{0} -WHOIS_GROUP=§7Gruppe§8: {0}{1} +WHOIS_PERMS=§7Rechte§8: §7{0} WHOIS_UUID=§7UUID§8: §e{0} WHOIS_UUID_HOVER=§eUUID Kopieren WHOIS_ID=§7ID§8: §e{0} diff --git a/src/de/steamwar/messages/ChatSender.java b/src/de/steamwar/messages/ChatSender.java index 65834f6..99916a0 100644 --- a/src/de/steamwar/messages/ChatSender.java +++ b/src/de/steamwar/messages/ChatSender.java @@ -22,6 +22,7 @@ package de.steamwar.messages; import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.bot.listeners.DiscordChatListener; import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.UserPerm; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; @@ -61,7 +62,7 @@ public interface ChatSender { } static Stream serverteamReceivers() { - return allReceivers().filter(player -> player.user().getUserGroup().isTeamGroup()); + return allReceivers().filter(player -> player.user().hasPerm(UserPerm.TEAM)); } SteamwarUser user();