Search in sources :

Example 1 with Report

use of mc.dragons.tools.moderation.report.ReportLoader.Report in project DragonsOnline by UniverseCraft.

the class ReportLoader method fileWatchlistReport.

public Report fileWatchlistReport(User target, User by, String reason) {
    PaginatedResult<Report> existing = getReportsByTypeStatusAndTarget(ReportType.WATCHLIST, ReportStatus.OPEN, target, 1);
    if (existing.getTotal() == 0) {
        Document data = new Document().append("type", ReportType.WATCHLIST.toString()).append("target", List.of(target.getUUID().toString())).append("priority", 1).append("filedBy", List.of(by.getUUID().toString())).append("data", new Document("reason", reason).append("states", getStateTokens(List.of(target))));
        Report report = fileReport(data);
        reportNotify(report.getId(), target.getName() + " was added to the watchlist.");
        return report;
    } else {
        Report report = existing.getPage().get(0);
        report.addFiledBy(by);
        return report;
    }
}
Also used : Report(mc.dragons.tools.moderation.report.ReportLoader.Report) Document(org.bson.Document)

Example 2 with Report

use of mc.dragons.tools.moderation.report.ReportLoader.Report in project DragonsOnline by UniverseCraft.

the class ReportLoader method fileStaffReport.

public Report fileStaffReport(List<User> targets, User staff, String message, String confirmCommand) {
    if (staff.getActivePermissionLevel().ordinal() == PermissionLevel.SYSOP.ordinal()) {
        return null;
    }
    PermissionLevel permissionReq = null;
    for (PermissionLevel level : PermissionLevel.values()) {
        if (level.ordinal() == staff.getActivePermissionLevel().ordinal() + 1) {
            permissionReq = level;
            break;
        }
    }
    Document data = new Document().append("type", ReportType.STAFF_ESCALATION.toString()).append("target", targets.stream().map(u -> u.getUUID().toString()).collect(Collectors.toList())).append("priority", // Escalations go to the very tippity top of the queue
    100).append("filedBy", List.of(staff.getUUID().toString())).append("data", new Document("message", message).append("confirmCommand", confirmCommand).append("permissionReq", permissionReq.toString()).append("states", getStateTokens(targets)));
    Report report = fileReport(data);
    reportNotify(report.getId(), staff.getName() + " escalated an issue with " + StringUtil.parseList(targets.stream().map(u -> u.getName()).collect(Collectors.toList())) + ": " + message);
    return report;
}
Also used : Document(org.bson.Document) AbstractLightweightLoader(mc.dragons.core.storage.loader.AbstractLightweightLoader) Iterables(com.google.common.collect.Iterables) MongoConfig(mc.dragons.core.storage.mongo.MongoConfig) MessageData(mc.dragons.core.gameobject.user.chat.MessageData) PermissionUtil(mc.dragons.core.util.PermissionUtil) Date(java.util.Date) User(mc.dragons.core.gameobject.user.User) HashMap(java.util.HashMap) PaginationUtil(mc.dragons.core.storage.mongo.pagination.PaginationUtil) ArrayList(java.util.ArrayList) PaginatedResult(mc.dragons.core.storage.mongo.pagination.PaginatedResult) GameObjectType(mc.dragons.core.gameobject.GameObjectType) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) Map(java.util.Map) StringUtil(mc.dragons.core.util.StringUtil) UserLoader(mc.dragons.core.gameobject.user.UserLoader) UUID(java.util.UUID) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Dragons(mc.dragons.core.Dragons) List(java.util.List) FindIterable(com.mongodb.client.FindIterable) DeleteResult(com.mongodb.client.result.DeleteResult) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) Document(org.bson.Document)

Example 3 with Report

use of mc.dragons.tools.moderation.report.ReportLoader.Report in project DragonsOnline by UniverseCraft.

the class ReportLoader method fileHoldReport.

