diff --git a/build.gradle b/build.gradle index 4f6d876..580f84e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ allprojects { group = 'com.focamacho' - version = '1.0.9' + version = '1.0.10' } subprojects { diff --git a/sealmenus-bukkit/src/main/java/com/focamacho/sealmenus/bukkit/PageableChestMenu.java b/sealmenus-bukkit/src/main/java/com/focamacho/sealmenus/bukkit/PageableChestMenu.java index f405f8d..e142b45 100644 --- a/sealmenus-bukkit/src/main/java/com/focamacho/sealmenus/bukkit/PageableChestMenu.java +++ b/sealmenus-bukkit/src/main/java/com/focamacho/sealmenus/bukkit/PageableChestMenu.java @@ -109,6 +109,7 @@ public List getPageableItems() { public PageableChestMenu setPageableItems(List items) { this.pageableItems.clear(); pageableItems.addAll(items); + this.page = 0; requireUpdate(null); return this; } @@ -144,12 +145,34 @@ public Map.Entry getPageableItemSlot(MenuItem item) { * Get the quantity of pages of this menu. * The quantity is defined by the amount * of items inserted. + * * @return the quantity of pages of this menu. */ public int getPageCount() { return (int) Math.max(1, Math.ceil(this.pageableItems.size() / (double) itemSlots.length)); } + /** + * Get the current page the player + * is in. + * + * @param player the player to check the + * page. + * @return the current page index. + */ + public int getCurrentPage(Player player) { + if(this.fatherMenu != null && this.fatherMenu.inventory != null && this.fatherMenu.inventory.getViewers().contains(player)) { + return this.fatherMenu.page; + } else if(this.inventory != null && this.inventory.getViewers().contains(player)) { + return this.page; + } else { + Optional menu = mirrorMenus.stream().filter(m -> m.inventory != null && m.inventory.getViewers().contains(player)).findFirst(); + if(menu.isPresent()) return menu.get().page; + } + + return 0; + } + /** * Set the item used to go to the next page. * This item is only shown if there is enough items @@ -281,11 +304,15 @@ public MenuItem getItem(Integer slot) { @Override public void open(Player player) { + open(player, 0); + } + + public void open(Player player, int page) { if(this.inventory == null || !super.hasViewers()) { - this.page = 0; + this.page = Math.min(getPageCount() - 1, page); requireUpdate(null); super.open(player); - } else new PageableChestMenu(this).open(player); + } else new PageableChestMenu(this).open(player, page); } @Override diff --git a/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/ChestMenu.java b/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/ChestMenu.java index 43dfd3d..6a657a1 100644 --- a/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/ChestMenu.java +++ b/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/ChestMenu.java @@ -290,7 +290,6 @@ public void update(int slot) { for (Inventory inventorySlot : this.inventory.slots()) { Integer slotIndex = inventorySlot.getInventoryProperty(SlotIndex.class).get().getValue(); if(Objects.equals(slot, slotIndex)) { - System.out.println("atualizando slot"); if(containsItem(slot)) { ItemStack stack = getItem(slot).getItem(); if (inventorySlot.peek().orElse(ItemStack.empty()) != stack) diff --git a/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/PageableChestMenu.java b/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/PageableChestMenu.java index 2d99e63..fcaf939 100644 --- a/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/PageableChestMenu.java +++ b/sealmenus-sponge/src/main/java/com/focamacho/sealmenus/sponge/PageableChestMenu.java @@ -107,6 +107,7 @@ public List getPageableItems() { public PageableChestMenu setPageableItems(List items) { this.pageableItems.clear(); pageableItems.addAll(items); + this.page = 0; requireUpdate(null); return this; } @@ -142,12 +143,34 @@ public Map.Entry getPageableItemSlot(MenuItem item) { * Get the quantity of pages of this menu. * The quantity is defined by the amount * of items inserted. + * * @return the quantity of pages of this menu. */ public int getPageCount() { return (int) Math.max(1, Math.ceil(this.pageableItems.size() / (double) itemSlots.length)); } + /** + * Get the current page the player + * is in. + * + * @param player the player to check the + * page. + * @return the current page index. + */ + public int getCurrentPage(Player player) { + if(this.fatherMenu != null && this.fatherMenu.playersViewing.contains(player)) { + return this.fatherMenu.page; + } else if(playersViewing.contains(player)) { + return this.page; + } else { + Optional menu = mirrorMenus.stream().filter(m -> m.playersViewing.contains(player)).findFirst(); + if(menu.isPresent()) return menu.get().page; + } + + return 0; + } + /** * Set the item used to go to the next page. * This item is only shown if there is enough items @@ -279,11 +302,15 @@ public MenuItem getItem(Integer slot) { @Override public void open(Player player) { + open(player, 0); + } + + public void open(Player player, int page) { if(this.inventory == null || !super.hasViewers()) { - this.page = 0; + this.page = Math.min(getPageCount() - 1, page); requireUpdate(null); super.open(player); - } else new PageableChestMenu(this).open(player); + } else new PageableChestMenu(this).open(player, page); } @Override