diff --git a/README.md b/README.md index ea3e248..c0bf760 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ 若您觉得本插件做的不错,您可以捐赠支持我,感谢您成为开源项目的支持者! -万分感谢 [egg_拿]() 赞助本项目的开发与维护! +万分感谢 [egg_拿]() 与 [ayoiz](https://github.com/ayoi2) 赞助本项目的开发与维护! Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects. [![](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/?from=https://github.com/CarmJos/UserPrefix) diff --git a/pom.xml b/pom.xml index 013dee4..416dc98 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ cc.carm.plugin timereward - 3.1.2 + 3.1.3 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 727da0c..0b0709a 100644 --- a/src/main/java/cc/carm/plugin/timereward/listener/UserListener.java +++ b/src/main/java/cc/carm/plugin/timereward/listener/UserListener.java @@ -2,26 +2,32 @@ 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; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.jetbrains.annotations.Nullable; public class UserListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { - TimeRewardAPI.getUserManager().load(event.getPlayer().getUniqueId(), true).thenAccept(data -> { - Player player = Bukkit.getPlayer(data.getUserUUID()); - if (player == null || !player.isOnline()) { - TimeRewardAPI.getUserManager().unload(data.getUserUUID()); - } // 不在线自动卸载 - }).exceptionally(ex -> { - Main.severe("加载用户在线时长数据失败: " + event.getPlayer().getName()); - ex.printStackTrace(); - return null; + @Nullable Player player = event.getPlayer(); + // Delayed load to avoid async error + Main.getInstance().getScheduler().runLater(20L, () -> { + if (player == null || !player.isOnline()) return; + TimeRewardAPI.getUserManager() + .load(event.getPlayer().getUniqueId(), true) + .thenAccept(data -> { + if (!player.isOnline()) { // 不在线自动卸载 + TimeRewardAPI.getUserManager().unload(data.getUserUUID(), false); + } + }).exceptionally(ex -> { + Main.severe("加载用户在线时长数据失败: " + event.getPlayer().getName()); + ex.printStackTrace(); + return null; + }); }); }