public Report fileHoldReport(List<User> targets, User staff, String reason, int holdId, boolean escalate) {
    Document internalData = new Document("reason", reason).append("holdId", holdId).append("states", getStateTokens(targets));
    if (escalate) {
        PermissionLevel permissionReq = null;
        for (PermissionLevel level : PermissionLevel.values()) {
            if (level.ordinal() == staff.getActivePermissionLevel().ordinal() + 1) {
                permissionReq = level;
                break;
            }
        }
        internalData.append("permissionReq", permissionReq.toString());
    }
    Document data = new Document().append("type", ReportType.HOLD.toString()).append("target", targets.stream().map(u -> u.getUUID().toString()).collect(Collectors.toList())).append("priority", // Escalations go to the very tippity top of the queue
    escalate ? 100 : 0).append("filedBy", List.of(staff.getUUID().toString())).append("data", internalData.append("states", getStateTokens(targets)));
    Report report = fileReport(data);
    reportNotify(report.getId(), staff.getName() + " placed a hold on " + StringUtil.parseList(targets.stream().map(u -> u.getName()).collect(Collectors.toList())) + ": " + reason);
    return report;
}
Also used : Document(org.bson.Document) AbstractLightweightLoader(mc.dragons.core.storage.loader.AbstractLightweightLoader) Iterables(com.google.common.collect.Iterables) MongoConfig(mc.dragons.core.storage.mongo.MongoConfig) MessageData(mc.dragons.core.gameobject.user.chat.MessageData) PermissionUtil(mc.dragons.core.util.PermissionUtil) Date(java.util.Date) User(mc.dragons.core.gameobject.user.User) HashMap(java.util.HashMap) PaginationUtil(mc.dragons.core.storage.mongo.pagination.PaginationUtil) ArrayList(java.util.ArrayList) PaginatedResult(mc.dragons.core.storage.mongo.pagination.PaginatedResult) GameObjectType(mc.dragons.core.gameobject.GameObjectType) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) Map(java.util.Map) StringUtil(mc.dragons.core.util.StringUtil) UserLoader(mc.dragons.core.gameobject.user.UserLoader) UUID(java.util.UUID) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Dragons(mc.dragons.core.Dragons) List(java.util.List) FindIterable(com.mongodb.client.FindIterable) DeleteResult(com.mongodb.client.result.DeleteResult) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) Document(org.bson.Document) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel)

Example 4 with Report

use of mc.dragons.tools.moderation.report.ReportLoader.Report in project DragonsOnline by UniverseCraft.

