From 8792c59568f327025a046774f70ae0e93720582d Mon Sep 17 00:00:00 2001 From: aro Date: Sat, 11 Mar 2023 11:49:56 +0100 Subject: [PATCH] refactor: moved name storage into seperate class --- .../net/artelnatif/nicko/NickoBukkit.java | 23 +++++++++------ .../nicko/appearance/AppearanceManager.java | 4 ++- .../nicko/event/PlayerJoinListener.java | 11 +++++--- .../nicko/storage/PlayerDataStore.java | 19 ------------- .../nicko/storage/name/PlayerNameStore.java | 28 +++++++++++++++++++ .../nicko/test/cache/CacheStorageTest.java | 1 + 6 files changed, 54 insertions(+), 32 deletions(-) create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/name/PlayerNameStore.java diff --git a/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java b/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java index 1f110ec..a73e514 100644 --- a/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java +++ b/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java @@ -16,6 +16,7 @@ import net.artelnatif.nicko.impl.InternalsProvider; import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.placeholder.PlaceHolderHook; import net.artelnatif.nicko.storage.PlayerDataStore; +import net.artelnatif.nicko.storage.name.PlayerNameStore; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.PluginCommand; @@ -36,6 +37,7 @@ public class NickoBukkit extends JavaPlugin { private ConfigurationManager configurationManager; private Configuration configuration; private LocaleFileManager localeFileManager; + private PlayerNameStore nameStore; public NickoBukkit() { this.unitTesting = false; } @@ -57,11 +59,12 @@ public class NickoBukkit extends JavaPlugin { mojangAPI = new MojangAPI(); dataStore = new PlayerDataStore(mojangAPI, getNickoConfig()); + nameStore = new PlayerNameStore(); - if (!getDataStore().getStorage().isError()) { + if (!dataStore.getStorage().isError()) { getLogger().info("Loading persistence..."); - if (!getDataStore().getStorage().getProvider().init()) { - getDataStore().getStorage().setError(true); + if (!dataStore.getStorage().getProvider().init()) { + dataStore.getStorage().setError(true); getLogger().severe("Failed to open persistence, data will NOT be saved!"); } } @@ -70,13 +73,13 @@ public class NickoBukkit extends JavaPlugin { getLogger().info("Loading internals..."); if (getInternals() == null) { getLogger().severe("Nicko could not find a valid implementation for this server version. Is your server supported?"); - getDataStore().getStorage().setError(true); + dataStore.getStorage().setError(true); getServer().getPluginManager().disablePlugin(this); } localeFileManager = new LocaleFileManager(); - if (getNickoConfig().isCustomLocale()) { + if (configuration.isCustomLocale()) { if (localeFileManager.dumpFromLocale(Locale.ENGLISH)) { getLogger().info("Successfully loaded custom language file."); } else { @@ -106,9 +109,9 @@ public class NickoBukkit extends JavaPlugin { public void onDisable() { if (!getDataStore().getStorage().isError()) { getLogger().info("Closing persistence..."); - getDataStore().clearStoredNames(); - Bukkit.getOnlinePlayers().forEach(player -> getDataStore().saveData(player)); - if (!getDataStore().getStorage().getProvider().close()) { + nameStore.clearStoredNames(); + Bukkit.getOnlinePlayers().forEach(player -> dataStore.saveData(player)); + if (!dataStore.getStorage().getProvider().close()) { getLogger().severe("Failed to close persistence!"); } } @@ -134,6 +137,10 @@ public class NickoBukkit extends JavaPlugin { return dataStore; } + public PlayerNameStore getNameStore() { + return nameStore; + } + public MojangAPI getMojangAPI() { return mojangAPI; } diff --git a/core/src/main/java/net/artelnatif/nicko/appearance/AppearanceManager.java b/core/src/main/java/net/artelnatif/nicko/appearance/AppearanceManager.java index 0137a63..3120f39 100644 --- a/core/src/main/java/net/artelnatif/nicko/appearance/AppearanceManager.java +++ b/core/src/main/java/net/artelnatif/nicko/appearance/AppearanceManager.java @@ -4,6 +4,7 @@ import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.storage.PlayerDataStore; +import net.artelnatif.nicko.storage.name.PlayerNameStore; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -14,6 +15,7 @@ public class AppearanceManager { private final Player player; private final NickoBukkit instance = NickoBukkit.getInstance(); private final PlayerDataStore dataStore = instance.getDataStore(); + private final PlayerNameStore nameStore = instance.getNameStore(); private AppearanceManager(UUID uuid) { this.player = Bukkit.getPlayer(uuid); @@ -68,7 +70,7 @@ public class AppearanceManager { } public ActionResult reset() { - final String defaultName = dataStore.getStoredName(player); + final String defaultName = nameStore.getStoredName(player); this.profile.setName(defaultName); this.profile.setSkin(defaultName); final ActionResult actionResult = resetPlayer(); diff --git a/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java b/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java index 012474d..2afa2c3 100644 --- a/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java +++ b/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java @@ -7,6 +7,7 @@ import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.i18n.I18N; import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.storage.PlayerDataStore; +import net.artelnatif.nicko.storage.name.PlayerNameStore; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -17,15 +18,17 @@ public class PlayerJoinListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); - final PlayerDataStore dataStore = NickoBukkit.getInstance().getDataStore(); - dataStore.storeName(player); + final NickoBukkit instance = NickoBukkit.getInstance(); + + final PlayerDataStore dataStore = instance.getDataStore(); + final PlayerNameStore nameStore = instance.getNameStore(); + nameStore.storeName(player); // TODO: 2/20/23 BungeeCord transfer dataStore.performProfileUpdate(player.getUniqueId(), NickoProfile.EMPTY_PROFILE); - Bukkit.getScheduler().runTaskLater(NickoBukkit.getInstance(), () -> { + Bukkit.getScheduler().runTaskLater(instance, () -> { final AppearanceManager appearanceManager = AppearanceManager.get(player); - if (appearanceManager.hasData()) { final ActionResult actionResult = appearanceManager.updatePlayer(appearanceManager.needsASkinChange()); if (!actionResult.isError()) { diff --git a/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java b/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java index 18c9f00..f69dc5b 100644 --- a/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java +++ b/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java @@ -19,31 +19,12 @@ public class PlayerDataStore { private final Storage storage; private final MojangAPI mojangAPI; private final HashMap profiles = new HashMap<>(); - private final HashMap names = new HashMap<>(); public PlayerDataStore(MojangAPI mojangAPI, Configuration configuration) { this.mojangAPI = mojangAPI; this.storage = configuration.isLocal() ? new JSONStorage() : new SQLStorage(configuration); } - public void storeName(Player player) { - if (!isNameStored(player)) { - names.put(player.getUniqueId(), player.getName()); - } - } - - public String getStoredName(Player player) { - return names.get(player.getUniqueId()); - } - - private boolean isNameStored(Player player) { - return names.containsKey(player.getUniqueId()); - } - - public void clearStoredNames() { - names.clear(); - } - public void performProfileUpdate(UUID uuid, NickoProfile profile) { if (!profiles.containsKey(uuid)) { profiles.put(uuid, profile); diff --git a/core/src/main/java/net/artelnatif/nicko/storage/name/PlayerNameStore.java b/core/src/main/java/net/artelnatif/nicko/storage/name/PlayerNameStore.java new file mode 100644 index 0000000..c439d4e --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/name/PlayerNameStore.java @@ -0,0 +1,28 @@ +package net.artelnatif.nicko.storage.name; + +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.UUID; + +public class PlayerNameStore { + private final HashMap names = new HashMap<>(); + + public void storeName(Player player) { + if (!isNameStored(player)) { + names.put(player.getUniqueId(), player.getName()); + } + } + + public String getStoredName(Player player) { + return names.get(player.getUniqueId()); + } + + private boolean isNameStored(Player player) { + return names.containsKey(player.getUniqueId()); + } + + public void clearStoredNames() { + names.clear(); + } +} diff --git a/core/src/test/java/net/artelnatif/nicko/test/cache/CacheStorageTest.java b/core/src/test/java/net/artelnatif/nicko/test/cache/CacheStorageTest.java index e130b84..d1d49d7 100644 --- a/core/src/test/java/net/artelnatif/nicko/test/cache/CacheStorageTest.java +++ b/core/src/test/java/net/artelnatif/nicko/test/cache/CacheStorageTest.java @@ -36,6 +36,7 @@ public class CacheStorageTest { public void cachePlayerData() { final Optional optionalProfile = plugin.getDataStore().getData(player.getUniqueId()); assertTrue(optionalProfile.isPresent()); + //assertTrue(plugin.getDataStore().isCached(player.getUniqueId())); } @AfterAll