aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java/com
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2022-04-22 17:41:20 +0100
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2022-04-22 17:41:20 +0100
commit43e647990b611205676bb42623a3814a904fe0e8 (patch)
treeb655eddd0c6046158124d2ac99a782a50dfbb39d /bukkit/src/main/java/com
parent5258cbfaeb871b5d402a107f278e2de2f552dc41 (diff)
Make moddata commands IO async (closes #359)
Diffstat (limited to 'bukkit/src/main/java/com')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java16
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java19
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java86
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java54
6 files changed, 112 insertions, 77 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java
index 48265aad..feb11925 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java
@@ -25,21 +25,19 @@ public class AdminModdataCompleteCommandHandler implements CommandHandler {
@Override
public void handle(CommandSender sender, String[] args) {
if (args.length > 4) {
- QPlayer qPlayer = CommandUtils.getOtherPlayer(sender, args[3], plugin);
- if (qPlayer == null) return;
- QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
Quest quest = plugin.getQuestManager().getQuestById(args[4]);
if (quest == null) {
Messages.COMMAND_QUEST_START_DOESNTEXIST.send(sender, "{quest}", args[4]);
return;
}
- qPlayer.completeQuest(quest);
- plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
- Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.send(sender, "{player}", args[3], "{quest}", quest.getId());
- if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
- plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
- }
+ CommandUtils.useOtherPlayer(sender, args[3], plugin, (qPlayer) -> {
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+ qPlayer.completeQuest(quest);
+ Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.send(sender, "{player}", args[3], "{quest}", quest.getId());
+
+ CommandUtils.doSafeSave(qPlayer, questProgressFile, plugin);
+ });
return;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java
index de57b0aa..1d908823 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java
@@ -24,19 +24,14 @@ public class AdminModdataFullresetCommandHandler implements CommandHandler {
@Override
public void handle(CommandSender sender, String[] args) {
if (args.length > 3) {
- QPlayer qPlayer = CommandUtils.getOtherPlayer(sender, args[3], plugin);
- if (qPlayer == null) return;
- QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
- questProgressFile.reset();
- plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
- if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
- plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
- }
- Messages.COMMAND_QUEST_ADMIN_FULLRESET.send(sender, "{player}", args[3]);
+ CommandUtils.useOtherPlayer(sender, args[3], plugin, (qPlayer) -> {
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+ questProgressFile.reset();
+ Messages.COMMAND_QUEST_ADMIN_FULLRESET.send(sender, "{player}", args[3]);
+
+ CommandUtils.doSafeSave(qPlayer, questProgressFile, plugin);
+ });
- if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
- plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
- }
return;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java
index df871c04..bec1cdbe 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java
@@ -29,63 +29,59 @@ public class AdminModdataRandomCommandHandler implements CommandHandler {
@Override
public void handle(CommandSender sender, String[] args) {
if (args.length >= 4) {
- QPlayer qPlayer = CommandUtils.getOtherPlayer(sender, args[3], plugin);
- if (qPlayer == null) return;
- QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+ CommandUtils.useOtherPlayer(sender, args[3], plugin, (qPlayer) -> {
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
- List<Quest> validQuests = new ArrayList<>();
- boolean fromCategory = args.length != 4;
- if (!fromCategory) {
- for (Quest quest : plugin.getQuestManager().getQuests().values()) {
- if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
- validQuests.add(quest);
- }
- }
- } else {
- Category category = plugin.getQuestManager().getCategoryById(args[4]);
- if (category == null) {
- Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.send(sender, "{category}", args[1]);
- } else {
- for (String questId : category.getRegisteredQuestIds()) {
- Quest quest = plugin.getQuestManager().getQuestById(questId);
- if (quest == null) continue;
+ List<Quest> validQuests = new ArrayList<>();
+ boolean fromCategory = args.length != 4;
+ if (!fromCategory) {
+ for (Quest quest : plugin.getQuestManager().getQuests().values()) {
if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
validQuests.add(quest);
}
}
+ } else {
+ Category category = plugin.getQuestManager().getCategoryById(args[4]);
+ if (category == null) {
+ Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.send(sender, "{category}", args[1]);
+ } else {
+ for (String questId : category.getRegisteredQuestIds()) {
+ Quest quest = plugin.getQuestManager().getQuestById(questId);
+ if (quest == null) continue;
+ if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+ validQuests.add(quest);
+ }
+ }
+ }
}
- }
- if (validQuests.isEmpty()) {
+ if (validQuests.isEmpty()) {
+ if (fromCategory) {
+ Messages.COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_NONE.send(sender,
+ "{player}", args[3],
+ "{category}", args[4]);
+ } else {
+ Messages.COMMAND_QUEST_ADMIN_RANDOM_NONE.send(sender, "{player}", args[3]);
+ }
+ return;
+ }
+ int random = ThreadLocalRandom.current().nextInt(0, validQuests.size());
+ Quest quest = validQuests.get(random);
+ qPlayer.startQuest(quest);
+
if (fromCategory) {
- Messages.COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_NONE.send(sender,
+ Messages.COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_SUCCESS.send(sender,
"{player}", args[3],
- "{category}", args[4]);
+ "{category}", args[4],
+ "{quest}", quest.getId());
} else {
- Messages.COMMAND_QUEST_ADMIN_RANDOM_NONE.send(sender, "{player}", args[3]);
+ Messages.COMMAND_QUEST_ADMIN_RANDOM_SUCCESS.send(sender,
+ "{player}", args[3],
+ "{quest}", quest.getId());
}
- return;
- }
- int random = ThreadLocalRandom.current().nextInt(0, validQuests.size());
- Quest quest = validQuests.get(random);
- qPlayer.startQuest(quest);
-
- plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
- if (fromCategory) {
- Messages.COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_SUCCESS.send(sender,
- "{player}", args[3],
- "{category}", args[4],
- "{quest}", quest.getId());
- } else {
- Messages.COMMAND_QUEST_ADMIN_RANDOM_SUCCESS.send(sender,
- "{player}", args[3],
- "{quest}", quest.getId());
- }
- if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
- plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
- }
- return;
+ CommandUtils.doSafeSave(qPlayer, questProgressFile, plugin);
+ });
}
sender.sendMessage(ChatColor.RED + "/quests a/admin moddata random <player> [category]");
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java
index ce598473..1de4aaef 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java
@@ -25,7 +25,7 @@ public class AdminModdataResetCommandHandler implements CommandHandler {
@Override
public void handle(CommandSender sender, String[] args) {
if (args.length > 4) {
- QPlayer qPlayer = CommandUtils.getOtherPlayer(sender, args[3], plugin);
+ QPlayer qPlayer = CommandUtils.getOtherPlayerSync(sender, args[3], plugin);
if (qPlayer == null) return;
Quest quest = plugin.getQuestManager().getQuestById(args[4]);
if (quest == null) {
@@ -34,12 +34,9 @@ public class AdminModdataResetCommandHandler implements CommandHandler {
}
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
questProgressFile.generateBlankQuestProgress(quest, true);
- plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.send(sender, "{player}", args[3], "{quest}", quest.getId());
- if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
- plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
- }
+ CommandUtils.doSafeSave(qPlayer, questProgressFile, plugin);
return;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java
index 5653ba50..e0fedd7e 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java
@@ -26,7 +26,7 @@ public class AdminModdataStartCommandHandler implements CommandHandler {
@Override
public void handle(CommandSender sender, String[] args) {
if (args.length > 4) {
- QPlayer qPlayer = CommandUtils.getOtherPlayer(sender, args[3], plugin);
+ QPlayer qPlayer = CommandUtils.getOtherPlayerSync(sender, args[3], plugin);
if (qPlayer == null) return;
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
Quest quest = plugin.getQuestManager().getQuestById(args[4]);
@@ -59,12 +59,9 @@ public class AdminModdataStartCommandHandler implements CommandHandler {
return;
}
- plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.send(sender, "{player}", args[3], "{quest}", quest.getId());
- if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
- plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
- }
+ CommandUtils.doSafeSave(qPlayer, questProgressFile, plugin);
return;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java
index ed62fd63..90e529a2 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java
@@ -4,12 +4,14 @@ import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import com.leonardobishop.quests.bukkit.util.chat.Chat;
import com.leonardobishop.quests.common.config.ConfigProblem;
import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import java.util.*;
+import java.util.function.Consumer;
public class CommandUtils {
@@ -69,7 +71,7 @@ public class CommandUtils {
}
}
- public static QPlayer getOtherPlayer(CommandSender sender, String name, BukkitQuestsPlugin plugin) {
+ public static QPlayer getOtherPlayerSync(CommandSender sender, String name, BukkitQuestsPlugin plugin) {
OfflinePlayer ofp = Bukkit.getOfflinePlayer(name);
UUID uuid;
String username;
@@ -93,4 +95,54 @@ public class CommandUtils {
return qPlayer;
}
+ public static void useOtherPlayer(CommandSender sender, String name, BukkitQuestsPlugin plugin, Consumer<QPlayer> callback) {
+ OfflinePlayer ofp = Bukkit.getOfflinePlayer(name);
+ UUID uuid;
+ String username;
+ if (ofp.getName() != null) {
+ uuid = ofp.getUniqueId();
+ username = ofp.getName();
+ } else {
+ Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.send(sender, "{player}", name);
+ return;
+ }
+
+ {
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(uuid);
+ if (qPlayer != null) {
+ callback.accept(qPlayer);
+ return;
+ }
+ }
+
+ plugin.getScheduler().doAsync(() -> {
+ if (plugin.getPlayerManager().getPlayer(uuid) == null) {
+ Messages.COMMAND_QUEST_ADMIN_LOADDATA.send(sender, "{player}", username);
+ plugin.getPlayerManager().loadPlayer(uuid);
+ }
+
+ final QPlayer qPlayer = plugin.getPlayerManager().getPlayer(uuid);
+
+ if (qPlayer == null) {
+ Messages.COMMAND_QUEST_ADMIN_NODATA.send(sender, "{player}", username);
+ return;
+ }
+
+ plugin.getScheduler().doSync(() -> callback.accept(qPlayer));
+ });
+ }
+
+ public static void doSafeSave(QPlayer qPlayer, QuestProgressFile questProgressFile, BukkitQuestsPlugin plugin) {
+ if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
+ plugin.getScheduler().doAsync(() -> {
+ plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
+ plugin.getScheduler().doSync(() -> {
+ if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
+ plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
+ }
+ });
+ });
+ }
+ }
+
}