mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2024-11-22 12:18:01 +00:00
check if player is really on the proxy when connecting
this prevents logged in error if somehow proxy shutdowns at weird time
This commit is contained in:
parent
d8704c8a8f
commit
69e91c3e42
@ -82,6 +82,13 @@ public abstract class ProxyDataManager implements Runnable {
|
||||
return getProxyMembers(proxyId);
|
||||
}
|
||||
|
||||
// this skip checking if proxy is and its package private
|
||||
// due proxy shutdown shenanigans
|
||||
public boolean isPlayerTrulyOnProxy(String proxyId, UUID uuid) {
|
||||
return unifiedJedis.sismember("redisbungee::" + this.networkId + "::proxies::" + proxyId + "::online-players", uuid.toString());
|
||||
}
|
||||
|
||||
|
||||
public List<String> proxiesIds() {
|
||||
return Collections.list(this.heartbeats.keys());
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerChangedServerNetworkEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.LoginEvent;
|
||||
@ -66,6 +65,12 @@ public class BungeePlayerDataManager extends PlayerDataManager<ProxiedPlayer, Po
|
||||
event.registerIntent((Plugin) plugin);
|
||||
// check if online
|
||||
if (getLastOnline(event.getConnection().getUniqueId()) == 0) {
|
||||
// because something can go wrong and proxy somehow does not update player data correctly on shutdown
|
||||
// we have to check proxy if it has the player
|
||||
String proxyId = getProxyFor(event.getConnection().getUniqueId());
|
||||
if (proxyId == null || !plugin.proxyDataManager().isPlayerTrulyOnProxy(proxyId, event.getConnection().getUniqueId())) {
|
||||
event.completeIntent((Plugin) plugin);
|
||||
} else {
|
||||
if (plugin.configuration().kickWhenOnline()) {
|
||||
kickPlayer(event.getConnection().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation());
|
||||
// wait 3 seconds before releasing the event
|
||||
@ -75,6 +80,7 @@ public class BungeePlayerDataManager extends PlayerDataManager<ProxiedPlayer, Po
|
||||
event.setCancelReason(BungeeComponentSerializer.get().serialize(plugin.langConfiguration().messages().alreadyLoggedIn()));
|
||||
event.completeIntent((Plugin) plugin);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
event.completeIntent((Plugin) plugin);
|
||||
}
|
||||
|
@ -68,6 +68,12 @@ public class VelocityPlayerDataManager extends PlayerDataManager<Player, PostLog
|
||||
public void onLoginEvent(LoginEvent event, Continuation continuation) {
|
||||
// check if online
|
||||
if (getLastOnline(event.getPlayer().getUniqueId()) == 0) {
|
||||
// because something can go wrong and proxy somehow does not update player data correctly on shutdown
|
||||
// we have to check proxy if it has the player
|
||||
String proxyId = getProxyFor(event.getPlayer().getUniqueId());
|
||||
if (proxyId == null || !plugin.proxyDataManager().isPlayerTrulyOnProxy(proxyId, event.getPlayer().getUniqueId())) {
|
||||
continuation.resume();
|
||||
} else {
|
||||
if (plugin.configuration().kickWhenOnline()) {
|
||||
kickPlayer(event.getPlayer().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation());
|
||||
// wait 3 seconds before releasing the event
|
||||
@ -76,6 +82,7 @@ public class VelocityPlayerDataManager extends PlayerDataManager<Player, PostLog
|
||||
event.setResult(ResultedEvent.ComponentResult.denied(plugin.langConfiguration().messages().alreadyLoggedIn()));
|
||||
continuation.resume();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
continuation.resume();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user