Fixed quest GUI showing dupes

This commit is contained in:
Jules 2024-09-07 18:21:26 +02:00
parent 88760db078
commit 0e365c58c8

View File

@ -95,25 +95,25 @@ public class QuestViewer extends EditableInventory {
} }
@Override @Override
public ItemStack display(GeneratedInventory inv, int n) { public ItemStack display(GeneratedInventory inv, int itemIndex) {
final QuestInventory list = (QuestInventory) inv;
final int index = list.page * list.perPage + itemIndex;
QuestInventory list = (QuestInventory) inv;
int index = list.page * list.perPage + n;
if (index >= list.quests.size()) if (index >= list.quests.size())
return noQuest.display(inv, n); return noQuest.display(inv, itemIndex);
Quest quest = list.quests.get(index); Quest quest = list.quests.get(index);
if (quest.hasParent() && !inv.getPlayerData().getQuestData().checkParentAvailability(quest)) if (quest.hasParent() && !inv.getPlayerData().getQuestData().checkParentAvailability(quest))
return locked.display(inv, n); return locked.display(inv, itemIndex);
List<String> lore = new ArrayList<>(getLore()); List<String> lore = new ArrayList<>(getLore());
// Replace quest lore // Replace quest lore
index = lore.indexOf("{lore}"); int loreIndex = lore.indexOf("{lore}");
if (index >= 0) { if (loreIndex >= 0) {
lore.remove(index); lore.remove(loreIndex);
for (int j = 0; j < quest.getLore().size(); j++) for (int j = 0; j < quest.getLore().size(); j++)
lore.add(index + j, quest.getLore().get(j)); lore.add(loreIndex + j, quest.getLore().get(j));
} }
// Calculate lore for later // Calculate lore for later
@ -130,38 +130,39 @@ public class QuestViewer extends EditableInventory {
|| (next.startsWith("{completed_delay}") && !(completed && !cooldown))); || (next.startsWith("{completed_delay}") && !(completed && !cooldown)));
// Replace level requirements // Replace level requirements
index = lore.indexOf("{level_req}{level_requirements}"); loreIndex = lore.indexOf("{level_req}{level_requirements}");
if (index >= 0) { if (loreIndex >= 0) {
lore.remove(index); lore.remove(loreIndex);
int mainRequired = quest.getLevelRestriction(null); int mainRequired = quest.getLevelRestriction(null);
if (mainRequired > 0) if (mainRequired > 0)
lore.add(index, (inv.getPlayerData().getLevel() >= mainRequired ? mainHit : mainNotHit).replace("{level}", "" + mainRequired)); lore.add(loreIndex, (inv.getPlayerData().getLevel() >= mainRequired ? mainHit : mainNotHit).replace("{level}", "" + mainRequired));
for (Profession profession : quest.getLevelRestrictions()) { for (Profession profession : quest.getLevelRestrictions()) {
int required = quest.getLevelRestriction(profession); int required = quest.getLevelRestriction(profession);
lore.add(index + (mainRequired > 0 ? 1 : 0), lore.add(loreIndex + (mainRequired > 0 ? 1 : 0),
(inv.getPlayerData().getCollectionSkills().getLevel(profession) >= required ? professionHit : professionNotHit) (inv.getPlayerData().getCollectionSkills().getLevel(profession) >= required ? professionHit : professionNotHit)
.replace("{level}", "" + required).replace("{profession}", profession.getName())); .replace("{level}", "" + required).replace("{profession}", profession.getName()));
} }
} }
Placeholders holders = getPlaceholders(inv, n); Placeholders holders = getPlaceholders(inv, itemIndex);
for (int j = 0; j < lore.size(); j++) for (int j = 0; j < lore.size(); j++)
lore.set(j, ChatColor.GRAY + holders.apply(inv.getPlayer(), lore.get(j))); lore.set(j, ChatColor.GRAY + holders.apply(inv.getPlayer(), lore.get(j)));
// Generate item // Generate item
ItemStack item = super.display(inv, n); ItemStack item = super.display(inv, itemIndex);
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
meta.setLore(lore); meta.setLore(lore);
meta.getPersistentDataContainer().set(new NamespacedKey(MMOCore.plugin, "quest_id"), PersistentDataType.STRING,quest.getId()); meta.getPersistentDataContainer().set(new NamespacedKey(MMOCore.plugin, "quest_id"), PersistentDataType.STRING, quest.getId());
item.setItemMeta(meta); item.setItemMeta(meta);
return item; return item;
} }
@Override @Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) { public Placeholders getPlaceholders(GeneratedInventory inv, int itemIndex) {
Quest quest = ((QuestInventory) inv).quests.get(n); final QuestInventory list = (QuestInventory) inv;
final Quest quest = ((QuestInventory) inv).quests.get(list.page * list.perPage + itemIndex);
PlayerData data = inv.getPlayerData(); PlayerData data = inv.getPlayerData();
Placeholders holders = new Placeholders(); Placeholders holders = new Placeholders();
@ -218,8 +219,8 @@ public class QuestViewer extends EditableInventory {
if (item.getFunction().equals("quest")) { if (item.getFunction().equals("quest")) {
String questId = context.getClickedItem().getItemMeta().getPersistentDataContainer() String questId = context.getClickedItem().getItemMeta().getPersistentDataContainer()
.get(new NamespacedKey(MMOCore.plugin,"quest_id"), PersistentDataType.STRING); .get(new NamespacedKey(MMOCore.plugin, "quest_id"), PersistentDataType.STRING);
if (questId==null||questId.equals("")) if (questId == null || questId.equals(""))
return; return;
Quest quest = MMOCore.plugin.questManager.get(questId); Quest quest = MMOCore.plugin.questManager.get(questId);