Record Class CycleButton

java.lang.Object
java.lang.Record
studio.mevera.lotus.api.button.CycleButton
All Implemented Interfaces:
Button

public record CycleButton(@NotNull List<Button> states, int currentIndex, @NotNull DataRegistry data) extends Record implements Button
A multi-state button that advances through its states() on each click. The displayed item is delegated to the active state, so any Button variant — static label, clickable with side-effect, etc. — can serve as a state.

On click the active state's own Button.dispatch(MenuView, InventoryClickEvent) runs first (so users may attach per-state behaviour such as "play this sound"); the button then replaces itself in the view's Content with a copy positioned at the next index, modulo states.size(). The cycle wraps.

Typical uses: tri-state filter toggles ("OFF / WHITELIST / BLACKLIST"), difficulty selectors, page-size pickers — anywhere a single slot needs to step through a small enumeration.

Immutability: the record itself is immutable; "advancing state" produces a new CycleButton and writes it to the slot. Do not rely on a particular CycleButton instance persisting across clicks — observe the slot's current button via ContentView.get(Slot).

  • Constructor Summary

    Constructors
    Constructor
    Description
    CycleButton(@NotNull List<Button> states, int currentIndex, @NotNull DataRegistry data)
    Creates an instance of a CycleButton record class.
  • Method Summary

    Modifier and Type
    Method
    Description
    @NotNull CycleButton
     
    @NotNull Button
    Returns the currently active child button.
    int
    Returns the value of the currentIndex record component.
    @NotNull DataRegistry
    Returns the value of the data record component.
    void
    dispatch(@NotNull MenuView<?,?> view, @NotNull org.bukkit.event.inventory.InventoryClickEvent event)
     
    final boolean
    Indicates whether some other object is "equal to" this one.
    final int
    Returns a hash code value for this object.
    @NotNull org.bukkit.inventory.ItemStack
     
    @NotNull List<Button>
    Returns the value of the states record component.
    final String
    Returns a string representation of this record class.
    @NotNull CycleButton
    withItem(@NotNull org.bukkit.inventory.ItemStack item)
    Replaces the displayed item.

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • CycleButton

      public CycleButton(@NotNull @NotNull List<Button> states, int currentIndex, @NotNull @NotNull DataRegistry data)
      Creates an instance of a CycleButton record class.
      Parameters:
      states - the value for the states record component
      currentIndex - the value for the currentIndex record component
      data - the value for the data record component
  • Method Details

    • item

      @NotNull public @NotNull org.bukkit.inventory.ItemStack item()
      Specified by:
      item in interface Button
    • current

      @NotNull public @NotNull Button current()
      Returns the currently active child button.
    • advanced

      @NotNull public @NotNull CycleButton advanced()
      Returns:
      a new CycleButton positioned one step forward (wrapping at the end).
    • withItem

      @NotNull public @NotNull CycleButton withItem(@NotNull @NotNull org.bukkit.inventory.ItemStack item)
      Replaces the displayed item. Because the rendered item is normally derived from the active state, this overrides only the current state's item by wrapping it in a StaticButton with the new item; behaviour of the active state is preserved by copying it first.
      Specified by:
      withItem in interface Button
    • dispatch

      public void dispatch(@NotNull @NotNull MenuView<?,?> view, @NotNull @NotNull org.bukkit.event.inventory.InventoryClickEvent event)
      Specified by:
      dispatch in interface Button
    • toString

      public final String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. Reference components are compared with Objects::equals(Object,Object); primitive components are compared with '=='.
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • states

      @NotNull public @NotNull List<Button> states()
      Returns the value of the states record component.
      Returns:
      the value of the states record component
    • currentIndex

      public int currentIndex()
      Returns the value of the currentIndex record component.
      Returns:
      the value of the currentIndex record component
    • data

      @NotNull public @NotNull DataRegistry data()
      Returns the value of the data record component.
      Specified by:
      data in interface Button
      Returns:
      the value of the data record component