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);
}