diff --git a/pom.xml b/pom.xml
index 13c384a..d936797 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,9 +138,11 @@
net.wesjd:anvilgui
xyz.xenondevs.invui:*
com.github.jsixface:*
- com.fasterxml.jackson.dataformat
- com.fasterxml.jackson.core
- org.mariadb.jdbc
+ com.fasterxml.jackson.dataformat:*
+ com.fasterxml.jackson.core:*
+ org.mariadb.jdbc:*
+ redis.clients:*
+ org.apache.commons:commons-pool2
@@ -168,6 +170,14 @@
org.mariadb.jdbc
net.artelnatif.libs.mariadb
+
+ redis.clients
+ net.artelnatif.libs.redis
+
+
+ org.apache.commons.pool2
+ net.artelnatif.libs.pool2
+
false
diff --git a/src/main/java/xyz/atnrch/nicko/anvil/AnvilManager.java b/src/main/java/xyz/atnrch/nicko/anvil/AnvilManager.java
index a318c20..2e9f13f 100644
--- a/src/main/java/xyz/atnrch/nicko/anvil/AnvilManager.java
+++ b/src/main/java/xyz/atnrch/nicko/anvil/AnvilManager.java
@@ -1,16 +1,17 @@
package xyz.atnrch.nicko.anvil;
-import xyz.atnrch.nicko.NickoBukkit;
-import xyz.atnrch.nicko.appearance.AppearanceManager;
-import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.i18n.I18N;
-import xyz.atnrch.nicko.i18n.I18NDict;
-import xyz.atnrch.nicko.mojang.MojangUtils;
import net.wesjd.anvilgui.AnvilGUI;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
+import xyz.atnrch.nicko.NickoBukkit;
+import xyz.atnrch.nicko.appearance.ActionResult;
+import xyz.atnrch.nicko.appearance.AppearanceManager;
+import xyz.atnrch.nicko.i18n.I18N;
+import xyz.atnrch.nicko.i18n.I18NDict;
+import xyz.atnrch.nicko.mojang.MojangUtils;
+import xyz.atnrch.nicko.storage.PlayerDataStore;
import java.util.Collections;
import java.util.List;
@@ -18,10 +19,12 @@ import java.util.List;
public class AnvilManager {
private final Player player;
private final AppearanceManager appearanceManager;
+ private final PlayerDataStore dataStore;
public AnvilManager(Player player) {
this.player = player;
this.appearanceManager = AppearanceManager.get(player);
+ this.dataStore = NickoBukkit.getInstance().getDataStore();
}
public void openNameThenSkinAnvil() {
@@ -47,6 +50,7 @@ public class AnvilManager {
return Collections.singletonList(AnvilGUI.ResponseAction.replaceInputText("Invalid username!"));
} else {
appearanceManager.setName(snapshot.getText());
+ dataStore.updateCache(player.getUniqueId(), appearanceManager.getProfile());
openSkinAnvil();
return Collections.singletonList(AnvilGUI.ResponseAction.close());
}
@@ -67,6 +71,7 @@ public class AnvilManager {
return Collections.singletonList(AnvilGUI.ResponseAction.replaceInputText("Invalid username!"));
} else {
appearanceManager.setName(snapshot.getText());
+ dataStore.updateCache(player.getUniqueId(), appearanceManager.getProfile());
final ActionResult actionResult = appearanceManager.updatePlayer(false, false);
return sendResultAndClose(actionResult);
}
@@ -87,6 +92,7 @@ public class AnvilManager {
return Collections.singletonList(AnvilGUI.ResponseAction.replaceInputText("Invalid username!"));
} else {
appearanceManager.setSkin(snapshot.getText());
+ dataStore.updateCache(player.getUniqueId(), appearanceManager.getProfile());
final ActionResult actionResult = appearanceManager.updatePlayer(true, false);
return sendResultAndClose(actionResult);
}
diff --git a/src/main/java/xyz/atnrch/nicko/appearance/AppearanceManager.java b/src/main/java/xyz/atnrch/nicko/appearance/AppearanceManager.java
index 3229307..2b51e6d 100644
--- a/src/main/java/xyz/atnrch/nicko/appearance/AppearanceManager.java
+++ b/src/main/java/xyz/atnrch/nicko/appearance/AppearanceManager.java
@@ -1,4 +1,4 @@
-package xyz.atnrch.nicko.profile;
+package xyz.atnrch.nicko.appearance;
import com.comphenix.protocol.utility.MinecraftVersion;
import com.comphenix.protocol.wrappers.*;
@@ -14,6 +14,7 @@ import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.Locale;
import xyz.atnrch.nicko.mojang.MojangAPI;
import xyz.atnrch.nicko.mojang.MojangSkin;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.storage.PlayerDataStore;
import xyz.atnrch.nicko.storage.name.PlayerNameStore;
import xyz.atnrch.nicko.wrapper.*;
@@ -24,7 +25,7 @@ import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
-public class ProfileManager {
+public class AppearanceManager {
private final NickoProfile profile;
private final Player player;
private final UUID uuid;
@@ -32,24 +33,24 @@ public class ProfileManager {
private final PlayerDataStore dataStore = instance.getDataStore();
private final PlayerNameStore nameStore = instance.getNameStore();
- private ProfileManager(UUID uuid) {
+ private AppearanceManager(UUID uuid) {
this.player = Bukkit.getPlayer(uuid);
this.uuid = uuid;
this.profile = dataStore.getData(uuid).orElse(NickoProfile.EMPTY_PROFILE.clone());
}
- private ProfileManager(String name) {
+ private AppearanceManager(String name) {
this.player = null;
this.uuid = null;
this.profile = dataStore.getOfflineData(name).orElse(NickoProfile.EMPTY_PROFILE.clone());
}
- public static ProfileManager get(Player player) {
- return new ProfileManager(player.getUniqueId());
+ public static AppearanceManager get(Player player) {
+ return new AppearanceManager(player.getUniqueId());
}
- public static ProfileManager get(String name) {
- return new ProfileManager(name);
+ public static AppearanceManager get(String name) {
+ return new AppearanceManager(name);
}
public boolean hasData() {
diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/settings/BungeeCordCyclingItem.java b/src/main/java/xyz/atnrch/nicko/gui/items/settings/BungeeCordCyclingItem.java
index 7101cbd..ef2ca6b 100644
--- a/src/main/java/xyz/atnrch/nicko/gui/items/settings/BungeeCordCyclingItem.java
+++ b/src/main/java/xyz/atnrch/nicko/gui/items/settings/BungeeCordCyclingItem.java
@@ -1,7 +1,7 @@
package xyz.atnrch.nicko.gui.items.settings;
import xyz.atnrch.nicko.NickoBukkit;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/settings/LanguageCyclingItem.java b/src/main/java/xyz/atnrch/nicko/gui/items/settings/LanguageCyclingItem.java
index 7ce31db..01a3c41 100644
--- a/src/main/java/xyz/atnrch/nicko/gui/items/settings/LanguageCyclingItem.java
+++ b/src/main/java/xyz/atnrch/nicko/gui/items/settings/LanguageCyclingItem.java
@@ -1,11 +1,14 @@
package xyz.atnrch.nicko.gui.items.settings;
-import xyz.atnrch.nicko.NickoBukkit;
-import xyz.atnrch.nicko.appearance.NickoProfile;
-import xyz.atnrch.nicko.i18n.Locale;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
+import xyz.atnrch.nicko.NickoBukkit;
+import xyz.atnrch.nicko.i18n.I18N;
+import xyz.atnrch.nicko.i18n.I18NDict;
+import xyz.atnrch.nicko.i18n.Locale;
+import xyz.atnrch.nicko.profile.NickoProfile;
+import xyz.atnrch.nicko.storage.PlayerDataStore;
import xyz.xenondevs.invui.item.ItemProvider;
import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.AbstractItem;
@@ -21,13 +24,19 @@ public class LanguageCyclingItem {
private final ItemProvider[] providers = getItems();
public AbstractItem get(Player player) {
- final Optional profile = NickoBukkit.getInstance().getDataStore().getData(player.getUniqueId());
+ final PlayerDataStore dataStore = NickoBukkit.getInstance().getDataStore();
+ final Optional profile = dataStore.getData(player.getUniqueId());
if (profile.isPresent()) {
final NickoProfile nickoProfile = profile.get();
int localeOrdinal = nickoProfile.getLocale().ordinal();
return CycleItem.withStateChangeHandler((observer, integer) -> {
nickoProfile.setLocale(Locale.values()[integer]);
observer.playSound(player, Sound.UI_BUTTON_CLICK, 1f, 0.707107f); // 0.707107 ~= C
+ if (dataStore.updateCache(player.getUniqueId(), nickoProfile).isError()) {
+ final I18N i18n = new I18N(player);
+ player.sendMessage(i18n.translate(I18NDict.Event.Settings.ERROR));
+ player.getOpenInventory().close();
+ }
}, localeOrdinal, providers);
}
diff --git a/src/main/java/xyz/atnrch/nicko/i18n/I18N.java b/src/main/java/xyz/atnrch/nicko/i18n/I18N.java
index 068d99f..18f76bb 100644
--- a/src/main/java/xyz/atnrch/nicko/i18n/I18N.java
+++ b/src/main/java/xyz/atnrch/nicko/i18n/I18N.java
@@ -1,13 +1,12 @@
package xyz.atnrch.nicko.i18n;
import com.github.jsixface.YamlConfig;
-import xyz.atnrch.nicko.NickoBukkit;
-import xyz.atnrch.nicko.appearance.NickoProfile;
import org.bukkit.entity.Player;
+import xyz.atnrch.nicko.NickoBukkit;
+import xyz.atnrch.nicko.appearance.AppearanceManager;
import java.io.InputStream;
import java.text.MessageFormat;
-import java.util.Optional;
public class I18N {
private final MessageFormat formatter = new MessageFormat("");
@@ -56,8 +55,8 @@ public class I18N {
private Locale getPlayerLocale() {
try {
- final Optional profile = instance.getDataStore().getData(player.getUniqueId());
- return !profile.isPresent() ? Locale.FALLBACK_LOCALE : profile.get().getLocale();
+ final AppearanceManager appearanceManager = AppearanceManager.get(player);
+ return !appearanceManager.hasData() ? Locale.FALLBACK_LOCALE : appearanceManager.getLocale();
} catch (IllegalArgumentException exception) {
instance.getLogger().severe("Invalid locale provided by " + player.getName() + ", defaulting to " + Locale.FALLBACK_LOCALE.getCode() + ".");
return Locale.FALLBACK_LOCALE;
diff --git a/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java b/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java
index f8dbab5..79489f0 100644
--- a/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java
+++ b/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java
@@ -2,13 +2,13 @@ package xyz.atnrch.nicko.i18n;
public class I18NDict {
public static class Event {
- public static final String EVENT_KEY = "event.";
+ private static final String EVENT_KEY = "event.";
public static class Admin {
- public static final String ADMIN_KEY = EVENT_KEY + "admin.";
+ private static final String ADMIN_KEY = EVENT_KEY + "admin.";
public static class Cache {
- public static final String CACHE_KEY = ADMIN_KEY + "cache.";
+ private static final String CACHE_KEY = ADMIN_KEY + "cache.";
public static final String INVALIDATE_CACHE = CACHE_KEY + "invalidate_cache";
public static final String INVALIDATE_ENTRY = CACHE_KEY + "invalidate_entry";
@@ -16,8 +16,14 @@ public class I18NDict {
}
}
+ public static class Settings {
+ private static final String SETTINGS_KEY = EVENT_KEY + "settings.";
+
+ public static final String ERROR = SETTINGS_KEY + "error";
+ }
+
public static class Appearance {
- public static final String APPEARANCE_KEY = EVENT_KEY + "appearance.";
+ private static final String APPEARANCE_KEY = EVENT_KEY + "appearance.";
public static class Set {
public static final String SET_KEY = APPEARANCE_KEY + "set.";
@@ -27,7 +33,7 @@ public class I18NDict {
}
public static class Remove {
- public static final String REMOVE_KEY = APPEARANCE_KEY + "remove.";
+ private static final String REMOVE_KEY = APPEARANCE_KEY + "remove.";
public static final String OK = REMOVE_KEY + "ok";
public static final String MISSING = REMOVE_KEY + "missing";
@@ -35,7 +41,7 @@ public class I18NDict {
}
public static class Restore {
- public static final String RESTORE_KEY = APPEARANCE_KEY + "restore.";
+ private static final String RESTORE_KEY = APPEARANCE_KEY + "restore.";
public static final String OK = RESTORE_KEY + "ok";
public static final String ERROR = RESTORE_KEY + "error";
@@ -46,7 +52,6 @@ public class I18NDict {
public static class Error {
public static final String GENERIC = "error.generic";
public static final String PERMISSION = "error.permission";
- public static final String PLAYER_OFFLINE = "error.offline";
public static final String CACHE = "error.cache";
public static final String MOJANG_NAME = "error.mojang_name";
public static final String MOJANG_SKIN = "error.mojang_skin";
diff --git a/src/main/java/xyz/atnrch/nicko/placeholder/NickoExpansion.java b/src/main/java/xyz/atnrch/nicko/placeholder/NickoExpansion.java
index ea82f20..770de6e 100644
--- a/src/main/java/xyz/atnrch/nicko/placeholder/NickoExpansion.java
+++ b/src/main/java/xyz/atnrch/nicko/placeholder/NickoExpansion.java
@@ -1,11 +1,11 @@
package xyz.atnrch.nicko.placeholder;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
-import xyz.atnrch.nicko.NickoBukkit;
-import xyz.atnrch.nicko.appearance.NickoProfile;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import xyz.atnrch.nicko.NickoBukkit;
+import xyz.atnrch.nicko.profile.NickoProfile;
import java.util.Optional;
diff --git a/src/main/java/xyz/atnrch/nicko/profile/NickoProfile.java b/src/main/java/xyz/atnrch/nicko/profile/NickoProfile.java
index 93222e0..eabad4f 100644
--- a/src/main/java/xyz/atnrch/nicko/profile/NickoProfile.java
+++ b/src/main/java/xyz/atnrch/nicko/profile/NickoProfile.java
@@ -1,4 +1,4 @@
-package xyz.atnrch.nicko.appearance;
+package xyz.atnrch.nicko.profile;
import xyz.atnrch.nicko.i18n.Locale;
diff --git a/src/main/java/xyz/atnrch/nicko/storage/Cache.java b/src/main/java/xyz/atnrch/nicko/storage/Cache.java
index c92a214..cf48f79 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/Cache.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/Cache.java
@@ -1,7 +1,7 @@
package xyz.atnrch.nicko.storage;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import java.util.Optional;
import java.util.UUID;
diff --git a/src/main/java/xyz/atnrch/nicko/storage/PlayerDataStore.java b/src/main/java/xyz/atnrch/nicko/storage/PlayerDataStore.java
index d94eb0b..1b6c0ce 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/PlayerDataStore.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/PlayerDataStore.java
@@ -3,7 +3,7 @@ package xyz.atnrch.nicko.storage;
import org.bukkit.entity.Player;
import xyz.atnrch.nicko.config.Configuration;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.mojang.MojangAPI;
import xyz.atnrch.nicko.mojang.MojangUtils;
@@ -28,8 +28,17 @@ public class PlayerDataStore {
this.cache = configuration.getRedisConfiguration().isEnabled() ? new RedisCache(configuration) : new MapCache();
}
+ public ActionResult updateCache(UUID uuid, NickoProfile profile) {
+ final Optional retrieved = getData(uuid);
+ if (retrieved.isPresent()) {
+ getCache().cache(uuid, profile);
+ return ActionResult.ok();
+ }
+ return ActionResult.error(I18NDict.Error.CACHE);
+ }
+
public Optional getData(UUID uuid) {
- if (storage.isError()) {
+ if (storage.isError() || cache.isError()) {
return Optional.empty();
}
diff --git a/src/main/java/xyz/atnrch/nicko/storage/Storage.java b/src/main/java/xyz/atnrch/nicko/storage/Storage.java
index 0f2dc41..ed1d0a9 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/Storage.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/Storage.java
@@ -1,7 +1,7 @@
package xyz.atnrch.nicko.storage;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import java.util.Optional;
import java.util.UUID;
diff --git a/src/main/java/xyz/atnrch/nicko/storage/json/JSONStorage.java b/src/main/java/xyz/atnrch/nicko/storage/json/JSONStorage.java
index 7608c22..22e27c3 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/json/JSONStorage.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/json/JSONStorage.java
@@ -4,7 +4,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import xyz.atnrch.nicko.NickoBukkit;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.storage.Storage;
import xyz.atnrch.nicko.storage.StorageProvider;
diff --git a/src/main/java/xyz/atnrch/nicko/storage/map/MapCache.java b/src/main/java/xyz/atnrch/nicko/storage/map/MapCache.java
index 3c15fef..7b566e5 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/map/MapCache.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/map/MapCache.java
@@ -1,7 +1,7 @@
package xyz.atnrch.nicko.storage.map;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.storage.Cache;
import xyz.atnrch.nicko.storage.CacheProvider;
diff --git a/src/main/java/xyz/atnrch/nicko/storage/map/MapCacheProvider.java b/src/main/java/xyz/atnrch/nicko/storage/map/MapCacheProvider.java
index fa8367f..ba57607 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/map/MapCacheProvider.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/map/MapCacheProvider.java
@@ -1,6 +1,6 @@
package xyz.atnrch.nicko.storage.map;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.storage.CacheProvider;
import java.util.HashMap;
diff --git a/src/main/java/xyz/atnrch/nicko/storage/sql/SQLStorage.java b/src/main/java/xyz/atnrch/nicko/storage/sql/SQLStorage.java
index baaea0b..36c67e3 100644
--- a/src/main/java/xyz/atnrch/nicko/storage/sql/SQLStorage.java
+++ b/src/main/java/xyz/atnrch/nicko/storage/sql/SQLStorage.java
@@ -2,7 +2,7 @@ package xyz.atnrch.nicko.storage.sql;
import xyz.atnrch.nicko.config.Configuration;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.Locale;
import xyz.atnrch.nicko.storage.Storage;
diff --git a/src/main/resources/en.yml b/src/main/resources/en.yml
index fe5d422..7087dd6 100644
--- a/src/main/resources/en.yml
+++ b/src/main/resources/en.yml
@@ -1,15 +1,16 @@
error:
- generic: "Unknown error"
+ generic: "An unknown error occurred."
permission: "§cYou do not have the required permission."
invalid_username: "§cThis is not a valid Minecraft username."
mojang_name: "There is no Minecraft account with this name."
mojang_skin: "This Minecraft account has no skin."
- offline: "§c{0} §fis offline!"
cache: "Unable to get skin from the cache."
sql: "SQL Error"
json: "JSON Error"
event:
+ settings:
+ error: "§cUnable to update your settings. §7§o({0})"
appearance:
set:
error: "§cUnable to apply your disguise. §7§o({0})"
diff --git a/src/main/resources/fr.yml b/src/main/resources/fr.yml
index a9b4998..6904949 100644
--- a/src/main/resources/fr.yml
+++ b/src/main/resources/fr.yml
@@ -1,10 +1,9 @@
error:
- generic: "Erreur inconnue"
+ generic: "Une erreur inconnue c'est produite."
permission: "§cVous ne possédez pas la permission."
invalid_username: "§cLe pseudo n''est pas un pseudo Minecraft valide."
mojang_name: "Un compte Minecraft avec ce nom n'existe pas."
mojang_skin: "Ce compte Minecraft n'a pas de skin."
- offline: "§c{0} §fest hors-ligne!"
cache: "Impossible de récupérer le skin depuis le cache."
sql: "Erreur SQL"
json: "Erreur JSON"
diff --git a/src/test/java/xyz/atnrch/nicko/test/storage/BrokenSQLTest.java b/src/test/java/xyz/atnrch/nicko/test/storage/BrokenSQLTest.java
index 1712cd7..899ef00 100644
--- a/src/test/java/xyz/atnrch/nicko/test/storage/BrokenSQLTest.java
+++ b/src/test/java/xyz/atnrch/nicko/test/storage/BrokenSQLTest.java
@@ -7,7 +7,7 @@ import xyz.atnrch.nicko.NickoBukkit;
import xyz.atnrch.nicko.config.Configuration;
import xyz.atnrch.nicko.config.DataSourceConfiguration;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import org.junit.jupiter.api.*;
import java.util.Optional;
diff --git a/src/test/java/xyz/atnrch/nicko/test/storage/SQLStorageTest.java b/src/test/java/xyz/atnrch/nicko/test/storage/SQLStorageTest.java
index 2cd6880..1ddc95d 100644
--- a/src/test/java/xyz/atnrch/nicko/test/storage/SQLStorageTest.java
+++ b/src/test/java/xyz/atnrch/nicko/test/storage/SQLStorageTest.java
@@ -8,7 +8,7 @@ import xyz.atnrch.nicko.NickoBukkit;
import xyz.atnrch.nicko.config.Configuration;
import xyz.atnrch.nicko.config.DataSourceConfiguration;
import xyz.atnrch.nicko.appearance.ActionResult;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.atnrch.nicko.i18n.Locale;
import java.util.Optional;
diff --git a/src/test/java/xyz/atnrch/nicko/test/storage/map/MapCacheTest.java b/src/test/java/xyz/atnrch/nicko/test/storage/map/MapCacheTest.java
index 6fa5cdb..61a361f 100644
--- a/src/test/java/xyz/atnrch/nicko/test/storage/map/MapCacheTest.java
+++ b/src/test/java/xyz/atnrch/nicko/test/storage/map/MapCacheTest.java
@@ -6,7 +6,7 @@ import be.seeseemelk.mockbukkit.entity.PlayerMock;
import xyz.atnrch.nicko.NickoBukkit;
import xyz.atnrch.nicko.config.Configuration;
import xyz.atnrch.nicko.config.DataSourceConfiguration;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
diff --git a/src/test/java/xyz/atnrch/nicko/test/storage/redis/RedisCacheTest.java b/src/test/java/xyz/atnrch/nicko/test/storage/redis/RedisCacheTest.java
index e439d11..524e2c2 100644
--- a/src/test/java/xyz/atnrch/nicko/test/storage/redis/RedisCacheTest.java
+++ b/src/test/java/xyz/atnrch/nicko/test/storage/redis/RedisCacheTest.java
@@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test;
import xyz.atnrch.nicko.NickoBukkit;
import xyz.atnrch.nicko.config.Configuration;
import xyz.atnrch.nicko.config.DataSourceConfiguration;
-import xyz.atnrch.nicko.appearance.NickoProfile;
+import xyz.atnrch.nicko.profile.NickoProfile;
import java.util.Optional;