diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java index eeb08a3..f653be9 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java @@ -30,5 +30,7 @@ public record I18NDict(String key) { public static final I18NDict NAME_FAIL_MOJANG = new I18NDict("error.couldnt_get_name_from_mojang"); public static final I18NDict INVALID_USERNAME = new I18NDict("error.invalid_username"); public static final I18NDict UNEXPECTED_ERROR = new I18NDict("error.generic"); + public static final I18NDict SQL_ERROR = new I18NDict("error.sql"); + public static final I18NDict JSON_ERROR = new I18NDict("error.json"); } } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java b/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java index 64f0d70..67598fb 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java @@ -19,7 +19,7 @@ public class PlayerDataStore { private final HashMap names = new HashMap<>(); public PlayerDataStore(NickoBukkit instance) { - this.storage = instance.getNickoConfig().isLocalStorage() ? new JSONStorage() : new SQLStorage(instance); + this.storage = instance.getNickoConfig().isLocalStorage() ? new JSONStorage(instance) : new SQLStorage(instance); } public void storeName(Player player) { diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/storage/Storage.java b/nicko-core/src/main/java/net/artelnatif/nicko/storage/Storage.java index 77cd9b4..b23b1ef 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/storage/Storage.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/storage/Storage.java @@ -1,5 +1,6 @@ package net.artelnatif.nicko.storage; +import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.NickoProfile; import java.util.Optional; @@ -10,7 +11,7 @@ public abstract class Storage { public abstract StorageProvider getProvider(); - public abstract void store(UUID uuid, NickoProfile profile); + public abstract ActionResult store(UUID uuid, NickoProfile profile); public abstract boolean isStored(UUID uuid); diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java b/nicko-core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java index c7b571d..2aee3d7 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java @@ -3,7 +3,9 @@ package net.artelnatif.nicko.storage.json; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.storage.Storage; import net.artelnatif.nicko.storage.StorageProvider; @@ -12,14 +14,18 @@ import java.util.Optional; import java.util.UUID; public class JSONStorage extends Storage { + private final NickoBukkit instance; + final Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create(); final File directory = new File(NickoBukkit.getInstance().getDataFolder() + "/players/"); + public JSONStorage(NickoBukkit instance) { this.instance = instance; } + @Override public StorageProvider getProvider() { return new JSONStorageProvider(directory); } @Override - public void store(UUID uuid, NickoProfile profile) { + public ActionResult store(UUID uuid, NickoProfile profile) { final String profileToJson = gson.toJson(profile); final File file = new File(directory, uuid.toString() + ".json"); @@ -30,14 +36,16 @@ public class JSONStorage extends Storage { writer.write(profileToJson); } } catch (IOException e) { - System.out.println("Could not write to file."); - throw new RuntimeException(e); + instance.getLogger().warning("Could not write to file."); + return new ActionResult<>(I18NDict.Error.JSON_ERROR); } } } catch (IOException e) { - System.out.println("Could not create file."); - throw new RuntimeException(e); + instance.getLogger().warning("Could not create file."); + return new ActionResult<>(I18NDict.Error.JSON_ERROR); } + + return new ActionResult<>(); } @Override diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java b/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java index 6228865..4378cdb 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java @@ -1,7 +1,9 @@ package net.artelnatif.nicko.storage.sql; import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.storage.Storage; import java.sql.Connection; @@ -22,13 +24,16 @@ public class SQLStorage extends Storage { } @Override - public void store(UUID uuid, NickoProfile profile) { + public ActionResult store(UUID uuid, NickoProfile profile) { final Connection connection = getProvider().getConnection(); try { connection.prepareStatement(""); } catch (SQLException e) { - throw new RuntimeException(e); + instance.getLogger().warning("Unable to store player."); + return new ActionResult<>(I18NDict.Error.UNEXPECTED_ERROR); } + + return new ActionResult<>(); } @Override diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java b/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java index 78e0724..09f1e8d 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java @@ -37,7 +37,6 @@ public class SQLStorageProvider implements StorageProvider { } return false; } catch (SQLException e) { - e.printStackTrace(); return false; } } diff --git a/nicko-core/src/main/resources/en.yml b/nicko-core/src/main/resources/en.yml index 5275c69..b35b72c 100644 --- a/nicko-core/src/main/resources/en.yml +++ b/nicko-core/src/main/resources/en.yml @@ -5,6 +5,8 @@ error: generic: "Unknown error" invalid_username: "§cThe specified username is not a valid Minecraft username." player_offline: "§c{0} §fis offline, please try again." + sql: "SQL Error" + json: "JSON Error" event: admin: cache_clear: "§aSkin cache cleaned." diff --git a/nicko-core/src/main/resources/fr.yml b/nicko-core/src/main/resources/fr.yml index 4c68e1e..d4b346d 100644 --- a/nicko-core/src/main/resources/fr.yml +++ b/nicko-core/src/main/resources/fr.yml @@ -5,6 +5,8 @@ error: generic: "Erreur inconnue" invalid_username: "§cLe pseudo spécifié n''est pas un pseudo Minecraft valide." player_offline: "§c{0} §fest hors-ligne, veuillez réessayer." + sql: "Erreur SQL" + json: "Erreur JSON" event: admin: cache_clear: "§aCache des skins nettoyé." diff --git a/nicko-core/src/test/java/net/artelnatif/nicko/test/storage/SQLStorageTest.java b/nicko-core/src/test/java/net/artelnatif/nicko/test/storage/SQLStorageTest.java index f78dbce..b6da227 100644 --- a/nicko-core/src/test/java/net/artelnatif/nicko/test/storage/SQLStorageTest.java +++ b/nicko-core/src/test/java/net/artelnatif/nicko/test/storage/SQLStorageTest.java @@ -5,11 +5,11 @@ import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.config.NickoConfiguration; +import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.Locale; import org.junit.jupiter.api.*; -import java.util.Optional; - public class SQLStorageTest { private static ServerMock server; private static NickoBukkit plugin; @@ -29,12 +29,17 @@ public class SQLStorageTest { @Test @DisplayName("Create SQL Tables") - public void testSQLTables() { + public void createSQLTables() { + Assertions.assertFalse(plugin.getDataStore().getStorage().isError()); + } + @Test + @DisplayName("Store Player Via SQL") + public void storePlayer() { final PlayerMock playerMock = server.addPlayer(); - final Optional data = plugin.getDataStore().getData(playerMock.getUniqueId()); - Assertions.assertTrue(data.isPresent()); - Assertions.assertNull(data.get().getSkin()); + final NickoProfile profile = new NickoProfile("Notch", "Notch", Locale.ENGLISH, true); + final ActionResult storeAction = plugin.getDataStore().getStorage().store(playerMock.getUniqueId(), profile); + Assertions.assertFalse(storeAction.isError()); } @AfterAll