summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/config.yml17
-rw-r--r--src/me/fatpigsarefat/quests/Quests.java9
-rw-r--r--src/me/fatpigsarefat/quests/commands/CommandQuests.java136
-rw-r--r--src/me/fatpigsarefat/quests/events/EventInventory.java2
-rw-r--r--src/me/fatpigsarefat/quests/obj/Messages.java12
-rw-r--r--src/me/fatpigsarefat/quests/player/QPlayer.java22
-rw-r--r--src/me/fatpigsarefat/quests/player/QPlayerManager.java8
-rw-r--r--src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java4
-rw-r--r--src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java22
-rw-r--r--src/plugin.yml2
10 files changed, 199 insertions, 35 deletions
diff --git a/src/config.yml b/src/config.yml
index 281b1153..2a255027 100644
--- a/src/config.yml
+++ b/src/config.yml
@@ -868,11 +868,16 @@ messages:
command-quest-admin-playernotfound: "&7Player '&c{player}&7' could not be found."
command-quest-openquests-admin-success: "&7Opened Quest GUI for player &c{player}&7."
command-quest-opencategory-admin-success: "&7Opened category &c{category} &7for player &c{player}&7."
- command-quest-start-admin-success: "&7Successfully started quest '&c{quest}&7' for player &c{player}&7."
- command-quest-complete-admin-success: "&7Successfully completed quest '&c{quest}&7' for player &c{player}&7."
- command-quest-reset-admin-success: "&7Successfully reset quest '&c{quest}&7' for player &c{player}&7."
- command-quest-fullreset-admin-success: "&7Successfully reset player &c{player}&7."
- command-quest-start-admin-fail: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They may not have unlocked it, on cooldown, etc."
- command-quest-complete-admin-fail: "&7Failed to complete '&c{quest}&7' for player &c{player}&7. They may have not started it."
command-taskview-admin-fail: "&7Task type '&c{task}&7' does not exist."
beta-reminder: "&cQuests > &7Reminder: you are currently using a &cbeta &7version of Quests. Please send bug reports to https://github.com/fatpigsarefat/Quests/issues and check for updates regularly using &c/quests admin update&7!"
+ command-quest-admin-loaddata: "&7Quest data for '&c{player}&7' is being loaded."
+ command-quest-admin-nodata: "&7No data could be found for player &c{player}&7."
+ command-quest-admin-fullreset: "&7Data for player &c{player}&7 has been fully reset."
+ command-quest-admin-start-faillocked: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They have not yet unlocked it."
+ command-quest-admin-start-failcooldown: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. It is still on cooldown for them."
+ command-quest-admin-start-failcomplete: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They have already completed it."
+ command-quest-admin-start-faillimit: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They have reached their quest start limit."
+ command-quest-admin-start-success: "&7Quest &c{quest} &7started for player &c{player}&7."
+ command-quest-admin-complete-success: "&7Quest &c{quest} &7completed for player &c{player}&7."
+ command-quest-admin-reset-success: "&7Successfully reset quest '&c{quest}&7' for player &c{player}&7."
+
diff --git a/src/me/fatpigsarefat/quests/Quests.java b/src/me/fatpigsarefat/quests/Quests.java
index 1f2b8951..bfbc1081 100644
--- a/src/me/fatpigsarefat/quests/Quests.java
+++ b/src/me/fatpigsarefat/quests/Quests.java
@@ -147,6 +147,9 @@ public class Quests extends JavaPlugin {
@Override
public void run() {
for (QPlayer qPlayer : qPlayerManager.getQPlayers()) {
+ if (qPlayer.isOnlyDataLoaded()) {
+ continue;
+ }
qPlayer.getQuestProgressFile().saveToDisk();
}
}
@@ -155,6 +158,9 @@ public class Quests extends JavaPlugin {
@Override
public void run() {
for (QPlayer qPlayer : qPlayerManager.getQPlayers()) {
+ if (qPlayer.isOnlyDataLoaded()) {
+ continue;
+ }
QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
for (Map.Entry<String, Quest> entry : Quests.getQuestManager().getQuests().entrySet()) {
String id = entry.getKey();
@@ -188,6 +194,9 @@ public class Quests extends JavaPlugin {
@Override
public void onDisable() {
for (QPlayer qPlayer : qPlayerManager.getQPlayers()) {
+ if (qPlayer.isOnlyDataLoaded()) {
+ continue;
+ }
qPlayer.getQuestProgressFile().saveToDisk();
}
}
diff --git a/src/me/fatpigsarefat/quests/commands/CommandQuests.java b/src/me/fatpigsarefat/quests/commands/CommandQuests.java
index a1975ef5..46258d64 100644
--- a/src/me/fatpigsarefat/quests/commands/CommandQuests.java
+++ b/src/me/fatpigsarefat/quests/commands/CommandQuests.java
@@ -4,17 +4,21 @@ import me.fatpigsarefat.quests.Quests;
import me.fatpigsarefat.quests.obj.Messages;
import me.fatpigsarefat.quests.obj.Options;
import me.fatpigsarefat.quests.player.QPlayer;
+import me.fatpigsarefat.quests.player.questprogressfile.QuestProgressFile;
import me.fatpigsarefat.quests.quests.Category;
import me.fatpigsarefat.quests.quests.Quest;
import me.fatpigsarefat.quests.quests.tasktypes.TaskType;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
+import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
+import java.util.UUID;
+
public class CommandQuests implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
@@ -108,41 +112,137 @@ public class CommandQuests implements CommandExecutor {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
- //TODO finish moddata command
showAdminHelp(sender, "opengui");
return true;
} else if (args[1].equalsIgnoreCase("moddata")) {
+ Player player;
+ OfflinePlayer ofp;
+ UUID uuid;
+ String name;
+ if ((player = Bukkit.getPlayer(args[3])) != null) {
+ uuid = player.getUniqueId();
+ name = player.getName();
+ } else if ((ofp = Bukkit.getOfflinePlayer(args[3])) != null) {
+ uuid = ofp.getUniqueId();
+ name = ofp.getName();
+ } else {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
+ return true;
+ }
+ if (args[2].equalsIgnoreCase("fullreset")) {
+ if (Quests.getPlayerManager().getPlayer(uuid) == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name));
+ Quests.getPlayerManager().loadPlayer(uuid, true);
+ }
+ if (Quests.getPlayerManager().getPlayer(uuid) == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name));
+ return true;
+ }
+ QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile();
+ questProgressFile.clear();
+ questProgressFile.saveToDisk();
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_FULLRESET.getMessage().replace("{player}", name));
+ return true;
+ }
+ if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) {
+ Quests.getPlayerManager().removePlayer(uuid);
+ }
showAdminHelp(sender, "moddata");
return true;
}
} else if (args.length == 5) {
- if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) {
- if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
- sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage());
+ if (args[1].equalsIgnoreCase("opengui")) {
+ if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) {
+ if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
+ sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage());
+ return true;
+ }
+ Category category = Quests.getQuestManager().getCategoryById(args[4]);
+ if (category == null) {
+ sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[4]));
+ return true;
+ }
+ Player player = Bukkit.getPlayer(args[3]);
+ if (player != null) {
+ QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer != null) {
+ qPlayer.openCategory(category);
+ sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName())
+ .replace("{category}", category.getId()));
+ return true;
+ }
+ }
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
- Category category = Quests.getQuestManager().getCategoryById(args[4]);
- if (category == null) {
- sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[4]));
+ } else if (args[1].equalsIgnoreCase("moddata")) {
+ Player player;
+ OfflinePlayer ofp;
+ UUID uuid;
+ String name;
+ if ((player = Bukkit.getPlayer(args[3])) != null) {
+ uuid = player.getUniqueId();
+ name = player.getName();
+ } else if ((ofp = Bukkit.getOfflinePlayer(args[3])) != null) {
+ uuid = ofp.getUniqueId();
+ name = ofp.getName();
+ } else {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
- Player player = Bukkit.getPlayer(args[3]);
- if (player != null) {
- QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
- if (qPlayer != null) {
- qPlayer.openCategory(category);
- sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName())
- .replace("{category}", category.getId()));
+ if (Quests.getPlayerManager().getPlayer(uuid) == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name));
+ Quests.getPlayerManager().loadPlayer(uuid, true);
+ }
+ if (Quests.getPlayerManager().getPlayer(uuid) == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name));
+ return true;
+ }
+ QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile();
+ Quest quest = Quests.getQuestManager().getQuestById(args[4]);
+ if (quest == null) {
+ sender.sendMessage(Messages.COMMAND_QUEST_START_DOESNTEXIST.getMessage().replace("{quest}", args[4]));
+ return true;
+ }
+ if (args[2].equalsIgnoreCase("reset")) {
+ questProgressFile.generateBlankQuestProgress(quest.getId());
+ questProgressFile.saveToDisk();
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ return true;
+ } else if (args[2].equalsIgnoreCase("start")) {
+ int response = questProgressFile.startQuest(quest);
+ if (response == 1) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLIMIT.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ return true;
+ } else if (response == 2) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOMPLETE.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ return true;
+ } else if (response == 3) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ return true;
+ } else if (response == 4) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLOCKED.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
return true;
}
+ questProgressFile.saveToDisk();
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ return true;
+ } else if (args[2].equalsIgnoreCase("complete")) {
+ questProgressFile.completeQuest(quest);
+ questProgressFile.saveToDisk();
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
+ return true;
}
- sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
+ if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) {
+ Quests.getPlayerManager().removePlayer(uuid);
+ }
+ showAdminHelp(sender, "moddata");
return true;
}
- }
- showAdminHelp(sender, null);
- return true;
+ showAdminHelp(sender, null);
+ return true;
+ }
}
if (sender instanceof Player && (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quests"))) {
Player player = (Player) sender;
diff --git a/src/me/fatpigsarefat/quests/events/EventInventory.java b/src/me/fatpigsarefat/quests/events/EventInventory.java
index f39d2251..08d6ae63 100644
--- a/src/me/fatpigsarefat/quests/events/EventInventory.java
+++ b/src/me/fatpigsarefat/quests/events/EventInventory.java
@@ -51,7 +51,7 @@ public class EventInventory implements Listener {
.getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) {
String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot());
Quest quest = Quests.getQuestManager().getQuestById(questid);
- if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest)) {
+ if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest) == 0) {
event.getWhoClicked().closeInventory();
}
}
diff --git a/src/me/fatpigsarefat/quests/obj/Messages.java b/src/me/fatpigsarefat/quests/obj/Messages.java
index 9d3882bd..1b81bf0e 100644
--- a/src/me/fatpigsarefat/quests/obj/Messages.java
+++ b/src/me/fatpigsarefat/quests/obj/Messages.java
@@ -25,7 +25,17 @@ public enum Messages {
TITLE_QUEST_START_SUBTITLE("titles.quest-start.subtitle"),
TITLE_QUEST_COMPLETE_TITLE("titles.quest-complete.title"),
TITLE_QUEST_COMPLETE_SUBTITLE("titles.quest-complete.subtitle"),
- BETA_REMINDER("messages.beta-reminder");
+ BETA_REMINDER("messages.beta-reminder"),
+ COMMAND_QUEST_ADMIN_LOADDATA("messages.command-quest-admin-loaddata"),
+ COMMAND_QUEST_ADMIN_NODATA("messages.command-quest-admin-nodata"),
+ COMMAND_QUEST_ADMIN_FULLRESET("messages.command-quest-admin-fullreset"),
+ COMMAND_QUEST_ADMIN_START_FAILLOCKED("messages.command-quest-admin-start-faillocked"),
+ COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN("messages.command-quest-admin-start-failcooldown"),
+ COMMAND_QUEST_ADMIN_START_FAILCOMPLETE("messages.command-quest-admin-start-failcomplete"),
+ COMMAND_QUEST_ADMIN_START_FAILLIMIT("messages.command-quest-admin-start-faillimit"),
+ COMMAND_QUEST_ADMIN_START_SUCCESS("messages.command-quest-admin-start-success"),
+ COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"),
+ COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success");
private String path;
diff --git a/src/me/fatpigsarefat/quests/player/QPlayer.java b/src/me/fatpigsarefat/quests/player/QPlayer.java
index 27e9283d..e797d7bb 100644
--- a/src/me/fatpigsarefat/quests/player/QPlayer.java
+++ b/src/me/fatpigsarefat/quests/player/QPlayer.java
@@ -21,10 +21,16 @@ public class QPlayer {
private UUID uuid;
private QuestProgressFile questProgressFile;
+ private boolean onlyDataLoaded;
public QPlayer(UUID uuid, QuestProgressFile questProgressFile) {
+ this(uuid, questProgressFile, false);
+ }
+
+ public QPlayer(UUID uuid, QuestProgressFile questProgressFile, boolean onlyDataLoaded) {
this.uuid = uuid;
this.questProgressFile = questProgressFile;
+ this.onlyDataLoaded = onlyDataLoaded;
}
public UUID getUuid() {
@@ -32,6 +38,10 @@ public class QPlayer {
}
public void openCategory(Category category) {
+ if (onlyDataLoaded) {
+ return;
+ }
+
Player player = Bukkit.getPlayer(uuid);
if (player == null) {
return;
@@ -53,6 +63,10 @@ public class QPlayer {
}
public void openQuests() {
+ if (onlyDataLoaded) {
+ return;
+ }
+
Player player = Bukkit.getPlayer(uuid);
if (player == null) {
return;
@@ -91,6 +105,14 @@ public class QPlayer {
}
}
+ public boolean isOnlyDataLoaded() {
+ return onlyDataLoaded;
+ }
+
+ public void setOnlyDataLoaded(boolean onlyDataLoaded) {
+ this.onlyDataLoaded = onlyDataLoaded;
+ }
+
public QuestProgressFile getQuestProgressFile() {
return questProgressFile;
}
diff --git a/src/me/fatpigsarefat/quests/player/QPlayerManager.java b/src/me/fatpigsarefat/quests/player/QPlayerManager.java
index 6ee9055e..e463d338 100644
--- a/src/me/fatpigsarefat/quests/player/QPlayerManager.java
+++ b/src/me/fatpigsarefat/quests/player/QPlayerManager.java
@@ -30,7 +30,11 @@ public class QPlayerManager {
}
public void loadPlayer(UUID uuid) {
- if (getPlayer(uuid) == null) {
+ loadPlayer(uuid, false);
+ }
+
+ public void loadPlayer(UUID uuid, boolean onlyData) {
+ if (getPlayer(uuid) == null || getPlayer(uuid).isOnlyDataLoaded()) {
QuestProgressFile questProgressFile = new QuestProgressFile(uuid);
File directory = new File(Quests.getInstance().getDataFolder() + File.separator + "playerdata");
@@ -61,7 +65,7 @@ public class QPlayerManager {
}
}
- QPlayer qPlayer = new QPlayer(uuid, questProgressFile);
+ QPlayer qPlayer = new QPlayer(uuid, questProgressFile, onlyData);
addPlayer(qPlayer);
}
diff --git a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java
index c6ec335d..8824f920 100644
--- a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java
+++ b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java
@@ -86,4 +86,8 @@ public class QuestProgress {
public boolean isWorthSaving() {
return modified;
}
+
+ public void setWorthSaving(boolean modified) {
+ this.modified = modified;
+ }
}
diff --git a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java
index d809201c..4b1b13c1 100644
--- a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java
+++ b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java
@@ -50,13 +50,19 @@ public class QuestProgressFile {
return true;
}
- public boolean startQuest(Quest quest) {
+ /**
+ * Start a quest for the player.
+ *
+ * @param quest the quest to check
+ * @return 0 if successful, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked
+ */
+ public int startQuest(Quest quest) {
if (getStartedQuests().size() >= Options.QUESTS_START_LIMIT.getIntValue()) {
if (Bukkit.getPlayer(player) != null) {
Player player = Bukkit.getPlayer(getPlayer());
player.sendMessage(Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue())));
}
- return false;
+ return 1;
}
QuestProgress questProgress = getQuestProgress(quest);
if (!quest.isRepeatable() && questProgress.isCompletedBefore()) {
@@ -64,7 +70,7 @@ public class QuestProgressFile {
Player player = Bukkit.getPlayer(getPlayer());
player.sendMessage(Messages.QUEST_START_DISABLED.getMessage());
}
- return false;
+ return 2;
}
long cooldown = getCooldownFor(quest);
if (cooldown > 0) {
@@ -72,14 +78,14 @@ public class QuestProgressFile {
Player player = Bukkit.getPlayer(getPlayer());
player.sendMessage(Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(Quests.convertToFormat(TimeUnit.MINUTES.convert(cooldown, TimeUnit.MILLISECONDS)))));
}
- return false;
+ return 3;
}
if (!hasMetRequirements(quest)) {
if (Bukkit.getPlayer(player) != null) {
Player player = Bukkit.getPlayer(getPlayer());
player.sendMessage(Messages.QUEST_START_LOCKED.getMessage());
}
- return false;
+ return 4;
}
questProgress.setStarted(true);
for (TaskProgress taskProgress : questProgress.getTaskProgress()) {
@@ -96,7 +102,7 @@ public class QuestProgressFile {
.getDisplayNameStripped()));
}
}
- return true;
+ return 0;
}
public void addQuestProgress(QuestProgress questProgress) {
@@ -220,5 +226,9 @@ public class QuestProgressFile {
}
}
+ public void clear() {
+ questProgress.clear();
+ }
+
}
diff --git a/src/plugin.yml b/src/plugin.yml
index c6c424ba..5f73e106 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -1,5 +1,5 @@
name: Quests
-version: 2.0.5-beta
+version: 2.0.6-beta
main: me.fatpigsarefat.quests.Quests
author: fatpigsarefat
softdepend: [ASkyBlock, uSkyBlock]