Use quest IDs instead of names for YAML implementation of quester data

This commit is contained in:
PikaMug 2020-12-31 04:31:09 -05:00
parent e2da327cdf
commit 325522d9db
2 changed files with 39 additions and 39 deletions

View File

@ -3167,13 +3167,13 @@ public class Quester implements Comparable<Quester> {
public FileConfiguration getBaseData() { public FileConfiguration getBaseData() {
final FileConfiguration data = new YamlConfiguration(); final FileConfiguration data = new YamlConfiguration();
if (currentQuests.isEmpty() == false) { if (currentQuests.isEmpty() == false) {
final ArrayList<String> questNames = new ArrayList<String>(); final ArrayList<String> questIds = new ArrayList<String>();
final ArrayList<Integer> questStages = new ArrayList<Integer>(); final ArrayList<Integer> questStages = new ArrayList<Integer>();
for (final Quest quest : currentQuests.keySet()) { for (final Quest quest : currentQuests.keySet()) {
questNames.add(quest.getName()); questIds.add(quest.getId());
questStages.add(currentQuests.get(quest)); questStages.add(currentQuests.get(quest));
} }
data.set("currentQuests", questNames); data.set("currentQuests", questIds);
data.set("currentStages", questStages); data.set("currentStages", questStages);
data.set("quest-points", questPoints); data.set("quest-points", questPoints);
final ConfigurationSection dataSec = data.createSection("questData"); final ConfigurationSection dataSec = data.createSection("questData");
@ -3437,41 +3437,27 @@ public class Quester implements Comparable<Quester> {
if (completedQuests.isEmpty()) { if (completedQuests.isEmpty()) {
data.set("completed-Quests", "none"); data.set("completed-Quests", "none");
} else { } else {
final List<String> noDupe = new ArrayList<String>(); final List<String> questIds = completedQuests.stream().map(Quest::getId).collect(Collectors.toList());
for (final Quest q : completedQuests) { data.set("completed-Quests", questIds);
// TODO use quest IDs instead
if (!noDupe.contains(q.getName())) {
noDupe.add(q.getName());
}
}
final String[] completed = new String[noDupe.size()];
int index = 0;
for (final String s : noDupe) {
completed[index] = s;
index++;
}
data.set("completed-Quests", completed);
} }
if (completedTimes.isEmpty() == false) { if (completedTimes.isEmpty() == false) {
final List<String> questNames = new LinkedList<String>(); final List<String> questIds = new LinkedList<String>();
final List<Long> questTimes = new LinkedList<Long>(); final List<Long> questTimes = new LinkedList<Long>();
for (final Entry<Quest, Long> entry : completedTimes.entrySet()) { for (final Entry<Quest, Long> entry : completedTimes.entrySet()) {
// TODO use quest IDs instead questIds.add(entry.getKey().getId());
questNames.add(entry.getKey().getName());
questTimes.add(entry.getValue()); questTimes.add(entry.getValue());
} }
data.set("completedRedoableQuests", questNames); data.set("completedRedoableQuests", questIds);
data.set("completedQuestTimes", questTimes); data.set("completedQuestTimes", questTimes);
} }
if (amountsCompleted.isEmpty() == false) { if (amountsCompleted.isEmpty() == false) {
final List<String> questNames = new LinkedList<String>(); final List<String> questIds = new LinkedList<String>();
final List<Integer> questAmts = new LinkedList<Integer>(); final List<Integer> questAmts = new LinkedList<Integer>();
for (final Entry<Quest, Integer> entry : amountsCompleted.entrySet()) { for (final Entry<Quest, Integer> entry : amountsCompleted.entrySet()) {
// TODO use quest IDs instead questIds.add(entry.getKey().getId());
questNames.add(entry.getKey().getName());
questAmts.add(entry.getValue()); questAmts.add(entry.getValue());
} }
data.set("amountsCompletedQuests", questNames); data.set("amountsCompletedQuests", questIds);
data.set("amountsCompleted", questAmts); data.set("amountsCompleted", questAmts);
} }
// #getPlayer is faster // #getPlayer is faster

View File

@ -95,23 +95,29 @@ public class SeparatedYamlStorage implements StorageImplementation {
return null; return null;
} }
if (data.contains("completedRedoableQuests")) { if (data.contains("completedRedoableQuests")) {
final List<String> questNames = data.getStringList("completedRedoableQuests"); final List<String> questIds = data.getStringList("completedRedoableQuests");
final List<Long> questTimes = data.getLongList("completedQuestTimes"); final List<Long> questTimes = data.getLongList("completedQuestTimes");
final ConcurrentHashMap<Quest, Long> completedTimes = quester.getCompletedTimes(); final ConcurrentHashMap<Quest, Long> completedTimes = quester.getCompletedTimes();
for (int i = 0; i < questNames.size(); i++) { for (int i = 0; i < questIds.size(); i++) {
if (plugin.getQuest(questNames.get(i)) != null) { if (plugin.getQuestById(questIds.get(i)) != null) {
completedTimes.put(plugin.getQuest(questNames.get(i)), questTimes.get(i)); completedTimes.put(plugin.getQuestById(questIds.get(i)), questTimes.get(i));
} else if (plugin.getQuest(questIds.get(i)) != null) {
// Legacy
completedTimes.put(plugin.getQuest(questIds.get(i)), questTimes.get(i));
} }
} }
quester.setCompletedTimes(completedTimes); quester.setCompletedTimes(completedTimes);
} }
if (data.contains("amountsCompletedQuests")) { if (data.contains("amountsCompletedQuests")) {
final List<String> questNames = data.getStringList("amountsCompletedQuests"); final List<String> questIds = data.getStringList("amountsCompletedQuests");
final List<Integer> questAmts = data.getIntegerList("amountsCompleted"); final List<Integer> questAmts = data.getIntegerList("amountsCompleted");
final ConcurrentHashMap<Quest, Integer> amountsCompleted = quester.getAmountsCompleted(); final ConcurrentHashMap<Quest, Integer> amountsCompleted = quester.getAmountsCompleted();
for (int i = 0; i < questNames.size(); i++) { for (int i = 0; i < questIds.size(); i++) {
if (plugin.getQuest(questNames.get(i)) != null) { if (plugin.getQuestById(questIds.get(i)) != null) {
amountsCompleted.put(plugin.getQuest(questNames.get(i)), questAmts.get(i)); amountsCompleted.put(plugin.getQuestById(questIds.get(i)), questAmts.get(i));
} else if (plugin.getQuest(questIds.get(i)) != null) {
// Legacy
amountsCompleted.put(plugin.getQuest(questIds.get(i)), questAmts.get(i));
} }
} }
quester.setAmountsCompleted(amountsCompleted); quester.setAmountsCompleted(amountsCompleted);
@ -122,7 +128,13 @@ public class SeparatedYamlStorage implements StorageImplementation {
if (data.isList("completed-Quests")) { if (data.isList("completed-Quests")) {
for (final String s : data.getStringList("completed-Quests")) { for (final String s : data.getStringList("completed-Quests")) {
for (final Quest q : plugin.getQuests()) { for (final Quest q : plugin.getQuests()) {
if (q.getName().equalsIgnoreCase(s)) { if (q.getId().equals(s)) {
if (!quester.getCompletedQuests().contains(q)) {
completedQuests.add(q);
}
break;
} else if (q.getName().equalsIgnoreCase(s)) {
// Legacy
if (!quester.getCompletedQuests().contains(q)) { if (!quester.getCompletedQuests().contains(q)) {
completedQuests.add(q); completedQuests.add(q);
} }
@ -133,14 +145,16 @@ public class SeparatedYamlStorage implements StorageImplementation {
} }
quester.setCompletedQuests(completedQuests); quester.setCompletedQuests(completedQuests);
if (data.isString("currentQuests") == false) { if (data.isString("currentQuests") == false) {
final List<String> questNames = data.getStringList("currentQuests"); final List<String> questIds = data.getStringList("currentQuests");
final List<Integer> questStages = data.getIntegerList("currentStages"); final List<Integer> questStages = data.getIntegerList("currentStages");
// These appear to differ sometimes? That seems bad. final int maxSize = Math.min(questIds.size(), questStages.size());
final int maxSize = Math.min(questNames.size(), questStages.size());
final ConcurrentHashMap<Quest, Integer> currentQuests = quester.getCurrentQuests(); final ConcurrentHashMap<Quest, Integer> currentQuests = quester.getCurrentQuests();
for (int i = 0; i < maxSize; i++) { for (int i = 0; i < maxSize; i++) {
if (plugin.getQuest(questNames.get(i)) != null) { if (plugin.getQuestById(questIds.get(i)) != null) {
currentQuests.put(plugin.getQuest(questNames.get(i)), questStages.get(i)); currentQuests.put(plugin.getQuestById(questIds.get(i)), questStages.get(i));
} else if (plugin.getQuest(questIds.get(i)) != null) {
// Legacy
currentQuests.put(plugin.getQuest(questIds.get(i)), questStages.get(i));
} }
} }
quester.setCurrentQuests(currentQuests); quester.setCurrentQuests(currentQuests);