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);
|
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() {
|
public List<String> proxiesIds() {
|
||||||
return Collections.list(this.heartbeats.keys());
|
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.PlayerChangedServerNetworkEvent;
|
||||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent;
|
import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent;
|
||||||
import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent;
|
import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.event.LoginEvent;
|
import net.md_5.bungee.api.event.LoginEvent;
|
||||||
@ -66,14 +65,21 @@ public class BungeePlayerDataManager extends PlayerDataManager<ProxiedPlayer, Po
|
|||||||
event.registerIntent((Plugin) plugin);
|
event.registerIntent((Plugin) plugin);
|
||||||
// check if online
|
// check if online
|
||||||
if (getLastOnline(event.getConnection().getUniqueId()) == 0) {
|
if (getLastOnline(event.getConnection().getUniqueId()) == 0) {
|
||||||
if (plugin.configuration().kickWhenOnline()) {
|
// because something can go wrong and proxy somehow does not update player data correctly on shutdown
|
||||||
kickPlayer(event.getConnection().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation());
|
// we have to check proxy if it has the player
|
||||||
// wait 3 seconds before releasing the event
|
String proxyId = getProxyFor(event.getConnection().getUniqueId());
|
||||||
plugin.executeAsyncAfter(() -> event.completeIntent((Plugin) plugin), TimeUnit.SECONDS, 3);
|
if (proxyId == null || !plugin.proxyDataManager().isPlayerTrulyOnProxy(proxyId, event.getConnection().getUniqueId())) {
|
||||||
} else {
|
|
||||||
event.setCancelled(true);
|
|
||||||
event.setCancelReason(BungeeComponentSerializer.get().serialize(plugin.langConfiguration().messages().alreadyLoggedIn()));
|
|
||||||
event.completeIntent((Plugin) plugin);
|
event.completeIntent((Plugin) plugin);
|
||||||
|
} else {
|
||||||
|
if (plugin.configuration().kickWhenOnline()) {
|
||||||
|
kickPlayer(event.getConnection().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation());
|
||||||
|
// wait 3 seconds before releasing the event
|
||||||
|
plugin.executeAsyncAfter(() -> event.completeIntent((Plugin) plugin), TimeUnit.SECONDS, 3);
|
||||||
|
} else {
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.setCancelReason(BungeeComponentSerializer.get().serialize(plugin.langConfiguration().messages().alreadyLoggedIn()));
|
||||||
|
event.completeIntent((Plugin) plugin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
event.completeIntent((Plugin) plugin);
|
event.completeIntent((Plugin) plugin);
|
||||||
|
@ -68,13 +68,20 @@ public class VelocityPlayerDataManager extends PlayerDataManager<Player, PostLog
|
|||||||
public void onLoginEvent(LoginEvent event, Continuation continuation) {
|
public void onLoginEvent(LoginEvent event, Continuation continuation) {
|
||||||
// check if online
|
// check if online
|
||||||
if (getLastOnline(event.getPlayer().getUniqueId()) == 0) {
|
if (getLastOnline(event.getPlayer().getUniqueId()) == 0) {
|
||||||
if (plugin.configuration().kickWhenOnline()) {
|
// because something can go wrong and proxy somehow does not update player data correctly on shutdown
|
||||||
kickPlayer(event.getPlayer().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation());
|
// we have to check proxy if it has the player
|
||||||
// wait 3 seconds before releasing the event
|
String proxyId = getProxyFor(event.getPlayer().getUniqueId());
|
||||||
plugin.executeAsyncAfter(continuation::resume, TimeUnit.SECONDS, 3);
|
if (proxyId == null || !plugin.proxyDataManager().isPlayerTrulyOnProxy(proxyId, event.getPlayer().getUniqueId())) {
|
||||||
} else {
|
|
||||||
event.setResult(ResultedEvent.ComponentResult.denied(plugin.langConfiguration().messages().alreadyLoggedIn()));
|
|
||||||
continuation.resume();
|
continuation.resume();
|
||||||
|
} else {
|
||||||
|
if (plugin.configuration().kickWhenOnline()) {
|
||||||
|
kickPlayer(event.getPlayer().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation());
|
||||||
|
// wait 3 seconds before releasing the event
|
||||||
|
plugin.executeAsyncAfter(continuation::resume, TimeUnit.SECONDS, 3);
|
||||||
|
} else {
|
||||||
|
event.setResult(ResultedEvent.ComponentResult.denied(plugin.langConfiguration().messages().alreadyLoggedIn()));
|
||||||
|
continuation.resume();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
continuation.resume();
|
continuation.resume();
|
||||||
|
Loading…
Reference in New Issue
Block a user