From f163a19b8bae10bb2505029248176704483ed8df Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 15 Apr 2024 14:55:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=96=B9=E5=BC=8F=20=E5=BC=95=E5=85=A5?= =?UTF-8?q?=E5=AF=B9=E7=9F=AD=E6=97=B6=E9=97=B4=E5=86=85=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E5=90=88=E5=B9=B6=E5=8A=A0=E8=BD=BD=20?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E4=BA=86=E5=8A=A0=E8=BD=BD=E9=A2=91=E7=8E=87?= =?UTF-8?q?=20=E9=99=8D=E4=BD=8E=E4=B8=80=E9=83=A8=E5=88=86=E5=BC=80?= =?UTF-8?q?=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 509868d..3813953 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.16.7-beta + 1.17.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index f291383..b4c2163 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import javax.annotation.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; public class Cache { @@ -24,6 +25,24 @@ public class Cache { * 从数据库加载所有领地 */ public void loadDominions() { + if (_last_update_dominion + UPDATE_INTERVAL < System.currentTimeMillis()) { + XLogger.debug("run loadDominionsExecution directly"); + loadDominionsExecution(); + } else { + if (_update_dominion_is_scheduled) return; + XLogger.debug("schedule loadDominionsExecution"); + _update_dominion_is_scheduled = true; + Dominion.scheduler.async.runDelayed(Dominion.instance, (instance) -> { + XLogger.debug("run loadDominionsExecution scheduled"); + loadDominionsExecution(); + _update_dominion_is_scheduled = false; + }, + UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_dominion), + TimeUnit.MILLISECONDS); + } + } + + private void loadDominionsExecution() { id_dominions = new ConcurrentHashMap<>(); world_dominions = new ConcurrentHashMap<>(); dominion_children = new ConcurrentHashMap<>(); @@ -45,12 +64,28 @@ public class Cache { } } BlueMapConnect.render(); + _last_update_dominion = System.currentTimeMillis(); } /** * 从数据库加载所有玩家特权 */ public void loadPlayerPrivileges() { + if (_last_update_privilege + UPDATE_INTERVAL < System.currentTimeMillis()) { + loadPlayerPrivilegesExecution(); + } else { + if (_update_privilege_is_scheduled) return; + _update_privilege_is_scheduled = true; + Dominion.scheduler.async.runDelayed(Dominion.instance, (instance) -> { + loadPlayerPrivilegesExecution(); + _update_privilege_is_scheduled = false; + }, + UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_privilege), + TimeUnit.MILLISECONDS); + } + } + + private void loadPlayerPrivilegesExecution() { List all_privileges = PlayerPrivilegeDTO.selectAll(); if (all_privileges == null) { XLogger.err("加载玩家特权失败"); @@ -64,6 +99,7 @@ public class Cache { } player_uuid_to_privilege.get(player_uuid).put(privilege.getDomID(), privilege); } + _last_update_privilege = System.currentTimeMillis(); } /** @@ -227,4 +263,9 @@ public class Cache { private ConcurrentHashMap> player_uuid_to_privilege; // 玩家所有的特权 private final Map player_current_dominion_id; // 玩家当前所在领地 private ConcurrentHashMap> dominion_children; + private long _last_update_dominion = 0; + private boolean _update_dominion_is_scheduled = false; + private long _last_update_privilege = 0; + private boolean _update_privilege_is_scheduled = false; + private static final long UPDATE_INTERVAL = 1000 * 4; }