forked from SteamWar/SteamWar
Keep spectators in fight chat and treat spectate servers as fight servers
- '+' from a spectator on a fight server stays in the fight chat - Event spectate servers (static servers with a spectate port) use a local fight chat by default and hide the global chat like arenas
This commit is contained in:
@@ -31,8 +31,10 @@ import net.kyori.adventure.text.event.ClickEvent;
|
|||||||
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static de.steamwar.persistent.Storage.eventServer;
|
import static de.steamwar.persistent.Storage.eventServer;
|
||||||
@@ -43,8 +45,15 @@ public class EventStarter {
|
|||||||
@Getter
|
@Getter
|
||||||
private static final Map<Integer, String> spectatePorts = new HashMap<>();
|
private static final Map<Integer, String> spectatePorts = new HashMap<>();
|
||||||
|
|
||||||
public static void addSpectateServer(int port, String command) {
|
private static final Set<String> spectateServers = new HashSet<>();
|
||||||
|
|
||||||
|
public static void addSpectateServer(int port, String command, String serverName) {
|
||||||
spectatePorts.put(port, command);
|
spectatePorts.put(port, command);
|
||||||
|
spectateServers.add(serverName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSpectateServer(String serverName) {
|
||||||
|
return spectateServers.contains(serverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EventStarter() {
|
public EventStarter() {
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ public class VelocityCore implements ReloadablePlugin {
|
|||||||
String cmd = cmds.remove(0);
|
String cmd = cmds.remove(0);
|
||||||
|
|
||||||
if (server.getSpectatePort() != 0) {
|
if (server.getSpectatePort() != 0) {
|
||||||
EventStarter.addSpectateServer(server.getSpectatePort(), cmd);
|
EventStarter.addSpectateServer(server.getSpectatePort(), cmd, entry.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
new ServerSwitchCommand(cmd, entry.getKey(), server.getSpectatePort() != 0, cmds.toArray(new String[0]));
|
new ServerSwitchCommand(cmd, entry.getKey(), server.getSpectatePort() != 0, cmds.toArray(new String[0]));
|
||||||
|
|||||||
@@ -113,8 +113,11 @@ public class ChatManager extends BasicListener {
|
|||||||
return VelocityCore.getProxy().getServer(server.getServerInfo().getName()).orElse(null) != server;
|
return VelocityCore.getProxy().getServer(server.getServerInfo().getName()).orElse(null) != server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true for arenas and event spectate servers, which use a fight chat instead of the global chat
|
||||||
|
*/
|
||||||
public static boolean isArena(RegisteredServer server) {
|
public static boolean isArena(RegisteredServer server) {
|
||||||
return Subserver.isArena(Subserver.getSubserver(server.getServerInfo()));
|
return Subserver.isArena(Subserver.getSubserver(server.getServerInfo())) || EventStarter.isSpectateServer(server.getServerInfo().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Optional<RegisteredServer> currentServer(Player player) {
|
private static Optional<RegisteredServer> currentServer(Player player) {
|
||||||
@@ -371,14 +374,15 @@ public class ChatManager extends BasicListener {
|
|||||||
RegisteredServer server = currentServer(sender.getPlayer()).orElse(null);
|
RegisteredServer server = currentServer(sender.getPlayer()).orElse(null);
|
||||||
if (server == null) return current;
|
if (server == null) return current;
|
||||||
|
|
||||||
if (current instanceof LocalChannel) {
|
if (current instanceof LocalChannel local) {
|
||||||
FightTeamChannel blue = fightTeam(server, true);
|
FightTeamChannel blue = fightTeam(server, true);
|
||||||
if (blue.isMember(sender)) return blue;
|
if (blue.isMember(sender)) return blue;
|
||||||
|
|
||||||
FightTeamChannel red = fightTeam(server, false);
|
FightTeamChannel red = fightTeam(server, false);
|
||||||
if (red.isMember(sender)) return red;
|
if (red.isMember(sender)) return red;
|
||||||
|
|
||||||
return global;
|
// Spectators on fight servers stay in the fight chat
|
||||||
|
return local.isArena() ? local : global;
|
||||||
}
|
}
|
||||||
|
|
||||||
return local(server);
|
return local(server);
|
||||||
|
|||||||
Reference in New Issue
Block a user