the class ReportsCommand method onCommand.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!requirePermission(sender, SystemProfileFlag.MODERATION))
        return true;
    if (args.length == 0) {
        sender.sendMessage(ChatColor.RED + "/reports <all|all-open|escalation|chat|internal|regular|hold|watchlist|by <player>|on <player>> [-page <#>]");
        sender.sendMessage(ChatColor.GRAY + "Note: Moderators can only use /reports <watchlist|by|on>");
        return true;
    }
    int pageFlagIndex = StringUtil.getFlagIndex(args, "-page", 0);
    Integer page = 1;
    if (pageFlagIndex != -1) {
        page = parseInt(sender, args[++pageFlagIndex]);
        if (page == null)
            return true;
    }
    SystemProfileFlag req = SystemProfileFlag.APPEALS_TEAM;
    PaginatedResult<Report> results = null;
    if (args[0].equalsIgnoreCase("all-open")) {
        results = reportLoader.getReportsByStatus(ReportStatus.OPEN, page);
    } else if (args[0].equalsIgnoreCase("all")) {
        results = reportLoader.getAllReports(page);
    } else if (args[0].equalsIgnoreCase("escalation")) {
        results = reportLoader.getReportsByType(ReportType.STAFF_ESCALATION, page);
    } else if (args[0].equalsIgnoreCase("chat")) {
        results = reportLoader.getReportsByType(ReportType.CHAT, page);
    } else if (args[0].equalsIgnoreCase("internal")) {
        results = reportLoader.getReportsByType(ReportType.AUTOMATED, page);
    } else if (args[0].equalsIgnoreCase("regular")) {
        results = reportLoader.getReportsByType(ReportType.REGULAR, page);
    } else if (args[0].equalsIgnoreCase("hold")) {
        results = reportLoader.getReportsByType(ReportType.HOLD, page);
    } else if (args[0].equalsIgnoreCase("watchlist")) {
        req = SystemProfileFlag.MODERATION;
        results = reportLoader.getReportsByTypeAndStatus(ReportType.WATCHLIST, ReportStatus.OPEN, page);
    } else if (args[0].equalsIgnoreCase("by")) {
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "/reports by <player>");
            return true;
        }
        User filter = lookupUser(sender, args[1]);
        if (filter == null)
            return true;
        results = reportLoader.getReportsByFiler(filter, page);
    } else if (args[0].equalsIgnoreCase("on")) {
        req = SystemProfileFlag.MODERATION;
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "/reports on <player>");
            return true;
        }
        User filter = lookupUser(sender, args[1]);
        if (filter == null)
            return true;
        if (filter.equals(user(sender)) && !hasPermission(sender, PermissionLevel.ADMIN)) {
            sender.sendMessage(ChatColor.RED + "You cannot look up reports on yourself!");
            return true;
        }
        results = reportLoader.getReportsByTarget(filter, page);
    } else {
        sender.sendMessage(ChatColor.RED + "Invalid usage!");
        return true;
    }
    if (!hasPermission(sender, PermissionLevel.ADMIN) && !requirePermission(sender, req))
        return true;
    if (results.getTotal() == 0) {
        sender.sendMessage(ChatColor.RED + "No results returned for this query!");
        return true;
    }
    TableGenerator tg = new TableGenerator(Alignment.LEFT, Alignment.LEFT, Alignment.LEFT, Alignment.LEFT, Alignment.LEFT, Alignment.LEFT);
    tg.addRow(COL_ID, COL_TARGET, COL_PREVIEW, COL_TYPE, COL_STATUS, COL_FILER);
    String idPrefix = ChatColor.AQUA + "";
    String dataPrefix = ChatColor.GRAY + "";
    for (Report report : results.getPage()) {
        String targets = report.getTargets().get(0).getName();
        if (report.getTargets().size() > 1) {
            targets += " +" + (report.getTargets().size() - 1);
        }
        String by = "";
        if (report.getFiledBy().size() > 0) {
            by = report.getFiledBy().get(0).getName();
        }
        if (report.getFiledBy().size() > 1) {
            by += " +" + (report.getFiledBy().size() - 1);
        }
        tg.addRowEx("/viewreport " + report.getId(), ChatColor.GRAY + "Click to view report #" + report.getId(), idPrefix + "#" + report.getId(), dataPrefix + targets, dataPrefix + StringUtil.truncateWithEllipsis(report.getPreview(), 30), dataPrefix + report.getType(), dataPrefix + report.getStatus(), dataPrefix + by);
    }
    sender.sendMessage(ChatColor.GREEN + "Page " + page + " of " + results.getPages() + " (" + results.getTotal() + " results)");
    tg.display(sender);
    return true;
}
Also used : SystemProfileFlag(mc.dragons.core.gameobject.user.permission.SystemProfile.SystemProfileFlags.SystemProfileFlag) User(mc.dragons.core.gameobject.user.User) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) TableGenerator(mc.dragons.core.util.TableGenerator)

Example 5 with Report

use of mc.dragons.tools.moderation.report.ReportLoader.Report in project DragonsOnline by UniverseCraft.

the class AntiCheatCommand method onCommand.

