From bc82dbb170b9ca153d2d152cd85b762b6db58f19 Mon Sep 17 00:00:00 2001 From: YuTian <2953516620@qq.com> Date: Thu, 6 Feb 2025 21:06:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6config.yml=E4=BB=A5=E5=8F=8A=E5=A4=9A?= =?UTF-8?q?=E4=B8=AAJava=E6=96=87=E4=BB=B6ElementOriginLib.java,=20OriginL?= =?UTF-8?q?ibConfig.java,=20RedisBungeeUtil.java=E7=9A=84=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elementoriginlib/ElementOriginLib.java | 12 ++++ .../config/OriginLibConfig.java | 23 +++++++ .../redis/RedisBungeeUtil.java | 65 +++++++++++++++++++ src/main/resources/config.yml | 3 + 4 files changed, 103 insertions(+) create mode 100644 src/main/java/com/io/yutian/elementoriginlib/config/OriginLibConfig.java create mode 100644 src/main/java/com/io/yutian/elementoriginlib/redis/RedisBungeeUtil.java create mode 100644 src/main/resources/config.yml diff --git a/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java b/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java index 6760981..2eb712d 100644 --- a/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java +++ b/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java @@ -1,5 +1,6 @@ package com.io.yutian.elementoriginlib; +import com.io.yutian.elementoriginlib.config.OriginLibConfig; import com.io.yutian.elementoriginlib.lang.Lang; import com.io.yutian.elementoriginlib.listener.GuiHandlerListener; import com.io.yutian.elementoriginlib.listener.PlayerChatInputListener; @@ -9,6 +10,7 @@ import com.io.yutian.elementoriginlib.redis.RedisIO; import net.byteflux.libby.*; import net.byteflux.libby.logging.LogLevel; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; import org.slf4j.LoggerFactory; public final class ElementOriginLib extends JavaPlugin { @@ -20,6 +22,8 @@ public final class ElementOriginLib extends JavaPlugin { private RedisIO redisIO; + private OriginLibConfig config; + @Override public void onEnable() { instance = this; @@ -59,10 +63,18 @@ public final class ElementOriginLib extends JavaPlugin { } public void reload() { + config = new OriginLibConfig(); + saveDefaultConfig(); + reloadConfig(); + config.load(getConfig()); Lang.registerLangFile(this); Lang.reload(); } + public OriginLibConfig getLibConfig() { + return config; + } + public RedisIO getRedisIO() { return redisIO; } diff --git a/src/main/java/com/io/yutian/elementoriginlib/config/OriginLibConfig.java b/src/main/java/com/io/yutian/elementoriginlib/config/OriginLibConfig.java new file mode 100644 index 0000000..9e54a3a --- /dev/null +++ b/src/main/java/com/io/yutian/elementoriginlib/config/OriginLibConfig.java @@ -0,0 +1,23 @@ +package com.io.yutian.elementoriginlib.config; + +import org.bukkit.configuration.file.FileConfiguration; + +public class OriginLibConfig { + + private String redisBungeeNetworkId; + private String redisBungeeProxyId; + + public void load(FileConfiguration config) { + redisBungeeNetworkId = config.getString("redisBungeeNetworkId"); + redisBungeeProxyId = config.getString("redisBungeeProxyId"); + } + + public String getRedisBungeeNetworkId() { + return redisBungeeNetworkId; + } + + public String getRedisBungeeProxyId() { + return redisBungeeProxyId; + } + +} diff --git a/src/main/java/com/io/yutian/elementoriginlib/redis/RedisBungeeUtil.java b/src/main/java/com/io/yutian/elementoriginlib/redis/RedisBungeeUtil.java new file mode 100644 index 0000000..63041c1 --- /dev/null +++ b/src/main/java/com/io/yutian/elementoriginlib/redis/RedisBungeeUtil.java @@ -0,0 +1,65 @@ +package com.io.yutian.elementoriginlib.redis; + +import com.google.common.net.InetAddresses; +import com.io.yutian.elementoriginlib.ElementOriginLib; +import redis.clients.jedis.Jedis; + +import java.net.InetAddress; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class RedisBungeeUtil { + + public static String getProxyFromRedis(UUID uuid) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + return jedis.hget("redis-bungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::player::" + uuid + "::data", "proxy"); + } + } + + public static String getServerFromRedis(UUID uuid) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + return jedis.hget("redis-bungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::player::" + uuid + "::data", "server"); + } + } + + public static String getLastServerFromRedis(UUID uuid) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + return jedis.hget("redis-bungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::player::" + uuid + "::data", "last-server"); + } + } + + public static InetAddress getIpAddressFromRedis(UUID uuid) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + String ip = jedis.hget("redis-bungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::player::" + uuid + "::data", "ip"); + if (ip == null) return null; + return InetAddresses.forString(ip); + } + } + + public static long getLastOnlineFromRedis(UUID uuid) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + String unixString = jedis.hget("redis-bungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::player::" + uuid + "::data", "last-online"); + if (unixString == null) return -1; + return Long.parseLong(unixString); + } + } + + public static boolean isPlayerTrulyOnProxy(String proxyId, UUID uuid) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + return jedis.sismember("redis-bungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::proxies::" + proxyId + "::online-players", uuid.toString()); + } + } + + public static Set getProxyMembers(String proxyId) { + try (Jedis jedis = ElementOriginLib.inst().getRedisIO().getJedisPool().getResource()) { + Set uuidsStrings = jedis.smembers("redisbungee::" + ElementOriginLib.inst().getLibConfig().getRedisBungeeNetworkId() + "::proxies::" + proxyId + "::online-players"); + HashSet uuids = new HashSet<>(); + for (String proxyMember : uuidsStrings) { + uuids.add(UUID.fromString(proxyMember)); + } + return uuids; + } + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..7e2ac07 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,3 @@ +redis-bungee: + networkId: "main" + proxy-id: "proxy-1" \ No newline at end of file