summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/leonardobishop/quests/QuestCompleter.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java1
-rw-r--r--src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java1
-rw-r--r--src/main/java/com/leonardobishop/quests/command/QuestsCommand.java132
-rw-r--r--src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java5
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayer.java11
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayerManager.java15
-rw-r--r--src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java26
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Messages.java1
-rw-r--r--src/main/resources/config.yml1
12 files changed, 117 insertions, 85 deletions
diff --git a/src/main/java/com/leonardobishop/quests/QuestCompleter.java b/src/main/java/com/leonardobishop/quests/QuestCompleter.java
index f31e5daa..d3ff8cf1 100644
--- a/src/main/java/com/leonardobishop/quests/QuestCompleter.java
+++ b/src/main/java/com/leonardobishop/quests/QuestCompleter.java
@@ -35,6 +35,8 @@ public class QuestCompleter implements Runnable {
Player player = Bukkit.getPlayer(questProgress.getPlayer());
if (player != null && player.isOnline()) {
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) return;
+
Quest quest = plugin.getQuestManager().getQuestById(questProgress.getQuestId());
if (!qPlayer.hasStartedQuest(quest)) return;
@@ -52,6 +54,7 @@ public class QuestCompleter implements Runnable {
Player player = Bukkit.getPlayer(questProgressFile.getPlayerUUID());
if (player != null && player.isOnline()) {
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) return;
for (QuestProgress questProgress : questProgressFile.getAllQuestProgress()) {
Quest quest = plugin.getQuestManager().getQuestById(questProgress.getQuestId());
if (quest == null) continue;
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java
index bfbc0e60..6308f9de 100644
--- a/src/main/java/com/leonardobishop/quests/Quests.java
+++ b/src/main/java/com/leonardobishop/quests/Quests.java
@@ -174,7 +174,6 @@ public class Quests extends JavaPlugin {
qPlayerManager = new QPlayerManager(this);
menuController = new MenuController(this);
-
super.getCommand("quests").setExecutor(new QuestsCommand(this));
Bukkit.getPluginManager().registerEvents(new PlayerJoinListener(this), this);
Bukkit.getPluginManager().registerEvents(menuController, this);
diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
index 9a402ed5..5c82cf6b 100644
--- a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
+++ b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
@@ -70,6 +70,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
if (save) args = Arrays.copyOf(args, args.length - 1);
final QPlayer qPlayer = plugin.getPlayerManager().getPlayer(p.getUniqueId());
+ if (qPlayer == null) return "Data not loaded";
String split = args[args.length - 1];
String result = "null";
diff --git a/src/main/java/com/leonardobishop/quests/command/QuestsCommand.java b/src/main/java/com/leonardobishop/quests/command/QuestsCommand.java
index d33baa65..d18f977c 100644
--- a/src/main/java/com/leonardobishop/quests/command/QuestsCommand.java
+++ b/src/main/java/com/leonardobishop/quests/command/QuestsCommand.java
@@ -78,6 +78,10 @@ public class QuestsCommand implements TabExecutor {
if (args.length == 0 && sender instanceof Player) {
Player player = (Player) sender;
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
+ return true;
+ }
qPlayer.openQuests();
return true;
} else if (args.length >= 1) {
@@ -90,10 +94,11 @@ public class QuestsCommand implements TabExecutor {
showAdminHelp(sender, "moddata");
return true;
} else if (args[1].equalsIgnoreCase("reload")) {
+ sender.sendMessage(ChatColor.GRAY + "Please note that some options, such as storage, require a full restart for chances to take effect.");
plugin.reloadConfig();
plugin.reloadQuests();
- showProblems(sender);
- sender.sendMessage(ChatColor.GRAY + "Quests successfully reloaded.");
+ if (!plugin.getQuestsConfigLoader().getFilesWithProblems().isEmpty()) showProblems(sender);
+ sender.sendMessage(ChatColor.GREEN + "Quests successfully reloaded.");
return true;
} else if (args[1].equalsIgnoreCase("config")) {
showProblems(sender);
@@ -156,6 +161,7 @@ public class QuestsCommand implements TabExecutor {
showAdminHelp(sender, "opengui");
return true;
} else if (args[1].equalsIgnoreCase("moddata")) {
+ // TODO remove me
if (args[2].equalsIgnoreCase("clean")) {
FileVisitor<Path> fileVisitor = new SimpleFileVisitor<Path>() {
@Override
@@ -260,36 +266,16 @@ public class QuestsCommand implements TabExecutor {
showAdminHelp(sender, "opengui");
return true;
} else if (args[1].equalsIgnoreCase("moddata")) {
- OfflinePlayer ofp = Bukkit.getOfflinePlayer(args[3]);
- UUID uuid;
- String name;
- // Player.class is a superclass for OfflinePlayer.
- // getofflinePlayer return a player regardless if exists or not
- if (ofp.hasPlayedBefore()) {
- uuid = ofp.getUniqueId();
- name = ofp.getName();
- } else {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
- return true;
- }
+ QPlayer qPlayer = getOtherPlayer(sender, args[3]);
+ if (qPlayer == null) return true;
if (args[2].equalsIgnoreCase("fullreset")) {
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(uuid);
- if (qPlayer == null) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name));
- plugin.getPlayerManager().loadPlayer(uuid);
- qPlayer = plugin.getPlayerManager().getPlayer(uuid); //get again
- }
- if (qPlayer == null) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name));
- return true;
- }
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
questProgressFile.clear();
- plugin.getPlayerManager().savePlayerSync(uuid, questProgressFile);
- if (Bukkit.getPlayer(uuid) == null) {
- plugin.getPlayerManager().dropPlayer(uuid);
+ plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
+ if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
+ plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
}
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_FULLRESET.getMessage().replace("{player}", name));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_FULLRESET.getMessage().replace("{player}", args[3]));
return true;
}
showAdminHelp(sender, "moddata");
@@ -326,26 +312,8 @@ public class QuestsCommand implements TabExecutor {
}
} else if (args[1].equalsIgnoreCase("moddata")) {
boolean success = false;
- OfflinePlayer ofp = Bukkit.getOfflinePlayer(args[3]);
- UUID uuid;
- String name;
- if (ofp.hasPlayedBefore()) {
- uuid = ofp.getUniqueId();
- name = ofp.getName();
- } else {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
- return true;
- }
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(uuid);
- if (qPlayer == null) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name));
- plugin.getPlayerManager().loadPlayer(uuid);
- }
- if (qPlayer == null) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name));
- success = true;
- }
- qPlayer = plugin.getPlayerManager().getPlayer(uuid); //get again
+ QPlayer qPlayer = getOtherPlayer(sender, args[3]);
+ if (qPlayer == null) return true;
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
Quest quest = plugin.getQuestManager().getQuestById(args[4]);
if (quest == null) {
@@ -355,47 +323,47 @@ public class QuestsCommand implements TabExecutor {
}
if (args[2].equalsIgnoreCase("reset")) {
questProgressFile.generateBlankQuestProgress(quest);
- plugin.getPlayerManager().savePlayerSync(uuid, questProgressFile);
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
success = true;
} else if (args[2].equalsIgnoreCase("start")) {
QuestStartResult response = qPlayer.startQuest(quest);
if (response == QuestStartResult.QUEST_LIMIT_REACHED) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLIMIT.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLIMIT.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
} else if (response == QuestStartResult.QUEST_ALREADY_COMPLETED) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOMPLETE.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOMPLETE.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
} else if (response == QuestStartResult.QUEST_COOLDOWN) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
} else if (response == QuestStartResult.QUEST_LOCKED) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLOCKED.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLOCKED.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
} else if (response == QuestStartResult.QUEST_ALREADY_STARTED) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILSTARTED.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILSTARTED.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
} else if (response == QuestStartResult.QUEST_NO_PERMISSION) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILPERMISSION.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILPERMISSION.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
} else if (response == QuestStartResult.NO_PERMISSION_FOR_CATEGORY) {
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCATEGORYPERMISSION.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCATEGORYPERMISSION.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
return true;
}
- plugin.getPlayerManager().savePlayerSync(uuid, questProgressFile);
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
success = true;
} else if (args[2].equalsIgnoreCase("complete")) {
qPlayer.completeQuest(quest);
- plugin.getPlayerManager().savePlayerSync(uuid, questProgressFile);
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", args[3]).replace("{quest}", quest.getId()));
success = true;
}
if (!success) {
showAdminHelp(sender, "moddata");
}
- if (Bukkit.getPlayer(uuid) == null) {
- plugin.getPlayerManager().dropPlayer(uuid);
+ if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
+ plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
}
return true;
}
@@ -409,7 +377,7 @@ public class QuestsCommand implements TabExecutor {
Quest quest = plugin.getQuestManager().getQuestById(args[1]);
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
- sender.sendMessage(ChatColor.RED + "Your quest progress file has not been loaded yet.");
+ player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
return true;
}
if (quest == null) {
@@ -434,10 +402,14 @@ public class QuestsCommand implements TabExecutor {
Player player = (Player) sender;
if (args.length >= 2) {
Category category = plugin.getQuestManager().getCategoryById(args[1]);
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
+ return true;
+ }
if (category == null) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[1]));
} else {
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
qPlayer.openCategory(category, null, false);
return true;
}
@@ -447,7 +419,7 @@ public class QuestsCommand implements TabExecutor {
Player player = (Player) sender;
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
- sender.sendMessage(ChatColor.RED + "Your quest progress file has not been loaded yet.");
+ player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
return true;
}
List<Quest> validQuests = new ArrayList<>();
@@ -467,6 +439,10 @@ public class QuestsCommand implements TabExecutor {
} else if (sender instanceof Player && (args[0].equalsIgnoreCase("started"))) {
Player player = (Player) sender;
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
+ return true;
+ }
qPlayer.openStartedQuests();
return true;
}
@@ -477,6 +453,30 @@ public class QuestsCommand implements TabExecutor {
return true;
}
+ private QPlayer getOtherPlayer(CommandSender sender, String name) {
+ OfflinePlayer ofp = Bukkit.getOfflinePlayer(name);
+ UUID uuid;
+ String username;
+ if (ofp.hasPlayedBefore()) {
+ uuid = ofp.getUniqueId();
+ username = ofp.getName();
+ } else {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", name));
+ return null;
+ }
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(uuid);
+ if (qPlayer == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", username));
+ plugin.getPlayerManager().loadPlayer(uuid);
+ qPlayer = plugin.getPlayerManager().getPlayer(uuid);
+ }
+ if (qPlayer == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", username));
+ return null;
+ }
+ return qPlayer;
+ }
+
private void showProblems(CommandSender sender) {
if (!plugin.getQuestsConfigLoader().getFilesWithProblems().isEmpty()) {
// sender.sendMessage(ChatColor.DARK_GRAY.toString() + "----");
diff --git a/src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java b/src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java
index 5cdb465e..53916c32 100644
--- a/src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java
+++ b/src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java
@@ -38,8 +38,11 @@ public class PlayerJoinListener implements Listener {
Bukkit.getScheduler().runTaskLater(this.plugin, () -> event.getPlayer().sendMessage(plugin.getUpdater().getMessage()), 50L);
}
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(playerUuid);
+ if (qPlayer == null) return;
+
// run a full check to check for any missed quest completions
- plugin.getQuestCompleter().queueFullCheck(plugin.getPlayerManager().getPlayer(playerUuid).getQuestProgressFile());
+ plugin.getQuestCompleter().queueFullCheck(qPlayer.getQuestProgressFile());
}
}
diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java
index 872b02d2..4e04566b 100644
--- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java
+++ b/src/main/java/com/leonardobishop/quests/player/QPlayer.java
@@ -78,10 +78,9 @@ public class QPlayer {
}
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
- QPlayer questPlayer = QuestsAPI.getPlayerManager().getPlayer(uuid);
String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", quest.getDisplayNameStripped());
// PlayerFinishQuestEvent -- start
- PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, questPlayer, questProgress, questFinishMessage);
+ PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, this, questProgress, questFinishMessage);
Bukkit.getPluginManager().callEvent(questFinishEvent);
// PlayerFinishQuestEvent -- end
Bukkit.getServer().getScheduler().runTask(plugin, () -> {
@@ -375,10 +374,10 @@ public class QPlayer {
}
if (Options.CATEGORIES_ENABLED.getBooleanValue()) {
- CategoryQMenu categoryQMenu = new CategoryQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()));
+ CategoryQMenu categoryQMenu = new CategoryQMenu(plugin, this);
List<QuestQMenu> questMenus = new ArrayList<>();
for (Category category : plugin.getQuestManager().getCategories()) {
- QuestQMenu questQMenu = new QuestQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), category.getId(), categoryQMenu);
+ QuestQMenu questQMenu = new QuestQMenu(plugin, this, category.getId(), categoryQMenu);
List<Quest> quests = new ArrayList<>();
for (String questid : category.getRegisteredQuestIds()) {
Quest quest = plugin.getQuestManager().getQuestById(questid);
@@ -393,7 +392,7 @@ public class QPlayer {
plugin.getMenuController().openMenu(player, categoryQMenu, 1);
} else {
- QuestQMenu questQMenu = new QuestQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), "", null);
+ QuestQMenu questQMenu = new QuestQMenu(plugin, this, "", null);
List<Quest> quests = new ArrayList<>();
for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) {
quests.add(entry.getValue());
@@ -414,7 +413,7 @@ public class QPlayer {
return;
}
- StartedQMenu startedQMenu = new StartedQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()));
+ StartedQMenu startedQMenu = new StartedQMenu(plugin, this);
List<QuestSortWrapper> quests = new ArrayList<>();
for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) {
quests.add(new QuestSortWrapper(plugin, entry.getValue()));
diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
index 2cd9cbfd..41c704e3 100644
--- a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
+++ b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
@@ -36,7 +36,11 @@ public class QPlayerManager {
plugin.getQuestsLogger().warning("No valid storage provider is configured - Quests will use YAML storage as a default");
this.storageProvider = new YamlStorageProvider(plugin);
}
- storageProvider.init();
+ try {
+ storageProvider.init();
+ } catch (Exception ignored) {
+ plugin.getQuestsLogger().severe("An error occurred initialising the storage provider.");
+ }
}
private final Map<UUID, QPlayer> qPlayers = new ConcurrentHashMap<>();
@@ -78,7 +82,9 @@ public class QPlayerManager {
* @param uuid the uuid of the player
*/
public void savePlayer(UUID uuid) {
- savePlayer(uuid, getPlayer(uuid).getQuestProgressFile());
+ QPlayer qPlayer = getPlayer(uuid);
+ if (qPlayer == null) return;
+ savePlayer(uuid, qPlayer.getQuestProgressFile());
}
/**
@@ -101,7 +107,9 @@ public class QPlayerManager {
* @param uuid the uuid of the player
*/
public void savePlayerSync(UUID uuid) {
- savePlayerSync(uuid, getPlayer(uuid).getQuestProgressFile());
+ QPlayer qPlayer = getPlayer(uuid);
+ if (qPlayer == null) return;
+ savePlayerSync(uuid, qPlayer.getQuestProgressFile());
}
/**
@@ -144,6 +152,7 @@ public class QPlayerManager {
plugin.getQuestsLogger().debug("Loading player " + uuid + ". Main thread: " + Bukkit.isPrimaryThread());
qPlayers.computeIfAbsent(uuid, s -> {
QuestProgressFile questProgressFile = storageProvider.loadProgressFile(uuid);
+ if (questProgressFile == null) return null;
return new QPlayer(uuid, questProgressFile, new QPlayerPreferences(null), plugin);
});
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java
index da497808..125bfecc 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java
@@ -127,6 +127,9 @@ public final class MiningCertainTaskType extends TaskType {
if (event.getPlayer().hasMetadata("NPC")) return;
QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
for (Quest quest : super.getRegisteredQuests()) {
if (qPlayer.hasStartedQuest(quest)) {
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java b/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java
index 581cbafb..22cef8a2 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java
@@ -47,6 +47,9 @@ public class EssentialsBalanceTaskType extends TaskType {
Essentials ess = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials");
if (player != null && player.isOnline() && ess != null) {
QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(playerUUID);
+ if (qPlayer == null) {
+ return;
+ }
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
diff --git a/src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java b/src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java
index fefd53ba..02692919 100644
--- a/src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java
+++ b/src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java
@@ -57,17 +57,23 @@ public class MySqlStorageProvider implements StorageProvider {
private static final String WRITE_PLAYER_TASK_PROGRESS =
"INSERT INTO `{prefix}task_progress` (uuid, quest_id, task_id, completed, progress, data_type) VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE completed=?, progress=?, data_type=?";
- private final HikariDataSource hikari;
- private final String prefix;
+ private final ConfigurationSection configuration;
private final Quests plugin;
- private final Function<String, String> statementProcessor;
+ private HikariDataSource hikari;
+ private String prefix;
+ private Function<String, String> statementProcessor;
+ private boolean fault;
public MySqlStorageProvider(Quests plugin, ConfigurationSection configuration) {
this.plugin = plugin;
if (configuration == null) {
configuration = new YamlConfiguration();
}
+ this.configuration = configuration;
+ }
+ @Override
+ public void init() {
String address = configuration.getString("network.address", "localhost:3306");
String database = configuration.getString("network.database", "minecraft");
String url = "jdbc:mysql://" + address + "/" + database;
@@ -94,13 +100,14 @@ public class MySqlStorageProvider implements StorageProvider {
config.addDataSourceProperty("elideSetAutoCommits", true);
config.addDataSourceProperty("maintainTimeStats", false);
- this.hikari = new HikariDataSource(config);
+ try {
+ this.hikari = new HikariDataSource(config);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fault = true;
+ }
this.prefix = configuration.getString("database-settings.table-prefix", "quests_");
this.statementProcessor = s -> s.replace("{prefix}", prefix);
- }
-
- @Override
- public void init() {
try (Connection connection = hikari.getConnection()) {
try (Statement s = connection.createStatement()) {
plugin.getQuestsLogger().debug("Creating default tables");
@@ -121,6 +128,7 @@ public class MySqlStorageProvider implements StorageProvider {
@Override
public QuestProgressFile loadProgressFile(UUID uuid) {
+ if (fault) return null;
QuestProgressFile questProgressFile = new QuestProgressFile(uuid, plugin);
try (Connection connection = hikari.getConnection()) {
plugin.getQuestsLogger().debug("Querying player " + uuid);
@@ -193,12 +201,14 @@ public class MySqlStorageProvider implements StorageProvider {
} catch (SQLException e) {
plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "!");
e.printStackTrace();
+ return null;
}
return questProgressFile;
}
@Override
public void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile) {
+ if (fault) return;
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))) {
diff --git a/src/main/java/com/leonardobishop/quests/util/Messages.java b/src/main/java/com/leonardobishop/quests/util/Messages.java
index ba9e42da..a86a4144 100644
--- a/src/main/java/com/leonardobishop/quests/util/Messages.java
+++ b/src/main/java/com/leonardobishop/quests/util/Messages.java
@@ -22,6 +22,7 @@ public enum Messages {
QUEST_CATEGORY_PERMISSION("messages.quest-category-permission"),
QUEST_CANCEL_NOTSTARTED("messages.quest-cancel-notstarted"),
QUEST_UPDATER("messages.quest-updater"),
+ COMMAND_DATA_NOT_LOADED("messages.command-data-not-loaded"),
COMMAND_SUB_DOESNTEXIST("messages.command-sub-doesntexist"),
COMMAND_QUEST_START_DOESNTEXIST("messages.command-quest-start-doesntexist"),
COMMAND_QUEST_GENERAL_DOESNTEXIST("messages.command-quest-general-doesntexist"),
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 4b8a4f2b..2c2e09c7 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -334,6 +334,7 @@ messages:
quest-category-quest-permission: "&7You do not have permission to start this quest since it is in a category you do not have permission to view."
quest-cancel-notstarted: "&7You have not started this quest."
quest-updater: "&cQuests > &7A new version &c{newver} &7was found on Spigot (your version: &c{oldver}&7). Please update me! <3 - Link: {link}"
+ command-data-not-loaded: "&4Your quests progress file has not been loaded; you cannot use quests. If this issue persists, contact an admin."
command-sub-doesntexist: "&7The specified subcommand '&c{sub}' &7does not exist."
command-quest-start-doesntexist: "&7The specified quest '&c{quest}&7' does not exist."
command-quest-general-doesntexist: "&7The specified quest '&c{quest}&7' does not exist."