Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions src/main/java/ppn/bungeecord/EventListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -207,15 +207,15 @@ private void scheduleJoinSequence(ProxiedPlayer player, String currentServer, bo
long privateDelayMs = (firstJoin ? plugin.getConfig().getLong("first_join_private_message_delay") : plugin.getConfig().getLong("join_private_message_delay")) * 50L;

plugin.getProxy().getScheduler().schedule(plugin, () -> {
if (!player.isConnected()) {
if (!isConnectedTo(player, currentServer)) {
return;
}
MessageSender.sendMessage(plugin, publicMessageType, player, currentServer, null);
scheduleJoinWebhook(player, currentServer);
}, publicDelayMs, TimeUnit.MILLISECONDS);

plugin.getProxy().getScheduler().schedule(plugin, () -> {
if (!player.isConnected()) {
if (!isConnectedTo(player, currentServer)) {
return;
}
MessageSender.sendPrivateMessage(plugin, privateMessageType, player, currentServer);
Expand All @@ -230,7 +230,7 @@ private void scheduleSwitchDelay(Runnable action) {
private void scheduleJoinWebhook(ProxiedPlayer player, String server) {
long webhookDelayMs = plugin.getConfig().getLong("webhook.join_delay") * 50L;
plugin.getProxy().getScheduler().schedule(plugin, () -> {
if (!player.isConnected()) {
if (!isConnectedTo(player, server)) {
return;
}
sendJoinWebhook(player, server);
Expand All @@ -256,6 +256,11 @@ private String resolveCurrentServer(ProxiedPlayer player) {
return player.getServer().getInfo().getName();
}

private boolean isConnectedTo(ProxiedPlayer player, String server) {
String currentServer = resolveCurrentServer(player);
return player.isConnected() && currentServer != null && currentServer.equalsIgnoreCase(server);
}

private void sendJoinWebhook(ProxiedPlayer player, String server) {
if (!plugin.getConfig().getBoolean("webhook.enabled")) {
return;
Expand Down
19 changes: 15 additions & 4 deletions src/main/java/ppn/velocity/EventListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class EventListener {
private static final int MAX_SERVER_LOOKUP_ATTEMPTS = 5;
private static final long SERVER_LOOKUP_RETRY_MS = 200;
private final Set<UUID> activeWebhookSessions = ConcurrentHashMap.newKeySet();
private final Set<UUID> pendingFirstJoins = ConcurrentHashMap.newKeySet();

public EventListener(VelocityPlayerNotify plugin) {
this.plugin = plugin;
Expand All @@ -51,7 +52,7 @@ public void onJoin(PlayerChooseInitialServerEvent event) {
activeWebhookSessions.remove(player.getUniqueId());
boolean firstJoin = !plugin.getPlayerData().getBoolean("players." + player.getUniqueId() + ".joined");
if (firstJoin) {
plugin.getPlayerData().setOption("players." + player.getUniqueId() + ".joined", true);
pendingFirstJoins.add(player.getUniqueId());
}
long joinDelayMs = (firstJoin ? plugin.getConfig().getLong("first_join_message_delay") : plugin.getConfig().getLong("join_message_delay")) * 50;
scheduleJoinBroadcast(player, firstJoin, joinDelayMs, 0);
Expand All @@ -75,6 +76,10 @@ private void scheduleJoinBroadcast(Player player, boolean firstJoin, long delayM
return;
}

if (firstJoin) {
plugin.getPlayerData().setOption("players." + player.getUniqueId() + ".joined", true);
pendingFirstJoins.remove(player.getUniqueId());
}
MessageSender.sendMessage(plugin, firstJoin ? "first_join_message" : "join_message", player, server, null);
scheduleJoinWebhook(player, server);
plugin.getPlayerLastServer().put(player.getUniqueId(), server);
Expand Down Expand Up @@ -126,10 +131,12 @@ public void onSwitch(ServerConnectedEvent event) {
sendLeaveWebhook(player, lastServer);
}
} else if (plugin.getLimboServers() != null && lastServer != null && plugin.getLimboServers().contains(lastServer.toLowerCase())) {
if (!plugin.getConfig().getStringList("join_private_message").isEmpty()) {
MessageSender.sendPrivateMessage(plugin, "join_private_message", player, currentServer);
boolean firstJoin = pendingFirstJoins.remove(player.getUniqueId());
if (firstJoin) {
plugin.getPlayerData().setOption("players." + player.getUniqueId() + ".joined", true);
}
MessageSender.sendMessage(plugin, "join_message", player, currentServer, null);
MessageSender.sendPrivateMessage(plugin, firstJoin ? "first_join_private_message" : "join_private_message", player, currentServer);
MessageSender.sendMessage(plugin, firstJoin ? "first_join_message" : "join_message", player, currentServer, null);
scheduleJoinWebhook(player, currentServer);
} else {
MessageSender.sendMessage(plugin, "switch_message", player, currentServer, lastServer);
Expand All @@ -148,6 +155,7 @@ public void onLeave(DisconnectEvent event) {
event.getLoginStatus() != DisconnectEvent.LoginStatus.CANCELLED_BY_USER_BEFORE_COMPLETE &&
event.getLoginStatus() != DisconnectEvent.LoginStatus.PRE_SERVER_JOIN) {
Player player = event.getPlayer();
pendingFirstJoins.remove(player.getUniqueId());
boolean sendLeaveWebhook = activeWebhookSessions.remove(player.getUniqueId());
String lastServer = plugin.getPlayerLastServer().remove(player.getUniqueId());
if (lastServer == null) {
Expand All @@ -156,6 +164,9 @@ public void onLeave(DisconnectEvent event) {
if (plugin.getLimboServers() != null && lastServer != null && plugin.getLimboServers().contains(lastServer.toLowerCase())) {
return;
}
if (lastServer == null) {
return;
}
if (lastServer != null && plugin.getConfig().getBoolean("join_last_server")) {
plugin.getPlayerData().setOption("players." + player.getUniqueId() + ".lastServer", lastServer);
}
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/ppn/velocity/VelocityPlayerNotify.java
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,10 @@ public void onProxyInitialize(ProxyInitializeEvent event) {
cm.register(reloadMeta, new Reload(this));
this.proxy.getCommandManager().register("togglemessages", new ToggleMessages(this));
this.proxy.getEventManager().register(this, new EventListener(this));
disabledServers = new HashSet<>(config.getStringList("DisabledServers"));
privateServers = new HashSet<>(config.getStringList("PrivateServers"));
limboServers = new HashSet<>(config.getStringList("LimboServers"));
disabledPlayers = new HashSet<>(config.getStringList("DisabledPlayers"));
disabledServers = toLowercaseSet(config.getStringList("DisabledServers"));
privateServers = toLowercaseSet(config.getStringList("PrivateServers"));
limboServers = toLowercaseSet(config.getStringList("LimboServers"));
disabledPlayers = toLowercaseSet(config.getStringList("DisabledPlayers"));
this.noVanishNotifications = config.getBoolean("disable_vanish_notifications");
if (getProxy().getPluginManager().getPlugin("papiproxybridge").isPresent()) {
try {
Expand Down Expand Up @@ -368,4 +368,14 @@ public String resolveLuckPermsPlaceholders(String message, Player player) {
private String stripLuckPermsPlaceholders(String message) {
return message.replace("%lp_prefix%", "").replace("%lp_suffix%", "");
}

private Set<String> toLowercaseSet(List<String> values) {
Set<String> normalized = new HashSet<>();
for (String value : values) {
if (value != null) {
normalized.add(value.toLowerCase(Locale.ROOT));
}
}
return normalized;
}
}
22 changes: 17 additions & 5 deletions src/main/java/ppn/velocity/commands/Reload.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.kyori.adventure.text.Component;
import ppn.velocity.VelocityPlayerNotify;

import java.util.HashSet;
import java.util.Locale;

public class Reload implements SimpleCommand {

Expand All @@ -26,11 +26,23 @@ public void execute(Invocation invocation) {

plugin.saveDefaultConfig();
plugin.loadConfig();
plugin.setDisabledServers(new HashSet<>(plugin.getConfig().getStringList("DisabledServers")));
plugin.setPrivateServers(new HashSet<>(plugin.getConfig().getStringList("PrivateServers")));
plugin.setLimboServers(new HashSet<>(plugin.getConfig().getStringList("LimboServers")));
plugin.setDisabledServers(plugin.getConfig().getStringList("DisabledServers").stream()
.filter(value -> value != null)
.map(value -> value.toLowerCase(Locale.ROOT))
.collect(java.util.stream.Collectors.toSet()));
plugin.setPrivateServers(plugin.getConfig().getStringList("PrivateServers").stream()
.filter(value -> value != null)
.map(value -> value.toLowerCase(Locale.ROOT))
.collect(java.util.stream.Collectors.toSet()));
plugin.setLimboServers(plugin.getConfig().getStringList("LimboServers").stream()
.filter(value -> value != null)
.map(value -> value.toLowerCase(Locale.ROOT))
.collect(java.util.stream.Collectors.toSet()));
plugin.setNoVanishNotifications(plugin.getConfig().getBoolean("disable_vanish_notifications"));
plugin.setDisabledPlayers(new HashSet<>(plugin.getConfig().getStringList("DisabledPlayers")));
plugin.setDisabledPlayers(plugin.getConfig().getStringList("DisabledPlayers").stream()
.filter(value -> value != null)
.map(value -> value.toLowerCase(Locale.ROOT))
.collect(java.util.stream.Collectors.toSet()));
plugin.getServerNames().clear();
plugin.getConfig().getKeys("ServerNames").forEach(server -> plugin.getServerNames().put(server.toLowerCase(), plugin.getConfig().getString("ServerNames." + server)));
plugin.getConfig().saveConfig();
Expand Down