public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (label.equalsIgnoreCase("acping")) {
        if (!requirePermission(sender, PermissionLevel.MODERATOR))
            return true;
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acping <player>");
            return true;
        }
        Player target = lookupPlayer(sender, args[0]);
        if (target == null)
            return true;
        sender.sendMessage(ChatColor.GREEN + "Ping of " + target.getName() + " is " + plugin.getCombatRewinder().getInstantaneousPing(target) + "ms (Bukkit: " + plugin.getDragonsInstance().getBridge().getPing(target) + "ms)");
        return true;
    } else if (label.equalsIgnoreCase("acpps")) {
        if (!requirePermission(sender, PermissionLevel.MODERATOR))
            return true;
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acpps <player>");
            return true;
        }
        Player target = lookupPlayer(sender, args[0]);
        FastPackets check = plugin.getCheckRegistry().getCheckByClass(FastPackets.class);
        sender.sendMessage(ChatColor.GREEN + "Current PPS of " + target.getName() + " is " + MathUtil.round(check.getPPS(target)) + " (" + plugin.getCombatRewinder().getInstantaneousPing(target) + "ms i, " + plugin.getDragonsInstance().getBridge().getPing(target) + "ms b)");
        return true;
    }
    if (!requirePermission(sender, PermissionLevel.DEVELOPER))
        return true;
    Player player = player(sender);
    if (label.equalsIgnoreCase("acdebug")) {
        plugin.setDebug(!plugin.isDebug());
        if (plugin.isDebug()) {
            sender.sendMessage(ChatColor.GREEN + "Now debugging anticheat");
        } else {
            sender.sendMessage(ChatColor.GREEN + "No longer debugging anticheat");
        }
        return true;
    } else if (label.equalsIgnoreCase("acdump")) {
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acdump <Player>");
            return true;
        }
        User target = lookupUser(sender, args[0]);
        sender.sendMessage("CHECK - CATEGORY - VL");
        for (Check check : plugin.getCheckRegistry().getChecks()) {
            ViolationData violationData = ViolationData.of(check, target);
            sender.sendMessage(check.getName() + " - " + check.getType() + " - " + MathUtil.round(violationData.vl));
        }
    } else if (label.equalsIgnoreCase("acresetplayer")) {
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acresetplayer <Player>");
            return true;
        }
        User target = lookupUser(sender, args[0]);
        for (Check check : plugin.getCheckRegistry().getChecks()) {
            ViolationData violationData = ViolationData.of(check, target);
            violationData.vl = 0;
        }
        MoveData moveData = MoveData.of(target);
        moveData.lastRubberband = 0L;
        moveData.lastValidLocation = target.getPlayer().getLocation();
        moveData.validMoves = MoveData.MIN_VALID_MOVES_TO_SET_VALID_LOCATION;
        sender.sendMessage("Reset check data for " + target.getName());
    } else if (label.equalsIgnoreCase("acflushlog")) {
        plugin.getTestingMoveListener().dumpLog();
        plugin.getTestingMoveListener().disableLog();
        sender.sendMessage(ChatColor.GREEN + "Dumped log to console and cleared");
        return true;
    } else if (label.equalsIgnoreCase("acstartlog")) {
        plugin.getTestingMoveListener().clearLog();
        plugin.getTestingMoveListener().enableLog();
        return true;
    } else if (label.equalsIgnoreCase("acblockdata")) {
        IBlockData blockData = ((CraftWorld) player.getWorld()).getHandle().getType(new BlockPosition(player.getLocation().getBlockX(), player.getLocation().getBlockY() - 1, player.getLocation().getBlockZ()));
        Block nmsBlock = blockData.getBlock();
        sender.sendMessage("nmsBlock=" + nmsBlock);
        float ff = nmsBlock.getFrictionFactor();
        sender.sendMessage("frictionFactor=" + ff);
        // ?
        ff *= 0.91;
        sender.sendMessage("*multiplier=" + 0.1 * (0.1627714 / (ff * ff * ff)));
        sender.sendMessage("*a=" + ff);
        sender.sendMessage("calculated onGround=" + ACUtil.isOnGround(player));
        return true;
    } else if (label.equalsIgnoreCase("acban")) {
        if (!requirePermission(sender, SystemProfileFlag.MODERATION))
            return true;
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acban <player> [internal info]");
            return true;
        }
        User target = lookupUser(sender, args[0]);
        String info = StringUtil.concatArgs(args, 1);
        if (target == null)
            return true;
        Report report = reportLoader.fileInternalReport(target, new Document("type", "ac_ban").append("info", info));
        report.addNote("Action automatically taken on this report");
        report.setStatus(ReportStatus.ACTION_TAKEN);
        WrappedUser.of(target).punish(PunishmentType.BAN, PunishmentCode.AC_BAN, PunishmentCode.AC_BAN.getStandingLevel(), "ID " + report.getId(), user(sender));
        sender.sendMessage(ChatColor.GREEN + "Anticheat ban executed successfully. Correlated Report ID: " + report.getId());
    } else if (label.equalsIgnoreCase("ackick")) {
        if (!requirePermission(sender, SystemProfileFlag.MODERATION))
            return true;
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/ackick <player>");
            return true;
        }
        User target = lookupUser(sender, args[0]);
        if (target == null)
            return true;
        WrappedUser.of(target).punish(PunishmentType.KICK, PunishmentCode.CHEATING_WARNING, 0, null, null);
        sender.sendMessage(ChatColor.GREEN + "Kicked " + target.getName() + " for illegal client modifications");
    } else if (label.equalsIgnoreCase("acspoofping")) {
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acspoofping <value|off>");
            return true;
        }
        if (args[0].equalsIgnoreCase("off")) {
            plugin.getCombatRewinder().debug_pingSpoof.remove(player);
            sender.sendMessage(ChatColor.GREEN + "Stopped spoofing your ping.");
        } else {
            plugin.getCombatRewinder().debug_pingSpoof.put(player, (long) parseInt(player, args[0]));
            sender.sendMessage(ChatColor.GREEN + "Began spoofing your anticheat ping to " + args[0] + "ms");
        }
    } else if (label.equalsIgnoreCase("acraytol")) {
        if (args.length == 0) {
            sender.sendMessage(ChatColor.RED + "/acraytol <tolerance>");
            return true;
        }
        Double tol = parseDouble(sender, args[0]);
        if (tol == null)
            return true;
        plugin.getCombatRewinder().rayTraceTolerance = tol;
        sender.sendMessage(ChatColor.GREEN + "Set combat rewind ray tracing tolerance to +/- " + args[0] + " blocks");
    } else if (label.equalsIgnoreCase("acstatus")) {
        for (Check check : plugin.getCheckRegistry().getChecks()) {
            sender.sendMessage((check.isEnabled() ? ChatColor.DARK_GREEN : ChatColor.RED) + check.getName() + (check.isEnabled() ? "(Enabled)" : "(Disabled)"));
        }
    } else if (label.equalsIgnoreCase("actoggle")) {
        // If all checks are inactive, make them all active
        if (args.length == 0) {
            if (plugin.getCheckRegistry().getChecks().stream().filter(c -> c.isEnabled()).count() > 0) {
                plugin.getCheckRegistry().getChecks().forEach(c -> c.setEnabled(false));
                sender.sendMessage(ChatColor.GREEN + "Disabled all checks.");
            } else {
                plugin.getCheckRegistry().getChecks().forEach(c -> c.setEnabled(true));
                sender.sendMessage(ChatColor.GREEN + "Enabled all checks.");
            }
        } else {
            Check check = plugin.getCheckRegistry().getCheckByName(args[0]);
            if (check == null) {
                sender.sendMessage(ChatColor.RED + "No check by that name exists! /acstatus");
                return true;
            }
            check.setEnabled(!check.isEnabled());
            sender.sendMessage(ChatColor.GREEN + (check.isEnabled() ? "Enabled" : "Disabled") + " check " + check.getName());
        }
    } else if (label.equalsIgnoreCase("achitstats")) {
        Map<Player, Boolean> toggle = plugin.getCombatRewinder().debug_hitStats;
        toggle.put(player, !toggle.getOrDefault(player, false));
        sender.sendMessage(ChatColor.GREEN + "Toggled hit rejection stats in action bar");
    } else if (label.equalsIgnoreCase("acresethitstats")) {
        plugin.getCombatRewinder().debug_hitCount.remove(player);
        plugin.getCombatRewinder().debug_rejectedCount.remove(player);
        sender.sendMessage(ChatColor.GREEN + "Reset your hit rejection stats");
    } else {
        sender.sendMessage(ChatColor.GREEN + "Dragons Online custom anti-cheat (ALPHA)");
    }
    return true;
}
Also used : Document(org.bson.Document) ReportLoader(mc.dragons.tools.moderation.report.ReportLoader) Block(net.minecraft.server.v1_16_R3.Block) IBlockData(net.minecraft.server.v1_16_R3.IBlockData) FastPackets(mc.dragons.anticheat.check.move.FastPackets) User(mc.dragons.core.gameobject.user.User) Player(org.bukkit.entity.Player) DragonsAntiCheat(mc.dragons.anticheat.DragonsAntiCheat) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) DragonsCommandExecutor(mc.dragons.core.commands.DragonsCommandExecutor) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) ReportStatus(mc.dragons.tools.moderation.report.ReportLoader.ReportStatus) MoveData(mc.dragons.anticheat.check.move.MoveData) Map(java.util.Map) WrappedUser(mc.dragons.tools.moderation.WrappedUser) PunishmentType(mc.dragons.tools.moderation.punishment.PunishmentType) StringUtil(mc.dragons.core.util.StringUtil) CommandSender(org.bukkit.command.CommandSender) ViolationData(mc.dragons.anticheat.check.ViolationData) CraftWorld(org.bukkit.craftbukkit.v1_16_R3.CraftWorld) SystemProfileFlag(mc.dragons.core.gameobject.user.permission.SystemProfile.SystemProfileFlags.SystemProfileFlag) BlockPosition(net.minecraft.server.v1_16_R3.BlockPosition) Check(mc.dragons.anticheat.check.Check) ChatColor(org.bukkit.ChatColor) Command(org.bukkit.command.Command) ACUtil(mc.dragons.anticheat.util.ACUtil) MathUtil(mc.dragons.core.util.MathUtil) PunishmentCode(mc.dragons.tools.moderation.punishment.PunishmentCode) Player(org.bukkit.entity.Player) MoveData(mc.dragons.anticheat.check.move.MoveData) User(mc.dragons.core.gameobject.user.User) WrappedUser(mc.dragons.tools.moderation.WrappedUser) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) BlockPosition(net.minecraft.server.v1_16_R3.BlockPosition) Check(mc.dragons.anticheat.check.Check) ViolationData(mc.dragons.anticheat.check.ViolationData) Document(org.bson.Document) FastPackets(mc.dragons.anticheat.check.move.FastPackets) IBlockData(net.minecraft.server.v1_16_R3.IBlockData) Block(net.minecraft.server.v1_16_R3.Block) CraftWorld(org.bukkit.craftbukkit.v1_16_R3.CraftWorld)

