summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java52
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java1
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java3
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java7
-rw-r--r--bukkit/src/main/resources/resources/bukkit/config.yml2
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java14
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java2
9 files changed, 61 insertions, 32 deletions
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<String, Object> 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<String, Object> questValues = getFieldValues(quest, "tasks", "tasksByType");
+ Map<String, Object> 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<String, Object> tasksValues = new HashMap<>();
for (Map.Entry<String, Task> 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<String, Object> questProgressValues = new LinkedHashMap<>();
for (Map.Entry<String, QuestProgress> entry : questProgressMap.entrySet()) {
QuestProgress questProgress = entry.getValue();
- Map<String, Object> questProgressValue = getFieldValues(questProgress, "plugin", "taskProgress");
+ Map<String, Object> 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<String, Object> taskProgressValues = new LinkedHashMap<>();
for (Map.Entry<String, TaskProgress> 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<String> 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<String, Object> getFieldValues(Object object, String... excludeFields) {
- Field[] fields = object.getClass().getDeclaredFields();
+ private Map<String, Object> getFieldValues(Class<?> clazz, Object object, String... excludeFields) {
+ Field[] fields = clazz.getDeclaredFields();
Map<String, Object> 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();
diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml
index 5a8e3f3d..e51db8eb 100644
--- a/bukkit/src/main/resources/resources/bukkit/config.yml
+++ b/bukkit/src/main/resources/resources/bukkit/config.yml
@@ -203,7 +203,7 @@ options:
# How much quests should log, 0 = errors only, 1 = warnings, 2 = info, 3 = debug
verbose-logging-level: 2
# Record Quests log history for /q a debug
- log-history: false
+ record-log-history: true
# Replace placeholders from PlaceholderAPI in rewards, rewardstrings and start strings
quests-use-placeholderapi: false
# Verify quests exist when a player's data is loaded - inconsistencies may arise when
diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java
index 1526fd9f..f4eb7883 100644
--- a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java
@@ -56,7 +56,7 @@ public class QPlayerManager {
public void removePlayer(@NotNull UUID uuid) {
Objects.requireNonNull(uuid, "uuid cannot be null");
- plugin.getQuestsLogger().debug("Unloading and saving player " + uuid + ".");
+ plugin.getQuestsLogger().debug("Unloading and saving player " + uuid + "...");
CompletableFuture<Void> future = savePlayer(uuid);
future.thenAccept((v) -> qPlayers.remove(uuid));
}
@@ -129,8 +129,12 @@ public class QPlayerManager {
Objects.requireNonNull(uuid, "uuid cannot be null");
Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null");
- plugin.getQuestsLogger().debug("Saving player " + uuid + ".");
- storageProvider.saveProgressFile(uuid, questProgressFile);
+ plugin.getQuestsLogger().debug("Saving player " + uuid + "...");
+ if (storageProvider.saveProgressFile(uuid, questProgressFile)) {
+ plugin.getQuestsLogger().debug("Quest progress file saved for player " + uuid + ".");
+ } else {
+ plugin.getQuestsLogger().severe("Failed to save player " + uuid + "!");
+ }
}
/**
@@ -162,17 +166,19 @@ public class QPlayerManager {
* @return completable future with the loaded player, or null if there was an error
*/
public CompletableFuture<QPlayer> loadPlayer(UUID uuid) {
- plugin.getQuestsLogger().debug("Loading player " + uuid + ".");
+ plugin.getQuestsLogger().debug("Loading player " + uuid + "...");
CompletableFuture<QPlayer> future = new CompletableFuture<>();
plugin.getScheduler().doAsync(() -> {
QuestProgressFile questProgressFile = storageProvider.loadProgressFile(uuid);
if (questProgressFile == null) {
+ plugin.getQuestsLogger().debug("A problem occurred trying loading player " + uuid + "; quest progress file is null.");
future.complete(null);
return;
}
QPlayer qPlayer = new QPlayer(plugin, uuid, new QPlayerPreferences(null), questProgressFile, activeQuestController);
qPlayers.computeIfAbsent(uuid, s -> qPlayer);
+ plugin.getQuestsLogger().debug("Quest progress file loaded for player " + uuid + ".");
future.complete(qPlayer);
});
diff --git a/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java
index be2178c6..ba0ee8c8 100644
--- a/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java
@@ -33,7 +33,7 @@ public interface StorageProvider {
* @param uuid the uuid to match the file to
* @param questProgressFile the file to save
*/
- void saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile);
+ boolean saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile);
/**
* Load all QuestProgressFiles