From 31f325421ab73d1e0095d77b7a784dd41bdede0c Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 19 Dec 2020 14:12:19 +0100 Subject: [PATCH] Check refactoring: Using Message, informing about previous checks Signed-off-by: Lixfel --- .../bungeecore/commands/CheckCommand.java | 90 ++++++++++--------- .../bungeecore/sql/CheckedSchematic.java | 46 +++++++++- .../steamwar/messages/BungeeCore.properties | 30 ++++++- 3 files changed, 124 insertions(+), 42 deletions(-) diff --git a/src/de/steamwar/bungeecore/commands/CheckCommand.java b/src/de/steamwar/bungeecore/commands/CheckCommand.java index d7eaf1a..65330e5 100644 --- a/src/de/steamwar/bungeecore/commands/CheckCommand.java +++ b/src/de/steamwar/bungeecore/commands/CheckCommand.java @@ -68,7 +68,7 @@ public class CheckCommand extends BasicCommand { ProxyServer.getInstance().getScheduler().schedule(BungeeCore.get(), () -> { List schematics = getSchemsToCheck(); if(schematics.size() != currentCheckers.size()) - ServerTeamchatCommand.sendToTeam("§7Es sind §e" + (schematics.size() - currentCheckers.size()) + " §7Schematics zu prüfen§8!"); + Message.team("CHECK_REMINDER", schematics.size() - currentCheckers.size()); }, 10, 10, TimeUnit.MINUTES); } @@ -91,7 +91,7 @@ public class CheckCommand extends BasicCommand { schematic(player, args[1]); break; case "next": - case "allow": + case "accept": next(player, args); break; case "cancel": @@ -118,27 +118,27 @@ public class CheckCommand extends BasicCommand { private void list(ProxiedPlayer player) { List schematicList = getSchemsToCheck(); - BungeeCore.send(player, "§e§lZu prüfen sind " + schematicList.size() + " Schematics"); + Message.sendPrefixless("CHECK_LIST_HEADER", player, schematicList.size()); for (Schematic schematic : schematicList) { CheckSession current = currentSchems.get(schematic.getSchemID()); if (current == null) { - BungeeCore.send(player, - "§8" + schematic.getSchemType().getKuerzel() + " §7" + SteamwarUser.get(schematic.getSchemOwner()).getUserName() + " §e" + schematic.getSchemName(), - "§eSchematic prüfen", - new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check schematic " + schematic.getSchemID())); + Message.sendPrefixless("CHECK_LIST_TO_CHECK", player, + Message.parse("CHECK_LIST_TO_CHECK_HOVER", player), + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check schematic " + schematic.getSchemID()), + schematic.getSchemType().getKuerzel(), SteamwarUser.get(schematic.getSchemOwner()).getUserName(), schematic.getSchemName()); } else { - BungeeCore.send(player, - "§8" + schematic.getSchemType().getKuerzel() + " §7" + SteamwarUser.get(schematic.getSchemOwner()).getUserName() + " §e" + schematic.getSchemName() + " §7wird geprüft von §e" + current.checker.getName(), - "§eZum Prüfer", - new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + current.checker.getName())); + Message.sendPrefixless("CHECK_LIST_CHECKING", player, + Message.parse("CHECK_LIST_CHECKING_HOVER", player), + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + current.checker.getName()), + schematic.getSchemType().getKuerzel(), SteamwarUser.get(schematic.getSchemOwner()).getUserName(), schematic.getSchemName(), current.checker.getName()); } } } private void schematic(ProxiedPlayer player, String schemID){ if(isChecking(player)){ - BungeeCore.send(player, "§cDu prüfst schon eine Schematic!"); + Message.send("CHECK_SCHEMATIC_ALREADY_CHECKING", player); return; } @@ -147,7 +147,7 @@ public class CheckCommand extends BasicCommand { ProxyServer.getInstance().getLogger().log(Level.SEVERE, player.getName() + " tried to check an uncheckable schematic!"); return; }else if(schem.getSchemOwner() == SteamwarUser.get(player.getUniqueId()).getId()) { - BungeeCore.send(player, "§cDu kannst nicht deine eigenen Schematics prüfen"); + Message.send("CHECK_SCHEMATIC_OWN", player); return; } @@ -156,7 +156,7 @@ public class CheckCommand extends BasicCommand { private static boolean notChecking(ProxiedPlayer player){ if(!isChecking(player)){ - BungeeCore.send(player, "§cDu prüfst derzeit nicht."); + Message.send("CHECK_NOT_CHECKING", player); return true; } return false; @@ -171,7 +171,7 @@ public class CheckCommand extends BasicCommand { try{ rank = Integer.parseInt(args[1]); }catch(NumberFormatException e){ - BungeeCore.send(player, "Der angegebene Rang ist ungültig!"); + Message.send("CHECK_INVALID_RANK", player); return; } } @@ -183,7 +183,7 @@ public class CheckCommand extends BasicCommand { if(notChecking(player)) return; - BungeeCore.send(player, "§aDer Prüfvorgang wurde abgebrochen!"); + Message.send("CHECK_ABORT", player); currentCheckers.get(player.getUniqueId()).abort(); } @@ -204,11 +204,10 @@ public class CheckCommand extends BasicCommand { } private void help(CommandSender sender){ - BungeeCore.send(sender, "§8/§echeck list §8- §7Zeigt die Liste der ungeprüften Schematics"); - BungeeCore.send(sender, "§8/§echeck next §8- §7Nächste Prüffrage"); - BungeeCore.send(sender, "§8/§echeck allow §8- §7Schematic freigeben"); - BungeeCore.send(sender, "§8/§echeck decline [Grund] §8- §7Schematic nicht freigeben"); - BungeeCore.send(sender, "§8/§echeck cancel §8- §7Bricht das Prüfen ab"); + Message.sendPrefixless("CHECK_HELP_LIST", sender); + Message.sendPrefixless("CHECK_HELP_NEXT", sender); + Message.sendPrefixless("CHECK_HELP_DECLINE", sender); + Message.sendPrefixless("CHECK_HELP_CANCEL", sender); } private static class CheckSession{ @@ -235,6 +234,8 @@ public class CheckCommand extends BasicCommand { SubserverSystem.startTestServer(checker, mode, FightCommand.getMap(checker, mode, "Random"), schematic.getSchemID()); currentCheckers.put(checker.getUniqueId(), this); currentSchems.put(schematic.getSchemID(), this); + for(CheckedSchematic previous : CheckedSchematic.previousChecks(schematic.getSchemName(), schematic.getSchemOwner())) + Message.sendPrefixless("CHECK_SCHEMATIC_PREVIOUS", checker, previous.getEndTime(), SteamwarUser.get(previous.getValidator()).getUserName(), previous.getReason()); next(0); }); } @@ -245,26 +246,28 @@ public class CheckCommand extends BasicCommand { return; } - BungeeCore.send(checker, checkList.next()); + checker.sendMessage(TextComponent.fromLegacyText(checkList.next())); - TextComponent next; + TextComponent next = new TextComponent(); + next.setColor(ChatColor.GREEN); if(checkList.hasNext()){ - next = new TextComponent("next "); + next.setText(Message.parse("CHECK_NEXT", checker)); next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check next")); }else if(ranks.containsKey(schematic.getSchemType())){ - next = new TextComponent(); List r = ranks.get(schematic.getSchemType()); for(int i = 0; i < r.size(); i++){ - BungeeCore.send(checker, "§aRang " + (i+1) + ": " + r.get(i), "§aMit diesem Rang freigeben", new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check allow " + (i+1))); - BungeeCore.send(checker, ""); + Message.sendPrefixless("CHECK_RANK", checker, + Message.parse("CHECK_RANK_HOVER", checker), + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check allow " + (i+1)), + i+1, r.get(i)); + Message.sendPrefixless("SPACER", checker); } }else{ - next = new TextComponent("accept "); - next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check allow")); + next.setText(Message.parse("CHECK_ACCEPT", checker)); + next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/check accept")); } - next.setColor(ChatColor.GREEN); - TextComponent decline = new TextComponent("decline"); + TextComponent decline = new TextComponent(" " + Message.parse("CHECK_DECLINE", checker)); decline.setColor(ChatColor.RED); decline.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/check decline ")); @@ -275,7 +278,7 @@ public class CheckCommand extends BasicCommand { private void accept(int rank){ if(ranks.containsKey(schematic.getSchemType())){ if(rank <= 0 || ranks.get(schematic.getSchemType()).size() < rank){ - BungeeCore.send(checker, "§cUnbekannter Schematic-Rang"); + Message.send("CHECK_INVALID_RANK", checker); return; } schematic.setRank(rank); @@ -283,24 +286,31 @@ public class CheckCommand extends BasicCommand { schematic.setSchemType(schematic.getSchemType().fightType()); CheckedSchematic.create(schematic.getSchemName(), schematic.getSchemOwner(), SteamwarUser.get(checker.getUniqueId()).getId(), startTime, Timestamp.from(Instant.now()), "freigegeben"); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(SteamwarUser.get(schematic.getSchemOwner()).getUuid()); + SteamwarUser user = SteamwarUser.get(schematic.getSchemOwner()); + ProxiedPlayer player = ProxyServer.getInstance().getPlayer(user.getUuid()); if(player != null) - BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§aDein §e" + schematic.getSchemType().name() + " " + schematic.getSchemName() + " §ewurde freigegeben§8!"); - ServerTeamchatCommand.sendToTeam("§aDie Schematic §e" + schematic.getSchemName() + " §avon §e" + SteamwarUser.get(schematic.getSchemOwner()).getUserName() + " §aist nun freigegeben!"); - abort(); + Message.send("CHECK_ACCEPTED", player, schematic.getSchemType().name(), schematic.getSchemName()); + Message.team("CHECK_ACCEPTED_TEAM", schematic.getSchemName(), user.getUserName()); + stop(); } private void decline(String reason){ schematic.setSchemType(SchematicType.Normal); CheckedSchematic.create(schematic.getSchemName(), schematic.getSchemOwner(), SteamwarUser.get(checker.getUniqueId()).getId(), startTime, Timestamp.from(Instant.now()), reason); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(SteamwarUser.get(schematic.getSchemOwner()).getUuid()); + SteamwarUser user = SteamwarUser.get(schematic.getSchemOwner()); + ProxiedPlayer player = ProxyServer.getInstance().getPlayer(user.getUuid()); if(player != null) - BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§cDein §e" + schematic.getSchemType().name() + " " + schematic.getSchemName() + " §cwurde abgelehnt§8: §c" + reason); - ServerTeamchatCommand.sendToTeam("§aDie Schematic §e" + schematic.getSchemName() + " §avon §e" + SteamwarUser.get(schematic.getSchemOwner()).getUserName() + " §awurde aufgrund von §e" + reason + " §aabgelehnt!"); - abort(); + Message.send("CHECK_DECLINED", player, schematic.getSchemType().name(), schematic.getSchemName(), reason); + Message.team("CHECK_DECLINED_TEAM", schematic.getSchemName(), user.getUserName(), reason); + stop(); } private void abort(){ + CheckedSchematic.create(schematic.getSchemName(), schematic.getSchemOwner(), SteamwarUser.get(checker.getUniqueId()).getId(), startTime, Timestamp.from(Instant.now()), "Prüfvorgang abgebrochen"); + stop(); + } + + private void stop(){ currentCheckers.remove(checker.getUniqueId()); currentSchems.remove(schematic.getSchemID()); ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> { diff --git a/src/de/steamwar/bungeecore/sql/CheckedSchematic.java b/src/de/steamwar/bungeecore/sql/CheckedSchematic.java index 9b4a062..ab916d4 100644 --- a/src/de/steamwar/bungeecore/sql/CheckedSchematic.java +++ b/src/de/steamwar/bungeecore/sql/CheckedSchematic.java @@ -19,13 +19,57 @@ package de.steamwar.bungeecore.sql; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; public class CheckedSchematic { - private CheckedSchematic(){} + + private final String schemName; + private final int schemOwner; + + private final int validator; + private final Timestamp startTime; + private final Timestamp endTime; + private final String reason; + + private CheckedSchematic(ResultSet rs) throws SQLException { + schemName = rs.getString("SchemName"); + schemOwner = rs.getInt("SchemOwner"); + validator = rs.getInt("Validator"); + startTime = rs.getTimestamp("StartTime"); + endTime = rs.getTimestamp("EndTime"); + reason = rs.getString("Reason"); + } public static void create(String schemName, int schemOwner, int validator, Timestamp startTime, Timestamp endTime, String reason){ SQL.update("INSERT INTO CheckedSchematic (SchemName, SchemOwner, Validator, StartTime, EndTime, DeclineReason) VALUES (?, ?, ?, ?, ?, ?)", schemName, schemOwner, validator, startTime, endTime, reason); } + + public static List previousChecks(String schemName, int schemOwner){ + ResultSet rs = SQL.select("SELECT FROM CheckedSchematics WHERE SchemName = ? AND SchemOwner = ? ORDER BY EndTime ASC", schemName, schemOwner); + List schematics = new ArrayList<>(); + try { + while(rs.next()) + schematics.add(new CheckedSchematic(rs)); + } catch (SQLException e) { + throw new SecurityException("Could not load previous checks", e); + } + return schematics; + } + + public int getValidator() { + return validator; + } + + public Timestamp getEndTime() { + return endTime; + } + + public String getReason() { + return reason; + } } diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index 563a53c..73f532d 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -1,4 +1,5 @@ PREFIX=§eSteam§8War» +SPACER= UNKNOWN_COMMAND=§cUnbekannter Befehl. UNKNOWN_PLAYER=§cDiesen Spieler gibt es nicht. @@ -113,4 +114,31 @@ POLLRESULT_LIST=§e{0}§8: §7{1} #BauCommand BAU_DELETE_GUI_NAME=§eWirklich Welt löschen? BAU_DELETE_GUI_CANCEL=§cAbbrechen -BAU_DELETE_GUI_DELETE=§aLöschen \ No newline at end of file +BAU_DELETE_GUI_DELETE=§aLöschen + +#CheckCommand +CHECK_REMINDER=§7Es sind §e{0} §7Schematics zu prüfen§8! +CHECK_NOT_CHECKING=§cDu prüfst derzeit nicht. +CHECK_HELP_LIST=§8/§echeck list §8- §7Zeigt die Liste der ungeprüften Schematics +CHECK_HELP_NEXT=§8/§echeck next §8- §7Nächste Prüffrage§8/§7freigeben +CHECK_HELP_DECLINE=§8/§echeck decline §8[§eGrund§8] - §7Schematic ablehnen +CHECK_HELP_CANCEL=§8/§echeck cancel §8- §7Bricht den Prüfvorgang ab +CHECK_LIST_HEADER=§e§lZu prüfen sind {0} Schematics +CHECK_LIST_TO_CHECK=§8{0} §7{1} §e{2} +CHECK_LIST_TO_CHECK_HOVER=§eSchematic prüfen +CHECK_LIST_CHECKING=§8{0} §7{1} §e{2} §7wird geprüft von §e{3} +CHECK_LIST_CHECKING_HOVER=§eZum Prüfer +CHECK_SCHEMATIC_ALREADY_CHECKING=§cDu prüfst schon eine Schematic! +CHECK_SCHEMATIC_OWN=§cDu kannst nicht deine eigenen Schematics prüfen. +CHECK_SCHEMATIC_PREVIOUS=§7{0} von {1}§8: §e{2} +CHECK_INVALID_RANK=§cUnbekannter Schematicrang. +CHECK_ABORT=§aDer Prüfvorgang wurde abgebrochen! +CHECK_NEXT=Nächste Frage +CHECK_ACCEPT=Annehmen +CHECK_DECLINE=Ablehnen +CHECK_RANK=§aRang {0}: {1} +CHECK_RANK_HOVER=§aMit diesem Rang freigeben +CHECK_ACCEPTED=§aDein §e{0} {1} §ewurde freigegeben§8! +CHECK_ACCEPTED_TEAM=§7Die Schematic §e{0} §7von §e{1} §7ist nun freigegeben! +CHECK_DECLINED=§cDein §e{0} {1} §cwurde abgelehnt§8: §c{2} +CHECK_DECLINED_TEAM=§7Die Schematic §e{0} §7von §e{1} §awurde aufgrund von §e{2} §7abgelehnt! \ No newline at end of file