From ef145803faec94ae0200609d49c7769cd4626aaf Mon Sep 17 00:00:00 2001 From: carm Date: Fri, 10 Jan 2025 08:43:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(save):=20=E5=9C=A8=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=97=B6=E4=BC=98=E5=85=88=E5=88=A9=E7=94=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=95=B0=E6=8D=AE=E8=BF=9B=E8=A1=8C=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../plugin/timereward/listener/UserListener.java | 5 +++++ .../plugin/timereward/manager/UserManager.java | 14 ++++++++------ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index c5a3dcd..0a25191 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ cc.carm.plugin timereward - 3.1.1 + 3.1.2 TimeReward 在线时长自动领奖插件,通过指令发放奖励,基于EasyPlugin实现。 diff --git a/src/main/java/cc/carm/plugin/timereward/listener/UserListener.java b/src/main/java/cc/carm/plugin/timereward/listener/UserListener.java index 980f866..727da0c 100644 --- a/src/main/java/cc/carm/plugin/timereward/listener/UserListener.java +++ b/src/main/java/cc/carm/plugin/timereward/listener/UserListener.java @@ -1,5 +1,6 @@ package cc.carm.plugin.timereward.listener; +import cc.carm.plugin.timereward.Main; import cc.carm.plugin.timereward.TimeRewardAPI; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -17,6 +18,10 @@ public class UserListener implements Listener { if (player == null || !player.isOnline()) { TimeRewardAPI.getUserManager().unload(data.getUserUUID()); } // 不在线自动卸载 + }).exceptionally(ex -> { + Main.severe("加载用户在线时长数据失败: " + event.getPlayer().getName()); + ex.printStackTrace(); + return null; }); } diff --git a/src/main/java/cc/carm/plugin/timereward/manager/UserManager.java b/src/main/java/cc/carm/plugin/timereward/manager/UserManager.java index ba445ce..9cb872a 100644 --- a/src/main/java/cc/carm/plugin/timereward/manager/UserManager.java +++ b/src/main/java/cc/carm/plugin/timereward/manager/UserManager.java @@ -38,13 +38,15 @@ public class UserManager extends UserDataManager { MySQLStorage storage = Main.getStorage(); + @Nullable UserRewardData current = loadData(data.getUserUUID()); // 考虑读取时间差,优先利用数据库的当前数据计算 + TimeRecord oldRecord = current == null ? data.getTimeRecord() : current.getTimeRecord(); + // 只需要保存游玩时间数据,领取数据已经实时保存了 - LocalDate date = LocalDate.now(); - Duration daily = data.getOnlineDuration(IntervalType.DAILY); - Duration weekly = data.getOnlineDuration(IntervalType.WEEKLY); - Duration monthly = data.getOnlineDuration(IntervalType.MONTHLY); - Duration total = data.getOnlineDuration(IntervalType.TOTAL); - TimeRecord newRecord = new TimeRecord(date, daily, weekly, monthly, total); + Duration daily = IntervalType.DAILY.calculate(oldRecord, data.getJoinTime()); + Duration weekly = IntervalType.WEEKLY.calculate(oldRecord, data.getJoinTime()); + Duration monthly = IntervalType.MONTHLY.calculate(oldRecord, data.getJoinTime()); + Duration total = IntervalType.TOTAL.calculate(oldRecord, data.getJoinTime()); + TimeRecord newRecord = new TimeRecord(LocalDate.now(), daily, weekly, monthly, total); storage.savePlayTime(data.getUserUUID(), newRecord); }