From 52602045a905dc2da69a2107fbc6c9f959e04e53 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Tue, 28 Oct 2025 17:36:16 +0100 Subject: [PATCH] Add GameModeConfig.Checkers --- .../src/de/steamwar/sql/GameModeConfig.java | 9 +++++++++ .../steamwar/messages/BungeeCore.properties | 1 + .../messages/BungeeCore_de.properties | 1 + .../velocitycore/commands/CheckCommand.java | 20 ++++++++++++++++--- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java b/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java index b1e62b8b..c7e9ecf8 100644 --- a/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java +++ b/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java @@ -101,6 +101,14 @@ public final class GameModeConfig { */ public final List CheckQuestions; + /** + * The allowed checkers to check this schematic type denoted by a list of SteamWar ids. + * The people need the {@link UserPerm#CHECK} to be able to check though. + * + * @implSpec {@code []} by default -> denoting every person with {@link UserPerm#CHECK} can check it + */ + public final List Checkers; + /** * Bundle for countdowns during the fight */ @@ -194,6 +202,7 @@ public final class GameModeConfig { } CheckQuestions = loader.getStringList("CheckQuestions"); + Checkers = loader.getIntList("Checkers"); Times = new TimesConfig(loader.with("Times")); // Arena would be here to be in config order but needs Schematic.Size and EnterStages loaded afterwards Schematic = new SchematicConfig<>(loader.with("Schematic")); diff --git a/VelocityCore/src/de/steamwar/messages/BungeeCore.properties b/VelocityCore/src/de/steamwar/messages/BungeeCore.properties index cdec29b8..42605662 100644 --- a/VelocityCore/src/de/steamwar/messages/BungeeCore.properties +++ b/VelocityCore/src/de/steamwar/messages/BungeeCore.properties @@ -319,6 +319,7 @@ CHECK_LIST_CHECKING_HOVER=§eTo the reviewer CHECK_SCHEMATIC_ALREADY_CHECKING=§cYou are already reviewing a schematic! CHECK_SCHEMATIC_OWN=§cYou cannot review your own schematics. CHECK_SCHEMATIC_OWN_TEAM=§cYou cannot review your team schematics. +CHECK_SCHEMATIC_EVENT=§cYou cannot check the schematic for the event. CHECK_SCHEMATIC_PREVIOUS=§7{0} from {1}§8: §e{2} CHECK_INVALID_RANK=§cUnknown schematic rank. CHECK_ABORT=§aThe test operation was canceled! diff --git a/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties b/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties index ba79c219..a79cfdf7 100644 --- a/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties +++ b/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties @@ -301,6 +301,7 @@ 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_OWN_TEAM=§cDu kannst nicht Schematics deines Teams prüfen. +CHECK_SCHEMATIC_EVENT=§cDu kannst die schematic für das Event nicht prüfen. CHECK_SCHEMATIC_PREVIOUS=§7{0} von {1}§8: §e{2} CHECK_INVALID_RANK=§cUnbekannter Schematicrang. CHECK_ABORT=§aDer Prüfvorgang wurde abgebrochen! diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java index 722a1193..43c4feb6 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java @@ -21,7 +21,6 @@ package de.steamwar.velocitycore.commands; import com.velocitypowered.api.proxy.Player; import de.steamwar.command.SWCommand; -import de.steamwar.sql.GameModeConfig; import de.steamwar.linkage.Linked; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; @@ -100,17 +99,27 @@ public class CheckCommand extends SWCommand { sender.system("CHECK_LIST_HEADER", schematicList.size()); for (SchematicNode schematic : schematicList) { + GameModeConfig gameModeConfig = ArenaMode.getBySchemType(schematic.getSchemtype()); CheckSession current = currentSchems.get(schematic.getId()); + ClickEvent clickEvent = null; + if (gameModeConfig.Checkers.isEmpty() || gameModeConfig.Checkers.contains(sender.user().getId())) { + if (current == null) { + clickEvent = ClickEvent.runCommand("/check schematic " + schematic.getId()); + } else { + clickEvent = ClickEvent.runCommand("/join " + current.checker.user().getUserName()); + } + } + if (current == null) { sender.prefixless("CHECK_LIST_TO_CHECK", new Message("CHECK_LIST_TO_CHECK_HOVER"), - ClickEvent.runCommand("/check schematic " + schematic.getId()), + clickEvent, getWaitTime(schematic), schematic.getSchemtype().getKuerzel(), SteamwarUser.get(schematic.getOwner()).getUserName(), schematic.getName()); } else { sender.prefixless("CHECK_LIST_CHECKING", new Message("CHECK_LIST_CHECKING_HOVER"), - ClickEvent.runCommand("/join " + current.checker.user().getUserName()), + clickEvent, getWaitTime(schematic), schematic.getSchemtype().getKuerzel(), SteamwarUser.get(schematic.getOwner()).getUserName(), schematic.getName(), current.checker.user().getUserName()); } @@ -125,6 +134,11 @@ public class CheckCommand extends SWCommand { } SchematicNode schem = SchematicNode.getSchematicNode(Integer.parseInt(schemID)); + GameModeConfig gameModeConfig = ArenaMode.getBySchemType(schem.getSchemtype()); + if (!gameModeConfig.Checkers.isEmpty() && !gameModeConfig.Checkers.contains(sender.user().getId())) { + sender.system("CHECK_SCHEMATIC_EVENT"); + return; + } if(!schem.getSchemtype().check()){ VelocityCore.getLogger().log(Level.SEVERE, () -> sender.user().getUserName() + " tried to check an uncheckable schematic!"); return;