Description
Is there an existing issue for this?
- I have searched the existing issues
π Describe the bug
Basically when I click on the item for the next page, the new items (in this case there are 14) do not update according to the page they are on. Simply, they are always the first 14 items on the 1st page on any page I am on.
package com.twins.core.global.inventory.quest;
import com.minecraftsolutions.utils.ItemBuilder;
import com.twins.core.KeyConstants;
import com.twins.core.global.inventory.QuestInventory;
import com.twins.core.global.model.user.GlobalUser;
import com.twins.core.global.model.user.quest.QuestType;
import com.twins.core.utils.Configuration;
import me.devnatan.inventoryframework.View;
import me.devnatan.inventoryframework.ViewConfigBuilder;
import me.devnatan.inventoryframework.component.Pagination;
import me.devnatan.inventoryframework.context.CloseContext;
import me.devnatan.inventoryframework.context.Context;
import me.devnatan.inventoryframework.context.RenderContext;
import me.devnatan.inventoryframework.state.State;
import me.devnatan.inventoryframework.state.StateValue;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CraftQuestInventory extends View {
private final Configuration inventory;
private final State<Pagination> state;
private final State<ItemStack> item;
public CraftQuestInventory(Configuration inventory) {
this.inventory = inventory;
state = computedPaginationState(context -> {
GlobalUser globalUser = (GlobalUser) context.getInitialData();
List<QuestType> quests = new ArrayList<>();
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_CUPBOARD)) {
quests.add(QuestType.CRAFT_CUPBOARD);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_BED)) {
quests.add(QuestType.CRAFT_BED);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_FURNACE)) {
quests.add(QuestType.CRAFT_FURNACE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_CHEST)) {
quests.add(QuestType.CRAFT_CHEST);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_TORCH)) {
quests.add(QuestType.CRAFT_TORCH);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_T1)) {
quests.add(QuestType.CRAFT_T1);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_T2)) {
quests.add(QuestType.CRAFT_T2);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_T3)) {
quests.add(QuestType.CRAFT_T3);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_T4)) {
quests.add(QuestType.CRAFT_T4);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_T5)) {
quests.add(QuestType.CRAFT_T5);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_WOOD_TRAPDOOR)) {
quests.add(QuestType.CRAFT_WOOD_TRAPDOOR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_IRON_TRAPDOOR)) {
quests.add(QuestType.CRAFT_IRON_TRAPDOOR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_LADDER)) {
quests.add(QuestType.CRAFT_LADDER);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_WOODEN_DOOR)) {
quests.add(QuestType.CRAFT_WOODEN_DOOR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_IRON_DOOR)) {
quests.add(QuestType.CRAFT_IRON_DOOR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SPRUCE_DOOR)) {
quests.add(QuestType.CRAFT_SPRUCE_DOOR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_TITANIUM_DOOR)) {
quests.add(QuestType.CRAFT_TITANIUM_DOOR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_WOODBASE)) {
quests.add(QuestType.CRAFT_WOODBASE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_STONEBASE)) {
quests.add(QuestType.CRAFT_STONEBASE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_IRONBASE)) {
quests.add(QuestType.CRAFT_IRONBASE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_WIREFRAME)) {
quests.add(QuestType.CRAFT_WIREFRAME);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_EXPLOSIVE)) {
quests.add(QuestType.CRAFT_EXPLOSIVE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_FUSE)) {
quests.add(QuestType.CRAFT_FUSE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_HOMEMADE)) {
quests.add(QuestType.CRAFT_HOMEMADE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_C4)) {
quests.add(QuestType.CRAFT_C4);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_FUEL)) {
quests.add(QuestType.CRAFT_FUEL);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_WOOD)) {
quests.add(QuestType.CRAFT_WOOD);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_REINFORCED_WOOD)) {
quests.add(QuestType.CRAFT_REINFORCED_WOOD);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_FOREST)) {
quests.add(QuestType.CRAFT_FOREST);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SOLDIER)) {
quests.add(QuestType.CRAFT_SOLDIER);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_KEVLAR)) {
quests.add(QuestType.CRAFT_KEVLAR);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_IRON_TOOLS)) {
quests.add(QuestType.CRAFT_IRON_TOOLS);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_DIAMOND_SWORD)) {
quests.add(QuestType.CRAFT_DIAMOND_SWORD);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_REPAIR_KIT)) {
quests.add(QuestType.CRAFT_REPAIR_KIT);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_PISTOL)) {
quests.add(QuestType.CRAFT_PISTOL);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SUBMACHINE)) {
quests.add(QuestType.CRAFT_SUBMACHINE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_RIFLE)) {
quests.add(QuestType.CRAFT_RIFLE);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SHOTGUN)) {
quests.add(QuestType.CRAFT_SHOTGUN);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_CROSSBOW)) {
quests.add(QuestType.CRAFT_CROSSBOW);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SNIPER)) {
quests.add(QuestType.CRAFT_SNIPER);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_PISTOL_AMMO)) {
quests.add(QuestType.CRAFT_PISTOL_AMMO);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SUBMACHINE_AMMO)) {
quests.add(QuestType.CRAFT_SUBMACHINE_AMMO);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_RIFLE_AMMO)) {
quests.add(QuestType.CRAFT_RIFLE_AMMO);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SHOTGUN_AMMO)) {
quests.add(QuestType.CRAFT_SHOTGUN_AMMO);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_CROSSBOW_AMMO)) {
quests.add(QuestType.CRAFT_CROSSBOW_AMMO);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SNIPER_AMMO)) {
quests.add(QuestType.CRAFT_SNIPER_AMMO);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_SMALL_MEDKIT)) {
quests.add(QuestType.CRAFT_SMALL_MEDKIT);
}
if (!globalUser.isHideConcludedQuests() || !globalUser.hasQuestDone(QuestType.CRAFT_LARGE_MEDKIT)) {
quests.add(QuestType.CRAFT_LARGE_MEDKIT);
}
return quests;
}, (context, builder, i, questType) -> {
GlobalUser globalUser = (GlobalUser) context.getInitialData();
boolean questDone = globalUser.hasQuestDone(questType);
List<String> lore = inventory.getStringList(globalUser.getLanguageType(), "craftQuest." + i + ".lore");
lore.replaceAll(string -> string.replace("%status%", questDone ? KeyConstants.MISSION_COMPLETED : KeyConstants.MISSION_INCOMPLETED).replace("%remainingTimes%", String.valueOf(globalUser.getQuestRemainingTimes(questType))));
ItemStack quest = new ItemBuilder(Material.PAPER, 1)
.setDisplayName(inventory.getString(globalUser.getLanguageType(), "craftQuest." + i + ".name"))
.setLore(lore)
.glow(questDone)
.build();
builder.withItem(quest);
});
item = computedState(context -> {
GlobalUser globalUser = (GlobalUser) context.getInitialData();
return new ItemBuilder(Material.COMPASS)
.setDisplayName(inventory.getString(globalUser.getLanguageType(), "questState.name"))
.setLore(!globalUser.isHideConcludedQuests() ? inventory.getStringList(globalUser.getLanguageType(), "questState.loreHide") : inventory.getStringList(globalUser.getLanguageType(), "questState.loreShow"))
.build();
});
computedState(context -> {
GlobalUser globalUser = (GlobalUser) context.getInitialData();
if (globalUser.isHideConcludedQuests()
&& globalUser.hasQuestDone(QuestType.PUT_BED)
&& globalUser.hasQuestDone(QuestType.TELEPORT_BED)
&& globalUser.hasQuestDone(QuestType.SMELT_ORES_OR_FOOD)) {
return new ItemBuilder(Material.WEB)
.setDisplayName(inventory.getString(globalUser.getLanguageType(), "emptyState"))
.build();
}
return null;
});
}
@Override
public void onFirstRender(@NotNull RenderContext context) {
GlobalUser globalUser = (GlobalUser) context.getInitialData();
ItemStack back = new ItemBuilder(Material.ARROW)
.setDisplayName(inventory.getString(globalUser.getLanguageType(), "back"))
.build();
context.slot(45, back).onClick(click -> {
click.getPlayer().playSound(click.getPlayer().getLocation(), Sound.CLICK, 1, 1);
click.openForPlayer(QuestInventory.class, globalUser);
});
context.layoutSlot('I')
.watch(item)
.renderWith(() -> item.get(context))
.onClick(click -> {
click.getPlayer().playSound(click.getPlayer().getLocation(), Sound.CLICK, 1, 1);
globalUser.setHideConcludedQuests(!globalUser.isHideConcludedQuests());
click.update();
});
ItemStack previousPage = new ItemBuilder(Material.INK_SACK, 1, (short) 8)
.setDisplayName(inventory.getString(globalUser.getLanguageType(), "previousPage"))
.build();
ItemStack nextPage = new ItemBuilder(Material.INK_SACK, 1, (short) 10)
.setDisplayName(inventory.getString(globalUser.getLanguageType(), "nextPage"))
.build();
Pagination pagination = state.get(context);
context.layoutSlot('<', previousPage)
.updateOnStateChange(state)
.displayIf(() -> pagination.currentPageIndex() != 0)
.onClick(click -> {
pagination.back();
});
context.layoutSlot('>', nextPage)
.updateOnStateChange(state)
.displayIf(() -> pagination.currentPageIndex() < pagination.lastPageIndex())
.onClick(click -> {
pagination.advance();
});
}
@Override
public void onUpdate(@NotNull Context update) {
state.get(update).forceUpdate();
}
@Override
public void onInit(ViewConfigBuilder config) {
config
.title("Quests - Craft")
.size(6)
.layout(" ",
" OOOOOOO ",
" OOOOOOO ",
" E ",
" ",
" <I> ")
.cancelOnClick()
.cancelOnDrag()
.cancelOnDrop()
.cancelOnPickup()
.build();
}
}
βοΈ Expected behavior
No response
π£ Steps to Reproduce
No response
π» Platform
- Bukkit
- Sponge
- Other
β Server Version
1..8.8
π Library Version
latest
βοΈ Additional context
No response