From 75377a31562e6c1c06a5b306f002da7850065e42 Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Sun, 26 Jun 2022 13:45:47 +0100 Subject: Add boolean return type to storage providers --- .../quests/bukkit/BukkitQuestsPlugin.java | 4 +- .../bukkit/command/AdminDebugCommandHandler.java | 52 +++++++++++++++------- .../quests/bukkit/listener/PlayerJoinListener.java | 1 + .../bukkit/listener/PlayerLeaveListener.java | 3 ++ .../bukkit/storage/MySqlStorageProvider.java | 8 ++-- .../quests/bukkit/storage/YamlStorageProvider.java | 7 ++- 6 files changed, 49 insertions(+), 26 deletions(-) (limited to 'bukkit/src/main/java/com') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index bb29e1f5..8cf42b37 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -182,7 +182,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { } try { - questsLogger.info("Initialising storage provider '" + storageProvider.getName()); + questsLogger.info("Initialising storage provider '" + storageProvider.getName() + "'"); storageProvider.init(); } catch (Exception e) { questsLogger.severe("An error occurred initialising the storage provider."); @@ -464,7 +464,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { if (validConfiguration) { int loggingLevel = questsConfig.getInt("options.verbose-logging-level", 2); questsLogger.setServerLoggingLevel(QuestsLogger.LoggingLevel.fromNumber(loggingLevel)); - boolean logHistoryEnabled = questsConfig.getBoolean("options.log-history", false); + boolean logHistoryEnabled = questsConfig.getBoolean("options.record-log-history", true); logHistory.setEnabled(logHistoryEnabled); switch (questsConfig.getString("quest-mode.mode", "normal").toLowerCase()) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java index 9e222327..408b0d06 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java @@ -28,6 +28,7 @@ import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.FileAttribute; +import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; @@ -127,7 +128,13 @@ public class AdminDebugCommandHandler implements CommandHandler { lines.add(""); lines.add("Number of items: " + plugin.getQuestItemRegistry().getAllItems().size()); lines.add(""); - //TODO this + for (QuestItem questItem : plugin.getQuestItemRegistry().getAllItems()) { + Map values = getFieldValues(questItem.getClass(), questItem); + values.putAll(getFieldValues(questItem.getClass().getSuperclass(), questItem)); + printMap(lines, 0, "Item " + questItem.getId() + " (" + questItem.getClass().getSimpleName() + ")", values); + lines.add(""); + } + lines.add("################################"); lines.add("# Quests #"); @@ -136,7 +143,7 @@ public class AdminDebugCommandHandler implements CommandHandler { lines.add("Number of quests: " + plugin.getQuestManager().getQuests().size()); lines.add(""); for (Quest quest : plugin.getQuestManager().getQuests().values()) { - Map questValues = getFieldValues(quest, "tasks", "tasksByType"); + Map questValues = getFieldValues(quest.getClass(), quest, "tasks", "tasksByType"); try { Field tasksField = quest.getClass().getDeclaredField("tasks"); tasksField.setAccessible(true); @@ -144,7 +151,7 @@ public class AdminDebugCommandHandler implements CommandHandler { Map tasksValues = new HashMap<>(); for (Map.Entry taskEntry : tasksMap.entrySet()) { Task task = taskEntry.getValue(); - tasksValues.put(task.getId(), getFieldValues(task)); + tasksValues.put(task.getId(), getFieldValues(task.getClass(), task)); } questValues.put("tasks", tasksValues); } catch (NoSuchFieldException | IllegalAccessException e) { @@ -167,7 +174,7 @@ public class AdminDebugCommandHandler implements CommandHandler { for (QPlayer qPlayer : plugin.getPlayerManager().getQPlayers()) { lines.add("QPlayer " + qPlayer.getPlayerUUID() + ":"); QPlayerPreferences preferences = qPlayer.getPlayerPreferences(); - printMap(lines, 1, "Preferences", getFieldValues(preferences)); + printMap(lines, 1, "Preferences", getFieldValues(preferences.getClass(), preferences)); QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); try { @@ -177,7 +184,7 @@ public class AdminDebugCommandHandler implements CommandHandler { Map questProgressValues = new LinkedHashMap<>(); for (Map.Entry entry : questProgressMap.entrySet()) { QuestProgress questProgress = entry.getValue(); - Map questProgressValue = getFieldValues(questProgress, "plugin", "taskProgress"); + Map questProgressValue = getFieldValues(questProgress.getClass(), questProgress, "plugin", "taskProgress"); Field taskProgressField = questProgress.getClass().getDeclaredField("taskProgress"); taskProgressField.setAccessible(true); @@ -185,7 +192,7 @@ public class AdminDebugCommandHandler implements CommandHandler { Map taskProgressValues = new LinkedHashMap<>(); for (Map.Entry taskEntry : taskProgressMap.entrySet()) { TaskProgress taskProgress = taskEntry.getValue(); - taskProgressValues.put(taskEntry.getKey(), getFieldValues(taskProgress, "plugin", "linkedQuestProgress")); + taskProgressValues.put(taskEntry.getKey(), getFieldValues(taskProgress.getClass(), taskProgress, "plugin", "linkedQuestProgress")); } questProgressValue.put("taskProgress", taskProgressValues); @@ -200,16 +207,29 @@ public class AdminDebugCommandHandler implements CommandHandler { lines.add(""); } - lines.add("################################"); - lines.add("# Log History #"); - lines.add("################################"); - lines.add(""); - for (LogHistory.LogEntry line : plugin.getLogHistory().getEntries()) { - lines.add(String.format("[%s/%s/%s] %s", line.getTime(), line.getType().toString(), line.getThread(), line.getEntry())); + if (plugin.getLogHistory().isEnabled()) { + lines.add("################################"); + lines.add("# Log History #"); + lines.add("################################"); + lines.add(""); + int timeMaxLength = 1; + int typeMaxLength = 1; + int threadMaxLength = 1; + for (LogHistory.LogEntry line : plugin.getLogHistory().getEntries()) { + timeMaxLength = Math.max(timeMaxLength, String.valueOf(line.getTime()).length()); + typeMaxLength = Math.max(typeMaxLength, line.getType().toString().length()); + threadMaxLength = Math.max(threadMaxLength, line.getThread().length()); + } + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (LogHistory.LogEntry line : plugin.getLogHistory().getEntries()) { + lines.add(String.format("%-" + timeMaxLength + "s %-" + typeMaxLength + "s %-" + threadMaxLength + "s | %s", + dateFormat.format(new Date(line.getTime())), line.getType().toString(), line.getThread(), line.getEntry())); + } } List errors = new ArrayList<>(); lines.add(0, ""); + lines.add(0, "Log history: " + plugin.getLogHistory().isEnabled()); printList(errors, 0, "Errors generating report", this.errors, String::valueOf); lines.addAll(0, errors); lines.add(0, "Time taken: " + (System.currentTimeMillis() - start) + "ms"); @@ -233,18 +253,18 @@ public class AdminDebugCommandHandler implements CommandHandler { } } - private Map getFieldValues(Object object, String... excludeFields) { - Field[] fields = object.getClass().getDeclaredFields(); + private Map getFieldValues(Class clazz, Object object, String... excludeFields) { + Field[] fields = clazz.getDeclaredFields(); Map values = new LinkedHashMap<>(); for (Field field : fields) { if (Arrays.asList(excludeFields).contains(field.getName())) { continue; } - field.setAccessible(true); try { + field.setAccessible(true); values.put(field.getName(), field.get(object)); } catch (IllegalAccessException e) { - error("Failed to get field value for " + object.getClass().getSimpleName() + "." + field.getName() + ": " + e.getClass().getSimpleName() + "(" + e.getMessage() + ")"); + error("Failed to get field value for " + clazz.getSimpleName() + "." + field.getName() + ": " + e.getClass().getSimpleName() + "(" + e.getMessage() + ")"); e.printStackTrace(); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java index a6af86e1..dbe27ffc 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java @@ -32,6 +32,7 @@ public class PlayerJoinListener implements Listener { } final Player player = event.getPlayer(); + plugin.getQuestsLogger().debug("PlayerJoinListener: " + player.getUniqueId() + " (" + player.getName() + ")"); plugin.getServer().getScheduler().runTaskLater(plugin, () -> { if (!player.isOnline()) return; plugin.getPlayerManager().loadPlayer(player.getUniqueId()).thenAccept(qPlayer -> { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java index 1f41344a..d5c94011 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java @@ -2,6 +2,7 @@ package com.leonardobishop.quests.bukkit.listener; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.common.player.QPlayer; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; @@ -18,6 +19,8 @@ public class PlayerLeaveListener implements Listener { public void onEvent(PlayerQuitEvent event) { QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); if (qPlayer == null) return; + Player player = event.getPlayer(); + plugin.getQuestsLogger().debug("PlayerLeaveListener: " + player.getUniqueId() + " (" + player.getName() + ")"); plugin.getPlayerManager().removePlayer(qPlayer.getPlayerUUID()); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java index 3d5f6ea1..3f737aff 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java @@ -228,7 +228,6 @@ public class MySqlStorageProvider implements StorageProvider { questProgressFile.addQuestProgress(questProgress); } } catch (SQLException e) { - plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "!"); e.printStackTrace(); return null; } @@ -236,11 +235,11 @@ public class MySqlStorageProvider implements StorageProvider { } @Override - public void saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { + public boolean saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { Objects.requireNonNull(uuid, "uuid cannot be null"); Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null"); - if (fault) return; + if (fault) return false; try (Connection connection = hikari.getConnection()) { try (PreparedStatement writeQuestProgress = connection.prepareStatement(this.statementProcessor.apply(WRITE_PLAYER_QUEST_PROGRESS)); PreparedStatement writeTaskProgress = connection.prepareStatement(this.statementProcessor.apply(WRITE_PLAYER_TASK_PROGRESS))) { @@ -304,9 +303,10 @@ public class MySqlStorageProvider implements StorageProvider { writeQuestProgress.executeBatch(); writeTaskProgress.executeBatch(); } + return true; } catch (SQLException e) { - plugin.getQuestsLogger().severe("Failed to save player: " + uuid + "!"); e.printStackTrace(); + return false; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java index 4d758145..70cacd7a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java @@ -97,7 +97,6 @@ public class YamlStorageProvider implements StorageProvider { } } } catch (Exception ex) { - plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "!"); ex.printStackTrace(); return null; } finally { @@ -107,7 +106,7 @@ public class YamlStorageProvider implements StorageProvider { return questProgressFile; } - public void saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { + public boolean saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { Objects.requireNonNull(uuid, "uuid cannot be null"); Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null"); @@ -147,10 +146,10 @@ public class YamlStorageProvider implements StorageProvider { plugin.getQuestsLogger().debug("Writing player " + uuid + " to disk."); try { data.save(file); - plugin.getQuestsLogger().debug("Write of player " + uuid + " to disk complete."); + return true; } catch (IOException e) { - plugin.getQuestsLogger().debug("Failed to write player: " + uuid + "!."); e.printStackTrace(); + return false; } } finally { lock.unlock(); -- cgit v1.2.3-70-g09d2