mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2026-04-08 16:10:26 +00:00
Implement network kick
This commit is contained in:
@@ -3,12 +3,16 @@ package com.imaginarycode.minecraft.redisbungee;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.AbstractDataManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||
import net.md_5.bungee.api.event.PostLoginEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class BungeeDataManager extends AbstractDataManager<ProxiedPlayer, PostLoginEvent, PlayerDisconnectEvent, PubSubMessageEvent> implements Listener {
|
||||
|
||||
public BungeeDataManager(RedisBungeePlugin<ProxiedPlayer> plugin) {
|
||||
@@ -32,4 +36,13 @@ public class BungeeDataManager extends AbstractDataManager<ProxiedPlayer, PostLo
|
||||
public void onPubSubMessage(PubSubMessageEvent event) {
|
||||
handlePubSubMessage(event.getChannel(), event.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKick(UUID target, String message) {
|
||||
// check if the player is online on this proxy
|
||||
ProxiedPlayer player = plugin.getPlayer(target);
|
||||
if (player == null) return false;
|
||||
player.disconnect(TextComponent.fromLegacyText(message));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@ import com.imaginarycode.minecraft.redisbungee.api.AbstractRedisBungeeListener;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.AbstractDataManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.RedisUtil;
|
||||
import net.md_5.bungee.api.AbstractReconnectHandler;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
@@ -158,7 +158,7 @@ public class RedisBungeeBungeeListener extends AbstractRedisBungeeListener<Login
|
||||
@Override
|
||||
public Void jedisTask(Jedis jedis) {
|
||||
Pipeline pipeline = jedis.pipelined();
|
||||
RedisUtil.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), pipeline);
|
||||
PayloadUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), pipeline);
|
||||
pipeline.sync();
|
||||
return null;
|
||||
}
|
||||
@@ -166,7 +166,7 @@ public class RedisBungeeBungeeListener extends AbstractRedisBungeeListener<Login
|
||||
@Override
|
||||
public Void clusterJedisTask(JedisCluster jedisCluster) {
|
||||
// Due some reason JedisCluster does not support pipeline, use instance instead
|
||||
RedisUtil.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), jedisCluster);
|
||||
PayloadUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), jedisCluster);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.imaginarycode.minecraft.redisbungee.api.summoners.ClusterJedisSummone
|
||||
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.RedisUtil;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.RedisBungeeCommands;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerChangedServerNetworkEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerJoinedNetworkEvent;
|
||||
@@ -664,7 +665,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (!laggedPlayers.isEmpty()) {
|
||||
getLogger().info("Cleaning up lagged proxy " + s + " (" + laggedPlayers.size() + " players)...");
|
||||
for (String laggedPlayer : laggedPlayers) {
|
||||
RedisUtil.cleanUpPlayer(laggedPlayer, jedis);
|
||||
PayloadUtils.cleanUpPlayer(laggedPlayer, jedis);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -685,7 +686,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
RedisUtil.cleanUpPlayer(member, jedis);
|
||||
PayloadUtils.cleanUpPlayer(member, jedis);
|
||||
getLogger().warning("Player found in set that was not found locally and globally: " + member);
|
||||
} else {
|
||||
jedis.srem("proxy:" + configuration.getProxyId() + ":usersOnline", member);
|
||||
@@ -727,7 +728,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (!laggedPlayers.isEmpty()) {
|
||||
getLogger().info("Cleaning up lagged proxy " + s + " (" + laggedPlayers.size() + " players)...");
|
||||
for (String laggedPlayer : laggedPlayers) {
|
||||
RedisUtil.cleanUpPlayer(laggedPlayer, jedisCluster);
|
||||
PayloadUtils.cleanUpPlayer(laggedPlayer, jedisCluster);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -748,7 +749,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
RedisUtil.cleanUpPlayer(member, jedisCluster);
|
||||
PayloadUtils.cleanUpPlayer(member, jedisCluster);
|
||||
getLogger().warning("Player found in set that was not found locally and globally: " + member);
|
||||
} else {
|
||||
jedisCluster.srem("proxy:" + configuration.getProxyId() + ":usersOnline", member);
|
||||
@@ -817,7 +818,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (jedis.scard("proxy:" + configuration.getProxyId() + ":usersOnline") > 0) {
|
||||
Set<String> players = jedis.smembers("proxy:" + configuration.getProxyId() + ":usersOnline");
|
||||
for (String member : players)
|
||||
RedisUtil.cleanUpPlayer(member, jedis);
|
||||
PayloadUtils.cleanUpPlayer(member, jedis);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -828,7 +829,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (jedisCluster.scard("proxy:" + configuration.getProxyId() + ":usersOnline") > 0) {
|
||||
Set<String> players = jedisCluster.smembers("proxy:" + configuration.getProxyId() + ":usersOnline");
|
||||
for (String member : players)
|
||||
RedisUtil.cleanUpPlayer(member, jedisCluster);
|
||||
PayloadUtils.cleanUpPlayer(member, jedisCluster);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -915,6 +916,30 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void kickPlayer(UUID playerUniqueId, String message) {
|
||||
new RedisTask<Void>(api) {
|
||||
@Override
|
||||
public Void jedisTask(Jedis jedis) {
|
||||
PayloadUtils.kickPlayer(playerUniqueId, message, jedis);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void clusterJedisTask(JedisCluster jedisCluster) {
|
||||
PayloadUtils.kickPlayer(playerUniqueId, message, jedisCluster);
|
||||
return null;
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void kickPlayer(String playerName, String message) {
|
||||
// fetch the uuid
|
||||
UUID playerUUID = this.uuidTranslator.getTranslatedUuid(playerName,true);
|
||||
kickPlayer(playerUUID, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RedisBungeeMode getRedisBungeeMode() {
|
||||
return this.redisBungeeMode;
|
||||
|
||||
Reference in New Issue
Block a user