Aggregations

Report (mc.dragons.tools.moderation.report.ReportLoader.Report)16 Document (org.bson.Document)11 User (mc.dragons.core.gameobject.user.User)9 List (java.util.List)7 StringUtil (mc.dragons.core.util.StringUtil)7 Collectors (java.util.stream.Collectors)6 ArrayList (java.util.ArrayList)5 Dragons (mc.dragons.core.Dragons)5 PermissionLevel (mc.dragons.core.gameobject.user.permission.PermissionLevel)5 PaginatedResult (mc.dragons.core.storage.mongo.pagination.PaginatedResult)5 HoldEntry (mc.dragons.tools.moderation.hold.HoldLoader.HoldEntry)5 ReportLoader (mc.dragons.tools.moderation.report.ReportLoader)5 Instant (java.time.Instant)4 Map (java.util.Map)4 UUID (java.util.UUID)4 UserLoader (mc.dragons.core.gameobject.user.UserLoader)4 SystemProfileFlag (mc.dragons.core.gameobject.user.permission.SystemProfile.SystemProfileFlags.SystemProfileFlag)4 WrappedUser (mc.dragons.tools.moderation.WrappedUser)4 PunishmentType (mc.dragons.tools.moderation.punishment.PunishmentType)4 ReportStatus (mc.dragons.tools.moderation.report.ReportLoader.ReportStatus)4