// Path: core/src/main/java/net/novucs/ftop/gui/GuiContext.java
// public class GuiContext {
// 
//     private final FactionsTopPlugin plugin;
//     private final Player player;
//     private final Inventory inventory;
//     private final int maxPage;
//     private final int thisPage;
//     private final TreeIterator<FactionWorth> worthIterator;
//     private final Map<String, String> placeholders;
//     private final List<GuiElement> slots = new ArrayList<>();
//     private int currentRank;
//     private int slot;
// 
//     public GuiContext(FactionsTopPlugin plugin, Player player, Inventory inventory, int maxPage, int thisPage,
//                       TreeIterator<FactionWorth> worthIterator, Map<String, String> placeholders) {
//         this.plugin = plugin;
//         this.player = player;
//         this.inventory = inventory;
//         this.maxPage = maxPage;
//         this.thisPage = thisPage;
//         this.worthIterator = worthIterator;
//         this.placeholders = placeholders;
//     }
// 
//     public FactionsTopPlugin getPlugin() {
//         return plugin;
//     }
// 
//     public Player getPlayer() {
//         return player;
//     }
// 
//     public Inventory getInventory() {
//         return inventory;
//     }
// 
//     public int getMaxPage() {
//         return maxPage;
//     }
// 
//     public int getThisPage() {
//         return thisPage;
//     }
// 
//     public TreeIterator<FactionWorth> getWorthIterator() {
//         return worthIterator;
//     }
// 
//     public Map<String, String> getPlaceholders() {
//         return placeholders;
//     }
// 
//     public List<GuiElement> getSlots() {
//         return slots;
//     }
// 
//     public boolean hasNextPage() {
//         return thisPage < maxPage;
//     }
// 
//     public boolean hasPrevPage() {
//         return thisPage > 1;
//     }
// 
//     public int getCurrentRank() {
//         return currentRank;
//     }
// 
//     public void setCurrentRank(int currentRank) {
//         this.currentRank = currentRank;
//     }
// 
//     public int getAndIncrementRank() {
//         return currentRank++;
//     }
// 
//     public int getSlot() {
//         return slot;
//     }
// 
//     public void setSlot(int slot) {
//         this.slot = slot;
//     }
// 
//     public int getAndIncrementSlot() {
//         return slot++;
//     }
// }


import net.novucs.ftop.gui.GuiContext;
package net.novucs.ftop.gui.element.button;


public class GuiNextButton extends GuiBiStateButton {

    public GuiNextButton(GuiButtonContent enabled, GuiButtonContent disabled) {
        super(enabled, disabled);
    }

    @Override
    public void render(GuiContext context) {
        if (context.getInventory().getSize() <= context.getSlot()) {
            return;
        }

        GuiButtonContent content = context.hasNextPage() ? getEnabled() : getDisabled();
        context.getInventory().setItem(context.getAndIncrementSlot(), content.getItem());
        context.getSlots().add(this);
    }

    @Override
// Path: core/src/main/java/net/novucs/ftop/gui/GuiContext.java
// public class GuiContext {
// 
//     private final FactionsTopPlugin plugin;
//     private final Player player;
//     private final Inventory inventory;
//     private final int maxPage;
//     private final int thisPage;
//     private final TreeIterator<FactionWorth> worthIterator;
//     private final Map<String, String> placeholders;
//     private final List<GuiElement> slots = new ArrayList<>();
//     private int currentRank;
//     private int slot;
// 
//     public GuiContext(FactionsTopPlugin plugin, Player player, Inventory inventory, int maxPage, int thisPage,
//                       TreeIterator<FactionWorth> worthIterator, Map<String, String> placeholders) {
//         this.plugin = plugin;
//         this.player = player;
//         this.inventory = inventory;
//         this.maxPage = maxPage;
//         this.thisPage = thisPage;
//         this.worthIterator = worthIterator;
//         this.placeholders = placeholders;
//     }
// 
//     public FactionsTopPlugin getPlugin() {
//         return plugin;
//     }
// 
//     public Player getPlayer() {
//         return player;
//     }
// 
//     public Inventory getInventory() {
//         return inventory;
//     }
// 
//     public int getMaxPage() {
//         return maxPage;
//     }
// 
//     public int getThisPage() {
//         return thisPage;
//     }
// 
//     public TreeIterator<FactionWorth> getWorthIterator() {
//         return worthIterator;
//     }
// 
//     public Map<String, String> getPlaceholders() {
//         return placeholders;
//     }
// 
//     public List<GuiElement> getSlots() {
//         return slots;
//     }
// 
//     public boolean hasNextPage() {
//         return thisPage < maxPage;
//     }
// 
//     public boolean hasPrevPage() {
//         return thisPage > 1;
//     }
// 
//     public int getCurrentRank() {
//         return currentRank;
//     }
// 
//     public void setCurrentRank(int currentRank) {
//         this.currentRank = currentRank;
//     }
// 
//     public int getAndIncrementRank() {
//         return currentRank++;
//     }
// 
//     public int getSlot() {
//         return slot;
//     }
// 
//     public void setSlot(int slot) {
//         this.slot = slot;
//     }
// 
//     public int getAndIncrementSlot() {
//         return slot++;
//     }
// }


// Path: core/src/main/java/net/novucs/ftop/gui/element/button/GuiNextButton.java
import net.novucs.ftop.gui.GuiContext;

package net.novucs.ftop.gui.element.button;


public class GuiNextButton extends GuiBiStateButton {

    public GuiNextButton(GuiButtonContent enabled, GuiButtonContent disabled) {
        super(enabled, disabled);
    }

    @Override
    public void render(GuiContext context) {
        if (context.getInventory().getSize() <= context.getSlot()) {
            return;
        }

        GuiButtonContent content = context.hasNextPage() ? getEnabled() : getDisabled();
        context.getInventory().setItem(context.getAndIncrementSlot(), content.getItem());
        context.getSlots().add(this);
    }

    @Override
    public void handleClick(GuiContext context) {