Improved Page API
This commit is contained in:
@@ -2,6 +2,7 @@ package com.willfp.eco.core.gui.menu;
|
||||
|
||||
import com.willfp.eco.core.gui.component.GUIComponent;
|
||||
import com.willfp.eco.core.gui.page.Page;
|
||||
import com.willfp.eco.core.gui.page.PageBuilder;
|
||||
import com.willfp.eco.core.gui.slot.FillerMask;
|
||||
import com.willfp.eco.core.gui.slot.Slot;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -15,14 +16,7 @@ import java.util.function.Function;
|
||||
/**
|
||||
* Builder to create menus.
|
||||
*/
|
||||
public interface MenuBuilder {
|
||||
/**
|
||||
* Get the amount of rows.
|
||||
*
|
||||
* @return The amount of rows.
|
||||
*/
|
||||
int getRows();
|
||||
|
||||
public interface MenuBuilder extends PageBuilder {
|
||||
/**
|
||||
* Set the menu title.
|
||||
*
|
||||
@@ -39,11 +33,10 @@ public interface MenuBuilder {
|
||||
* @param slot The slot.
|
||||
* @return The builder.
|
||||
*/
|
||||
default MenuBuilder setSlot(final int row,
|
||||
final int column,
|
||||
@NotNull final Slot slot) {
|
||||
return this.addComponent(row, column, slot);
|
||||
}
|
||||
@Override
|
||||
MenuBuilder setSlot(final int row,
|
||||
final int column,
|
||||
@NotNull final Slot slot);
|
||||
|
||||
|
||||
/**
|
||||
@@ -55,6 +48,7 @@ public interface MenuBuilder {
|
||||
* @param component The component.
|
||||
* @return The builder.
|
||||
*/
|
||||
@Override
|
||||
MenuBuilder addComponent(@NotNull MenuLayer layer,
|
||||
int row,
|
||||
int column,
|
||||
@@ -69,11 +63,10 @@ public interface MenuBuilder {
|
||||
* @param component The component.
|
||||
* @return The builder.
|
||||
*/
|
||||
default MenuBuilder addComponent(final int row,
|
||||
final int column,
|
||||
@NotNull final GUIComponent component) {
|
||||
return this.addComponent(MenuLayer.MIDDLE, row, column, component);
|
||||
}
|
||||
@Override
|
||||
MenuBuilder addComponent(final int row,
|
||||
final int column,
|
||||
@NotNull final GUIComponent component);
|
||||
|
||||
/**
|
||||
* Run function to modify the builder.
|
||||
@@ -89,9 +82,8 @@ public interface MenuBuilder {
|
||||
* @param mask The mask.
|
||||
* @return The builder.
|
||||
*/
|
||||
default MenuBuilder setMask(@NotNull final FillerMask mask) {
|
||||
return this.addComponent(MenuLayer.BACKGROUND, 1, 1, mask);
|
||||
}
|
||||
@Override
|
||||
MenuBuilder setMask(@NotNull final FillerMask mask);
|
||||
|
||||
/**
|
||||
* Add a page.
|
||||
|
||||
@@ -3,12 +3,14 @@ package com.willfp.eco.core.gui.page;
|
||||
import com.willfp.eco.core.Eco;
|
||||
import com.willfp.eco.core.gui.component.GUIComponent;
|
||||
import com.willfp.eco.core.gui.menu.Menu;
|
||||
import com.willfp.eco.core.gui.menu.MenuBuilder;
|
||||
import com.willfp.eco.core.gui.slot.Slot;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* A page is a component representing another menu.
|
||||
@@ -52,6 +54,20 @@ public final class Page implements GUIComponent {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new page.
|
||||
*
|
||||
* @param pageNumber The page number.
|
||||
* @param page The base menu.
|
||||
*/
|
||||
public Page(final int pageNumber,
|
||||
@NotNull final Consumer<PageBuilder> page) {
|
||||
this.pageNumber = pageNumber;
|
||||
MenuBuilder builder = Menu.builder(6);
|
||||
page.accept(builder);
|
||||
this.page = builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current page number.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.willfp.eco.core.gui.page;
|
||||
|
||||
import com.willfp.eco.core.gui.component.GUIComponent;
|
||||
import com.willfp.eco.core.gui.menu.CloseHandler;
|
||||
import com.willfp.eco.core.gui.menu.Menu;
|
||||
import com.willfp.eco.core.gui.menu.MenuLayer;
|
||||
import com.willfp.eco.core.gui.menu.OpenHandler;
|
||||
import com.willfp.eco.core.gui.slot.FillerMask;
|
||||
import com.willfp.eco.core.gui.slot.Slot;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Builder to create pages.
|
||||
*/
|
||||
public interface PageBuilder {
|
||||
/**
|
||||
* Get the amount of rows.
|
||||
*
|
||||
* @return The amount of rows.
|
||||
*/
|
||||
int getRows();
|
||||
|
||||
/**
|
||||
* Set a slot.
|
||||
*
|
||||
* @param row The row.
|
||||
* @param column The column.
|
||||
* @param slot The slot.
|
||||
* @return The builder.
|
||||
*/
|
||||
default PageBuilder setSlot(final int row,
|
||||
final int column,
|
||||
@NotNull final Slot slot) {
|
||||
return this.addComponent(row, column, slot);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a component.
|
||||
*
|
||||
* @param layer The layer.
|
||||
* @param row The row of the top left corner.
|
||||
* @param column The column of the top left corner.
|
||||
* @param component The component.
|
||||
* @return The builder.
|
||||
*/
|
||||
PageBuilder addComponent(@NotNull MenuLayer layer,
|
||||
int row,
|
||||
int column,
|
||||
@NotNull GUIComponent component);
|
||||
|
||||
|
||||
/**
|
||||
* Add a component.
|
||||
*
|
||||
* @param row The row of the top left corner.
|
||||
* @param column The column of the top left corner.
|
||||
* @param component The component.
|
||||
* @return The builder.
|
||||
*/
|
||||
default PageBuilder addComponent(final int row,
|
||||
final int column,
|
||||
@NotNull final GUIComponent component) {
|
||||
return this.addComponent(MenuLayer.MIDDLE, row, column, component);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the menu mask.
|
||||
*
|
||||
* @param mask The mask.
|
||||
* @return The builder.
|
||||
*/
|
||||
default PageBuilder setMask(@NotNull final FillerMask mask) {
|
||||
return this.addComponent(MenuLayer.BACKGROUND, 1, 1, mask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the action to run on render.
|
||||
*
|
||||
* @param action The action.
|
||||
* @return The builder.
|
||||
*/
|
||||
PageBuilder onRender(@NotNull BiConsumer<Player, Menu> action);
|
||||
}
|
||||
@@ -5,6 +5,7 @@ package com.willfp.eco.core.gui
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
import com.willfp.eco.core.gui.menu.MenuBuilder
|
||||
import com.willfp.eco.core.gui.page.Page
|
||||
import com.willfp.eco.core.gui.page.PageBuilder
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import com.willfp.eco.core.gui.slot.SlotBuilder
|
||||
import com.willfp.eco.core.items.TestableItem
|
||||
@@ -133,8 +134,11 @@ fun MenuBuilder.onRender(action: (Player, Menu) -> Unit): MenuBuilder =
|
||||
this.onRender { a, b -> action(a, b) }
|
||||
|
||||
/** @see MenuBuilder.addPage */
|
||||
fun MenuBuilder.addPage(page: Int, creation: MenuBuilder.() -> MenuBuilder): MenuBuilder =
|
||||
this.addPage(Page(page, Menu.builder(this.rows).creation().build()))
|
||||
fun MenuBuilder.addPage(page: Int, creation: PageBuilder.() -> Unit): MenuBuilder {
|
||||
val builder = Menu.builder(this.rows)
|
||||
creation(builder)
|
||||
return this.addPage(Page(page, builder.build()))
|
||||
}
|
||||
|
||||
/** Kotlin builder for menus. */
|
||||
fun menu(
|
||||
|
||||
Reference in New Issue
Block a user