From d2650ad97f0e4ac0ba5de334179a4344a4d03b27 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Tue, 3 Dec 2024 15:42:57 +0100 Subject: [PATCH] Remove Servertype enum, fix starting multiple servers at once, --- .../de/steamwar/persistent/Arenaserver.java | 2 +- .../src/de/steamwar/persistent/Bauserver.java | 2 +- .../de/steamwar/persistent/Builderserver.java | 2 +- .../de/steamwar/persistent/Servertype.java | 26 ------ .../src/de/steamwar/persistent/Subserver.java | 25 ++++-- .../src/de/steamwar/messages/Chatter.java | 3 +- .../steamwar/velocitycore/ServerStarter.java | 81 ++++++++++--------- .../velocitycore/commands/ArenaCommand.java | 9 +-- .../velocitycore/commands/BauCommand.java | 2 +- .../commands/ChallengeCommand.java | 10 +-- .../velocitycore/commands/CheckCommand.java | 12 +-- .../velocitycore/commands/FightCommand.java | 11 ++- .../velocitycore/commands/ListCommand.java | 8 +- .../velocitycore/commands/SendCommand.java | 10 +-- .../velocitycore/commands/TpCommand.java | 50 +++++------- .../commands/TutorialCommand.java | 15 ++-- .../velocitycore/listeners/ChatListener.java | 3 +- .../velocitycore/listeners/CheckListener.java | 13 +-- .../listeners/ConnectionListener.java | 3 +- .../velocitycore/tablist/TablistBuild.java | 8 +- .../velocitycore/tablist/TablistManager.java | 3 +- .../velocitycore/tablist/TablistServer.java | 8 +- 22 files changed, 130 insertions(+), 176 deletions(-) delete mode 100644 VelocityCore/Persistent/src/de/steamwar/persistent/Servertype.java diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Arenaserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Arenaserver.java index c283090b..450d771a 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Arenaserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Arenaserver.java @@ -29,7 +29,7 @@ public class Arenaserver extends Subserver { private final boolean allowMerge; public Arenaserver(String serverName, String mode, String map, boolean allowMerge, int port, ProcessBuilder processBuilder, Runnable shutdownCallback) { - super(Servertype.ARENA, serverName, port, processBuilder, shutdownCallback, null); + super(serverName, port, processBuilder, shutdownCallback, null); this.mode = mode; this.map = map; this.allowMerge = allowMerge; diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Bauserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Bauserver.java index fecd1ae1..85bf581a 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Bauserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Bauserver.java @@ -42,7 +42,7 @@ public class Bauserver extends Subserver { } public Bauserver(String serverName, UUID owner, int port, ProcessBuilder processBuilder, Runnable shutdownCallback, Consumer failureCallback){ - super(Servertype.BAUSERVER, serverName, port, processBuilder, shutdownCallback, failureCallback); + super(serverName, port, processBuilder, shutdownCallback, failureCallback); this.owner = owner; synchronized (servers) { diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Builderserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Builderserver.java index ad90b8a2..4a01c7d4 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Builderserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Builderserver.java @@ -41,7 +41,7 @@ public class Builderserver extends Subserver { } public Builderserver(String serverName, String map, int port, ProcessBuilder processBuilder, Runnable shutdownCallback, Consumer failureCallback){ - super(Servertype.BUILDER, serverName, port, processBuilder, shutdownCallback, failureCallback); + super(serverName, port, processBuilder, shutdownCallback, failureCallback); this.map = map; synchronized (servers) { diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Servertype.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Servertype.java deleted file mode 100644 index 4731a2eb..00000000 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Servertype.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2024 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.persistent; - -public enum Servertype { - BAUSERVER, - ARENA, - BUILDER -} diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java index 5d262ccf..9853044c 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java @@ -38,9 +38,20 @@ import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; -@SuppressWarnings("unused") public class Subserver { + public static boolean isArena(Subserver subserver) { + return subserver instanceof Arenaserver; + } + + public static boolean isBuild(Subserver subserver) { + return subserver instanceof Bauserver; + } + + public static boolean isBuilder(Subserver subserver) { + return subserver instanceof Builderserver; + } + private static final Component PREFIX = Component .text("Steam").color(NamedTextColor.YELLOW) .append(Component.text("War» ").color(NamedTextColor.DARK_GRAY)); @@ -84,8 +95,6 @@ public class Subserver { private final ServerInfo server; @Getter private RegisteredServer registeredServer; - @Getter - private final Servertype type; private final Thread thread; @Getter private boolean started; @@ -94,10 +103,9 @@ public class Subserver { @Getter private final Map tablistNames = new HashMap<>(); - protected Subserver(Servertype type, String serverName, int port, ProcessBuilder processBuilder, Runnable shutdownCallback, Consumer failureCallback) { + protected Subserver(String serverName, int port, ProcessBuilder processBuilder, Runnable shutdownCallback, Consumer failureCallback) { this.started = false; this.serverName = serverName; - this.type = type; this.shutdownCallback = shutdownCallback; this.failureCallback = failureCallback == null ? this::fatalError : failureCallback; this.checkpoint = processBuilder.command().contains("criu"); @@ -112,6 +120,8 @@ public class Subserver { this.server = new ServerInfo(serverName, address); this.writer = new PrintWriter(process.getOutputStream(), true); + register(); + this.thread = new Thread(this::run, "Subserver " + serverName); this.thread.start(); } @@ -146,7 +156,8 @@ public class Subserver { process.destroyForcibly(); } - thread.join(); + if(thread.isAlive()) + thread.join(); } catch (InterruptedException e) { logger.log(Level.SEVERE, "Subserver stop interrupted!", e); Thread.currentThread().interrupt(); @@ -205,8 +216,6 @@ public class Subserver { } private void run() { - register(); - Exception ex = null; try { if (checkpoint) { diff --git a/VelocityCore/src/de/steamwar/messages/Chatter.java b/VelocityCore/src/de/steamwar/messages/Chatter.java index 224b502f..2e67354c 100644 --- a/VelocityCore/src/de/steamwar/messages/Chatter.java +++ b/VelocityCore/src/de/steamwar/messages/Chatter.java @@ -24,7 +24,6 @@ import com.velocitypowered.api.event.ResultedEvent; import com.velocitypowered.api.event.connection.LoginEvent; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; -import de.steamwar.persistent.Servertype; import de.steamwar.persistent.Subserver; import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.UserPerm; @@ -64,7 +63,7 @@ public interface Chatter { static ChatterGroup globalChat() { return new ChatterGroup(Stream.concat(Stream.of(Chatter.console()), allPlayers().filter(player -> { Subserver subserver = Subserver.getSubserver(player); - return subserver == null || !(subserver.getType() == Servertype.ARENA && subserver.getServer() == player.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null)); + return !(Subserver.isArena(subserver) && subserver.getServer() == player.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null)); }).map(Chatter::of))); } diff --git a/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java b/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java index 75edf040..f6ee7928 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java +++ b/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java @@ -70,6 +70,7 @@ public class ServerStarter { private boolean checkpoint = false; private ServerConstructor constructor = (serverName, port, builder, shutdownCallback, failureCallback) -> new Arenaserver(serverName, gameMode, fightMap, allowMerge, port, builder, shutdownCallback); private Consumer callback = subserver -> {}; + private Object responsible = new Object(); private final Set playersToSend = new HashSet<>(); private final Map arguments = new HashMap<>(); @@ -245,6 +246,10 @@ public class ServerStarter { public ServerStarter send(Player player) { playersToSend.add(player); + + if(!(responsible instanceof Player)) + responsible = player; + return this; } @@ -253,47 +258,49 @@ public class ServerStarter { return this; } - public boolean start() { - if(!startCondition.getAsBoolean()) - return false; + public void start() { + VelocityCore.schedule(() -> { + synchronized (responsible) { + if(!startCondition.getAsBoolean()) + return; - int port = portrange.freePort(); - String serverName = serverNameProvider.apply(port); + int port = portrange.freePort(); + String serverName = serverNameProvider.apply(port); - if(node == null) { - node = Node.getNode(); - if(node == null) { - for (Player p : playersToSend) - Chatter.of(p).system("SERVER_START_OVERLOAD"); + if(node == null) { + node = Node.getNode(); + if(node == null) { + for (Player p : playersToSend) + Chatter.of(p).system("SERVER_START_OVERLOAD"); - return false; + return; + } + } + if(worldName == null) + worldName = serverToWorldName(serverName); + + worldSetup.run(); + arguments.put("logPath", worldName); + + File checkpointDir = new File("/tmp/" + System.getProperty("user.name") + ".checkpoints/" + directory.getName() + "/" + worldName); + if(checkpoint) + arguments.put("checkpoint", checkpointDir.getPath()); + + if(checkpoint && checkpointDir.exists()) { + try(DataOutputStream out = new DataOutputStream(Files.newOutputStream(new File(checkpointDir, "port").toPath()))) { + out.writeInt(port); + } catch (IOException e) { + throw new SecurityException(e); + } + + postStart(constructor.construct(serverName, port, node.prepareExecution( + "criu", "restore", "-D", checkpointDir.getPath(), "--auto-dedup", "--shell-job", "-v" + ), worldCleanup, e -> regularStart(serverName, port))); + } else { + regularStart(serverName, port); + } } - } - if(worldName == null) - worldName = serverToWorldName(serverName); - - worldSetup.run(); - arguments.put("logPath", worldName); - - File checkpointDir = new File("/tmp/" + System.getProperty("user.name") + ".checkpoints/" + directory.getName() + "/" + worldName); - if(checkpoint) - arguments.put("checkpoint", checkpointDir.getPath()); - - if(checkpoint && checkpointDir.exists()) { - try(DataOutputStream out = new DataOutputStream(Files.newOutputStream(new File(checkpointDir, "port").toPath()))) { - out.writeInt(port); - } catch (IOException e) { - throw new SecurityException(e); - } - - postStart(constructor.construct(serverName, port, node.prepareExecution( - "criu", "restore", "-D", checkpointDir.getPath(), "--auto-dedup", "--shell-job", "-v" - ), worldCleanup, e -> regularStart(serverName, port))); - } else { - regularStart(serverName, port); - } - - return true; + }).schedule(); } private void regularStart(String serverName, int port) { diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/ArenaCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/ArenaCommand.java index 1fa04e0e..cee6cb04 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/ArenaCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/ArenaCommand.java @@ -20,14 +20,13 @@ package de.steamwar.velocitycore.commands; import com.velocitypowered.api.proxy.server.RegisteredServer; -import de.steamwar.persistent.Servertype; -import de.steamwar.persistent.Subserver; -import de.steamwar.velocitycore.VelocityCore; import de.steamwar.command.PreviousArguments; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeMapper; import de.steamwar.messages.Chatter; import de.steamwar.messages.PlayerChatter; +import de.steamwar.persistent.Subserver; +import de.steamwar.velocitycore.VelocityCore; import java.util.Collection; import java.util.List; @@ -53,7 +52,7 @@ public class ArenaCommand extends SWCommand { @Override public boolean validate(Chatter sender, Subserver value, MessageSender messageSender) { - if (value == null || value.getType() != Servertype.ARENA) { + if (!Subserver.isArena(value)) { sender.system("ARENA_NOT_FOUND"); return false; } @@ -64,7 +63,7 @@ public class ArenaCommand extends SWCommand { public Collection tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) { List subserverList = Subserver.getServerList(); synchronized (subserverList) { - return subserverList.stream().filter(subserver -> subserver.getType() == Servertype.ARENA).map(subserver -> subserver.getServer().getName()).toList(); + return subserverList.stream().filter(Subserver::isArena).map(subserver -> subserver.getServer().getName()).toList(); } } }; diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/BauCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/BauCommand.java index 3e1b5d74..1584951b 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/BauCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/BauCommand.java @@ -223,7 +223,7 @@ public class BauCommand extends SWCommand { @Register("testarena") public void testarena(PlayerChatter sender, @Mapper("nonHistoricArenaMode") @OptionalValue("") @AllowNull ArenaMode arenaMode, @Mapper("arenaMap") @OptionalValue("") @AllowNull String map) { FightCommand.createArena(sender, "/bau testarena ", false, arenaMode, map, false, (chatter, mode, m) -> - VelocityCore.schedule(() -> new ServerStarter().test(mode, m, sender.getPlayer()).start()).schedule() + new ServerStarter().test(mode, m, sender.getPlayer()).start() ); } diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/ChallengeCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/ChallengeCommand.java index ddc33654..78ced8d1 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/ChallengeCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/ChallengeCommand.java @@ -20,16 +20,15 @@ package de.steamwar.velocitycore.commands; import com.velocitypowered.api.proxy.Player; -import de.steamwar.velocitycore.ArenaMode; -import de.steamwar.velocitycore.ServerStarter; -import de.steamwar.persistent.Servertype; -import de.steamwar.persistent.Subserver; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeValidator; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; import de.steamwar.messages.PlayerChatter; +import de.steamwar.persistent.Subserver; import de.steamwar.sql.IgnoreSystem; +import de.steamwar.velocitycore.ArenaMode; +import de.steamwar.velocitycore.ServerStarter; import net.kyori.adventure.text.event.ClickEvent; import java.util.LinkedList; @@ -84,8 +83,7 @@ public class ChallengeCommand extends SWCommand { return false; } - Subserver subserver = Subserver.getSubserver(value); - if (subserver != null && subserver.getType() == Servertype.ARENA) { + if (Subserver.isArena(Subserver.getSubserver(value))) { messageSender.send("CHALLENGE_INARENA"); return false; } diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java index 7fb5118a..c678fa4c 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java @@ -207,19 +207,15 @@ public class CheckCommand extends SWCommand { this.startTime = Timestamp.from(Instant.now()); this.checkList = checkQuestions.get(schematic.getSchemtype()).listIterator(); - VelocityCore.schedule(() -> { - ArenaMode mode = ArenaMode.getBySchemType(fightTypes.get(schematic.getSchemtype())); - if(!new ServerStarter().test(mode, mode.getRandomMap(), checker.getPlayer()).check(schematic.getId()).start()) { - remove(); - return; - } - + ArenaMode mode = ArenaMode.getBySchemType(fightTypes.get(schematic.getSchemtype())); + new ServerStarter().test(mode, mode.getRandomMap(), checker.getPlayer()).check(schematic.getId()).callback(subserver -> { currentCheckers.put(checker.user().getUUID(), this); currentSchems.put(schematic.getId(), this); + for(CheckedSchematic previous : CheckedSchematic.previousChecks(schematic)) checker.prefixless("CHECK_SCHEMATIC_PREVIOUS", previous.getEndTime(), SteamwarUser.get(previous.getValidator()).getUserName(), previous.getDeclineReason()); next(); - }).schedule(); + }).start(); } private void next() { diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/FightCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/FightCommand.java index 633405e8..29147c99 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/FightCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/FightCommand.java @@ -20,16 +20,16 @@ package de.steamwar.velocitycore.commands; import com.velocitypowered.api.proxy.Player; -import de.steamwar.velocitycore.*; -import de.steamwar.velocitycore.inventory.SWInventory; -import de.steamwar.velocitycore.inventory.SWItem; import de.steamwar.command.SWCommand; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; import de.steamwar.messages.PlayerChatter; import de.steamwar.persistent.Arenaserver; -import de.steamwar.persistent.Servertype; import de.steamwar.persistent.Subserver; +import de.steamwar.velocitycore.ArenaMode; +import de.steamwar.velocitycore.ServerStarter; +import de.steamwar.velocitycore.inventory.SWInventory; +import de.steamwar.velocitycore.inventory.SWItem; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; @@ -61,8 +61,7 @@ public class FightCommand extends SWCommand { } private static boolean alreadyInArena(PlayerChatter sender){ - Subserver subserver = Subserver.getSubserver(sender.getPlayer()); - if(subserver != null && subserver.getType() == Servertype.ARENA){ + if(Subserver.isArena(Subserver.getSubserver(sender.getPlayer()))){ sender.system("FIGHT_IN_ARENA"); return true; } diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/ListCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/ListCommand.java index d2659836..1505b438 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/ListCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/ListCommand.java @@ -21,11 +21,10 @@ package de.steamwar.velocitycore.commands; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; -import de.steamwar.persistent.Servertype; -import de.steamwar.persistent.Subserver; -import de.steamwar.velocitycore.VelocityCore; import de.steamwar.command.SWCommand; import de.steamwar.messages.Chatter; +import de.steamwar.persistent.Subserver; +import de.steamwar.velocitycore.VelocityCore; import java.util.ArrayList; import java.util.List; @@ -46,8 +45,7 @@ public class ListCommand extends SWCommand { if (pserver == null) continue; - Subserver subserver = Subserver.getSubserver(pserver.getServerInfo()); - if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { + if (Subserver.isBuild(Subserver.getSubserver(pserver.getServerInfo()))) { playerMap.computeIfAbsent("Bau", s -> new ArrayList<>()).add(player); } else { playerMap.computeIfAbsent(pserver.getServerInfo().getName(), s -> new ArrayList<>()).add(player); diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/SendCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/SendCommand.java index de9a73f3..a0435983 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/SendCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/SendCommand.java @@ -55,15 +55,7 @@ public class SendCommand extends SWCommand { if (name.contains(" ")) return false; Subserver subserver = Subserver.getSubserver(serverInfo); - if (subserver == null) { - return true; - } - - return switch (subserver.getType()) { - case ARENA -> true; - case BUILDER -> user.hasPerm(UserPerm.BUILD); - default -> false; - }; + return subserver == null || Subserver.isArena(subserver) || (Subserver.isBuilder(subserver) && user.hasPerm(UserPerm.BUILD)); } @Override diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java index 031e2baa..2292c258 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/TpCommand.java @@ -110,37 +110,31 @@ public class TpCommand extends SWCommand { return; } - switch (subserver.getType()) { - case ARENA: - if (PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) - return; - break; - - case BAUSERVER: - Bauserver bauserver = (Bauserver) subserver; - Player checker = VelocityCore.getProxy().getPlayer(bauserver.getOwner()).orElse(null); - 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"); - Chatter.of(bauserver.getOwner()).system("BAU_LOCK_BLOCKED", sender); - return; - } else if (!bauserver.getOwner().equals(sender.user().getUUID()) && BauweltMember.getBauMember(bauserver.getOwner(), sender.user().getUUID()) == null) { - SubserverSystem.sendDeniedMessage(sender, bauserver.getOwner()); + if(Subserver.isArena(subserver)) { + if (PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) + return; + } else if(Subserver.isBuild(subserver)) { + Bauserver bauserver = (Bauserver) subserver; + Player checker = VelocityCore.getProxy().getPlayer(bauserver.getOwner()).orElse(null); + 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; } - break; - - case BUILDER: - if(!sender.user().hasPerm(UserPerm.BUILD)) { - sender.system("JOIN_PLAYER_BLOCK"); - return; - } - break; + } else if (BauLock.isLocked(SteamwarUser.get(bauserver.getOwner()), sender.user())) { + sender.system("BAU_LOCKED_NOALLOWED"); + Chatter.of(bauserver.getOwner()).system("BAU_LOCK_BLOCKED", sender); + return; + } else if (!bauserver.getOwner().equals(sender.user().getUUID()) && BauweltMember.getBauMember(bauserver.getOwner(), sender.user().getUUID()) == null) { + SubserverSystem.sendDeniedMessage(sender, bauserver.getOwner()); + sender.system("JOIN_PLAYER_BLOCK"); + return; + } + } else if(Subserver.isBuilder(subserver)) { + if(!sender.user().hasPerm(UserPerm.BUILD)) { + sender.system("JOIN_PLAYER_BLOCK"); + return; + } } SubserverSystem.sendPlayer(subserver, sender.getPlayer()); diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/TutorialCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/TutorialCommand.java index 5b4e01fa..877b7479 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/TutorialCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/TutorialCommand.java @@ -19,21 +19,22 @@ package de.steamwar.velocitycore.commands; -import de.steamwar.velocitycore.*; -import de.steamwar.velocitycore.inventory.SWInventory; -import de.steamwar.velocitycore.inventory.SWItem; -import de.steamwar.velocitycore.inventory.SWListInv; -import de.steamwar.velocitycore.inventory.SWStreamInv; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeValidator; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; import de.steamwar.messages.PlayerChatter; -import de.steamwar.persistent.Servertype; import de.steamwar.persistent.Subserver; import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.Tutorial; import de.steamwar.sql.UserPerm; +import de.steamwar.velocitycore.ServerStarter; +import de.steamwar.velocitycore.SubserverSystem; +import de.steamwar.velocitycore.VelocityCore; +import de.steamwar.velocitycore.inventory.SWInventory; +import de.steamwar.velocitycore.inventory.SWItem; +import de.steamwar.velocitycore.inventory.SWListInv; +import de.steamwar.velocitycore.inventory.SWStreamInv; import java.io.File; import java.util.Arrays; @@ -140,7 +141,7 @@ public class TutorialCommand extends SWCommand { SteamwarUser user = sender.user(); File tempWorld = new File(ServerStarter.TEMP_WORLD_PATH, ServerStarter.serverToWorldName(ServerStarter.bauServerName(user))); - if(subserver == null || !subserver.isStarted() || subserver.getType() != Servertype.BAUSERVER || !tempWorld.exists()) { + if(!Subserver.isBuild(subserver) || !subserver.isStarted() || !tempWorld.exists()) { sender.system("TUTORIAL_CREATE_MISSING"); return; } diff --git a/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java b/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java index 0880a0bf..0445be62 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java +++ b/VelocityCore/src/de/steamwar/velocitycore/listeners/ChatListener.java @@ -32,7 +32,6 @@ import de.steamwar.messages.ChatterGroup; import de.steamwar.messages.Message; import de.steamwar.messages.PlayerChatter; import de.steamwar.network.packets.server.PingPacket; -import de.steamwar.persistent.Servertype; import de.steamwar.persistent.Subserver; import de.steamwar.sql.*; import de.steamwar.velocitycore.ArenaMode; @@ -110,7 +109,7 @@ public class ChatListener extends BasicListener { return; Subserver subserver = Subserver.getSubserver(player); - if(subserver != null && subserver.getType() == Servertype.ARENA && subserver.getServer() == player.getCurrentServer().orElseThrow().getServerInfo()) { + if(Subserver.isArena(subserver) && subserver.getServer() == player.getCurrentServer().orElseThrow().getServerInfo()) { localChat(Chatter.of(player), message); } else if (message.startsWith("+")) { localChat(Chatter.of(player), message.substring(1)); diff --git a/VelocityCore/src/de/steamwar/velocitycore/listeners/CheckListener.java b/VelocityCore/src/de/steamwar/velocitycore/listeners/CheckListener.java index 46668160..4c8ef131 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/listeners/CheckListener.java +++ b/VelocityCore/src/de/steamwar/velocitycore/listeners/CheckListener.java @@ -24,13 +24,12 @@ import com.velocitypowered.api.event.connection.DisconnectEvent; import com.velocitypowered.api.event.connection.PostLoginEvent; import com.velocitypowered.api.event.player.ServerConnectedEvent; import com.velocitypowered.api.proxy.Player; -import de.steamwar.persistent.Bauserver; -import de.steamwar.persistent.Servertype; -import de.steamwar.persistent.Subserver; -import de.steamwar.velocitycore.commands.CheckCommand; import de.steamwar.messages.Chatter; +import de.steamwar.persistent.Bauserver; +import de.steamwar.persistent.Subserver; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SchematicType; +import de.steamwar.velocitycore.commands.CheckCommand; import java.util.ArrayList; import java.util.List; @@ -56,11 +55,7 @@ public class CheckListener extends BasicListener { Player player = e.getPlayer(); if(CheckCommand.isChecking(player)){ Subserver server = Subserver.getSubserver(e.getServer().getServerInfo()); - if( - server == null || - server.getType() != Servertype.BAUSERVER || - ((Bauserver)server).getOwner() != player.getUniqueId() - ) + if(!Subserver.isBuild(server) || ((Bauserver)server).getOwner() != player.getUniqueId()) CheckCommand.abort(player); } } diff --git a/VelocityCore/src/de/steamwar/velocitycore/listeners/ConnectionListener.java b/VelocityCore/src/de/steamwar/velocitycore/listeners/ConnectionListener.java index ec8d1726..c1a4b51d 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/listeners/ConnectionListener.java +++ b/VelocityCore/src/de/steamwar/velocitycore/listeners/ConnectionListener.java @@ -27,7 +27,6 @@ import com.velocitypowered.api.permission.Tristate; import com.velocitypowered.api.proxy.Player; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; -import de.steamwar.persistent.Servertype; import de.steamwar.persistent.Subserver; import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.UserPerm; @@ -77,7 +76,7 @@ public class ConnectionListener extends BasicListener { CheckCommand.sendReminder(chatter); for(Subserver subserver : Subserver.getServerList()) { - if(subserver.getType() == Servertype.ARENA) { + if(Subserver.isArena(subserver)) { chatter.system("JOIN_ARENA", new Message("JOIN_ARENA_HOVER"), ClickEvent.runCommand("/arena " + subserver.getServer().getName()), subserver.getServer().getName()); } } diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistBuild.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistBuild.java index 26e22837..6fdd8f4c 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistBuild.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistBuild.java @@ -22,10 +22,9 @@ package de.steamwar.velocitycore.tablist; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.server.RegisteredServer; -import de.steamwar.persistent.Servertype; +import de.steamwar.messages.Chatter; import de.steamwar.persistent.Subserver; import de.steamwar.velocitycore.VelocityCore; -import de.steamwar.messages.Chatter; import java.util.ArrayList; import java.util.HashMap; @@ -38,9 +37,8 @@ public class TablistBuild implements TablistPart { private final Map> players = new HashMap<>(); public TablistBuild() { - for (RegisteredServer server : VelocityCore.getProxy().getAllServers()){ - Subserver subserver = Subserver.getSubserver(server.getServerInfo()); - if(server.getPlayersConnected().isEmpty() || subserver == null || subserver.getType() != Servertype.BAUSERVER) + for (RegisteredServer server : VelocityCore.getProxy().getAllServers()) { + if(server.getPlayersConnected().isEmpty() || !Subserver.isBuild(Subserver.getSubserver(server.getServerInfo()))) continue; servers.add(server); diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java index 06c0d725..205cf067 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java @@ -27,7 +27,6 @@ import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; import de.steamwar.network.packets.common.FightInfoPacket; -import de.steamwar.persistent.Servertype; import de.steamwar.persistent.Storage; import de.steamwar.persistent.Subserver; import de.steamwar.velocitycore.VelocityCore; @@ -100,7 +99,7 @@ public class TablistManager extends BasicListener { Subserver subserver = Subserver.getSubserver(server.getServerInfo()); if (fightInfos.containsKey(server)) subservers.add(new TablistServer(server, fightInfos.get(server))); - else if (subserver == null || subserver.getType() != Servertype.BAUSERVER) + else if (!Subserver.isBuild(subserver)) subservers.add(new TablistServer(server)); } subservers.add(new TablistBuild()); diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistServer.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistServer.java index 6601f2ca..88ba9a86 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistServer.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistServer.java @@ -23,12 +23,11 @@ import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.util.GameProfile; -import de.steamwar.persistent.Servertype; -import de.steamwar.persistent.Subserver; -import de.steamwar.velocitycore.VelocityCore; import de.steamwar.messages.Chatter; import de.steamwar.network.packets.common.FightInfoPacket; +import de.steamwar.persistent.Subserver; import de.steamwar.sql.SteamwarUser; +import de.steamwar.velocitycore.VelocityCore; import java.util.ArrayList; import java.util.Collection; @@ -94,8 +93,7 @@ public class TablistServer implements TablistPart { return players.stream().map(item -> { Player p = VelocityCore.getProxy().getPlayer(item.getUuid()).orElse(null); if (p == null) return item; - Subserver subserver = Subserver.getSubserver(p.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null)); - if (subserver != null && subserver.getType() == Servertype.ARENA) return item; + if (Subserver.isArena(Subserver.getSubserver(p.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null)))) return item; if (SteamwarUser.get(p.getUniqueId()).getTeam() != team) return item; return new Item(p, true); });