From c159a669b19046324d20aab57be375244b65ef91 Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Sat, 23 Jul 2022 19:32:50 +0800 Subject: [PATCH] 1.7.1 --- .../customnameplates/CustomNameplates.java | 2 +- .../customnameplates/data/DataManager.java | 38 ++++++++++++++++++- .../customnameplates/hook/HookManager.java | 12 +----- .../listener/PacketsListener.java | 2 +- .../listener/PlayerListener.java | 29 +++++++------- 5 files changed, 54 insertions(+), 29 deletions(-) diff --git a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java index 9997071..574dfae 100644 --- a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java +++ b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java @@ -60,7 +60,7 @@ public final class CustomNameplates extends JavaPlugin { ProtocolLibrary.getProtocolManager().addPacketListener(new PacketsListener(this)); //新建单例 this.resourceManager = new ResourceManager(this); - this.dataManager = new DataManager(); + this.dataManager = new DataManager(this); this.hookManager = new HookManager(this); this.scoreBoardManager = new ScoreBoardManager(this); //生成资源包 diff --git a/src/main/java/net/momirealms/customnameplates/data/DataManager.java b/src/main/java/net/momirealms/customnameplates/data/DataManager.java index 725dd91..1fc9c3f 100644 --- a/src/main/java/net/momirealms/customnameplates/data/DataManager.java +++ b/src/main/java/net/momirealms/customnameplates/data/DataManager.java @@ -4,6 +4,7 @@ import net.momirealms.customnameplates.AdventureManager; import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import java.util.HashMap; import java.util.Map; @@ -12,10 +13,34 @@ import java.util.UUID; public class DataManager { public static Map cache; - public DataManager() { + private CustomNameplates plugin; + + public DataManager(CustomNameplates plugin) { + this.plugin = plugin; cache = new HashMap<>(); } + public void loadData(Player player) { + UUID uuid = player.getUniqueId(); + if (ConfigManager.DatabaseConfig.async){ + Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.instance, () -> { + PlayerData playerData = SqlHandler.getPlayerData(uuid); + if (playerData == null) { + playerData = new PlayerData(ConfigManager.MainConfig.default_nameplate, 0); + } + cache.put(uuid, playerData); + plugin.getScoreBoardManager().getOrCreateTeam(player); + }); + }else { + PlayerData playerData = SqlHandler.getPlayerData(uuid); + if (playerData == null) { + playerData = new PlayerData(ConfigManager.MainConfig.default_nameplate, 0); + } + cache.put(uuid, playerData); + plugin.getScoreBoardManager().getOrCreateTeam(player); + } + } + public PlayerData getOrCreate(UUID uuid) { if (cache.containsKey(uuid)) { return cache.get(uuid); @@ -32,7 +57,16 @@ public class DataManager { if (!cache.containsKey(uuid)) { return; } - cache.remove(uuid); + if (ConfigManager.DatabaseConfig.async){ + Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.instance, ()-> { + SqlHandler.save(cache.get(uuid), uuid); + cache.remove(uuid); + }); + } + else { + SqlHandler.save(cache.get(uuid), uuid); + cache.remove(uuid); + } } public void savePlayer(UUID uuid) { diff --git a/src/main/java/net/momirealms/customnameplates/hook/HookManager.java b/src/main/java/net/momirealms/customnameplates/hook/HookManager.java index 31def5b..7fdd653 100644 --- a/src/main/java/net/momirealms/customnameplates/hook/HookManager.java +++ b/src/main/java/net/momirealms/customnameplates/hook/HookManager.java @@ -21,8 +21,6 @@ public class HookManager { this.initializeItemsAdder(); } - //Papi Hook检测 - //其实是一段问题代码,但基本人人都装了PAPI,更改意义不大 private void initializePlaceholderAPI() { if(!ConfigManager.MainConfig.placeholderAPI){ this.placeholderAPI = false; @@ -33,7 +31,7 @@ public class HookManager { this.placeholderAPI = true; } } - //ItemsAdder Hook检测 + private void initializeItemsAdder() { if (!ConfigManager.MainConfig.itemsAdder) { this.itemsAdder = false; @@ -42,12 +40,4 @@ public class HookManager { this.itemsAdder = true; } } -// /* -// 解析prefix与suffix -// */ -// public String parsePlaceholders(Player player, String papi) { -// String s = StringUtils.replace(StringUtils.replace(papi, "%player_name%", player.getName()), "%player_displayname%", player.getDisplayName()); -// s = PlaceholderAPI.setPlaceholders(player, s); -// return ChatColor.translateAlternateColorCodes('&', s); -// } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java b/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java index 2a20f7f..2515028 100644 --- a/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java @@ -41,7 +41,7 @@ public class PacketsListener extends PacketAdapter { if (!this.plugin.getScoreBoardManager().doesTeamExist(teamName)){ return; } - if (ConfigManager.MainConfig.show_after && DataManager.cache.get(event.getPlayer().getUniqueId()).getAccepted() == 0) { + if (ConfigManager.MainConfig.show_after && (DataManager.cache.get(event.getPlayer().getUniqueId()) == null || DataManager.cache.get(event.getPlayer().getUniqueId()).getAccepted() == 0)) { internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson("{\"text\":\"\"}")); internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson("{\"text\":\"\"}")); internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); diff --git a/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java b/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java index ad279e1..5fed176 100644 --- a/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java @@ -1,8 +1,8 @@ package net.momirealms.customnameplates.listener; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.data.DataManager; +import net.momirealms.customnameplates.data.PlayerData; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -13,14 +13,9 @@ import org.bukkit.event.player.PlayerResourcePackStatusEvent; public record PlayerListener(CustomNameplates plugin) implements Listener { - @EventHandler - public void onPreLogin(AsyncPlayerPreLoginEvent event) { - this.plugin.getDataManager().getOrCreate(event.getUniqueId()); - } - @EventHandler public void onJoin(PlayerJoinEvent event) { - this.plugin.getScoreBoardManager().getOrCreateTeam(event.getPlayer()); + this.plugin.getDataManager().loadData(event.getPlayer()); } @EventHandler @@ -30,12 +25,18 @@ public record PlayerListener(CustomNameplates plugin) implements Listener { @EventHandler public void onAccept(PlayerResourcePackStatusEvent event) { - if (event.getStatus() == PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED) { - DataManager.cache.get(event.getPlayer().getUniqueId()).setAccepted(1); - Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); - } else { - DataManager.cache.get(event.getPlayer().getUniqueId()).setAccepted(0); - Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); - } + PlayerData playerData = DataManager.cache.get(event.getPlayer().getUniqueId()); + Bukkit.getScheduler().runTaskLaterAsynchronously(CustomNameplates.instance, ()-> { + if (playerData == null) { + return; + } + if (event.getStatus() == PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED) { + playerData.setAccepted(1); + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + } else if(event.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED || event.getStatus() == PlayerResourcePackStatusEvent.Status.FAILED_DOWNLOAD) { + playerData.setAccepted(0); + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + } + }, 20); } }