arena menu
This commit is contained in:
@ -0,0 +1,35 @@
|
||||
package rip.tilly.bedwars.utils.menu.buttons;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import rip.tilly.bedwars.utils.menu.Button;
|
||||
import rip.tilly.bedwars.utils.menu.Menu;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class BackButton extends Button {
|
||||
|
||||
private Menu back;
|
||||
|
||||
@Override
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
ItemStack itemStack = new ItemStack(Material.BED);
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
|
||||
itemMeta.setDisplayName(ChatColor.RED + "Go back");
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clicked(Player player, int i, ClickType clickType, int hb) {
|
||||
Button.playNeutral(player);
|
||||
|
||||
this.back.openMenu(player);
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package rip.tilly.bedwars.utils.menu.buttons;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import rip.tilly.bedwars.utils.menu.Button;
|
||||
|
||||
@AllArgsConstructor @Getter @Setter
|
||||
public class DisplayButton extends Button {
|
||||
|
||||
private ItemStack itemStack;
|
||||
private boolean cancel;
|
||||
|
||||
@Override
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
if (this.itemStack == null) {
|
||||
return new ItemStack(Material.AIR);
|
||||
} else {
|
||||
return this.itemStack;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldCancel(Player player, int slot, ClickType clickType) {
|
||||
return this.cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package rip.tilly.bedwars.utils.menu.pagination;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import rip.tilly.bedwars.utils.menu.Button;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class JumpToPageButton extends Button {
|
||||
|
||||
private int page;
|
||||
private PaginatedMenu menu;
|
||||
private boolean current;
|
||||
|
||||
@Override
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
ItemStack itemStack = new ItemStack(this.current ? Material.ENCHANTED_BOOK : Material.BOOK, this.page);
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
|
||||
itemMeta.setDisplayName(ChatColor.GREEN + "Page " + this.page);
|
||||
|
||||
if (this.current) {
|
||||
itemMeta.setLore(Arrays.asList(
|
||||
"",
|
||||
ChatColor.GREEN + "Current page"
|
||||
));
|
||||
}
|
||||
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clicked(Player player, int i, ClickType clickType, int hb) {
|
||||
this.menu.modPage(player, this.page - this.menu.getPage());
|
||||
Button.playNeutral(player);
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package rip.tilly.bedwars.utils.menu.pagination;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import rip.tilly.bedwars.utils.menu.Button;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class PageButton extends Button {
|
||||
|
||||
private int mod;
|
||||
private PaginatedMenu menu;
|
||||
|
||||
@Override
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
ItemStack itemStack = new ItemStack(Material.CARPET);
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
|
||||
if (this.hasNext(player)) {
|
||||
itemMeta.setDisplayName(this.mod > 0 ? ChatColor.GREEN + "Next page" : ChatColor.RED + "Previous page");
|
||||
} else {
|
||||
itemMeta.setDisplayName(ChatColor.GRAY + (this.mod > 0 ? "Last page" : "First page"));
|
||||
}
|
||||
|
||||
itemMeta.setLore(Arrays.asList(
|
||||
"",
|
||||
ChatColor.GREEN + "Right click to",
|
||||
ChatColor.GREEN + "jump to a page"
|
||||
));
|
||||
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clicked(Player player, int i, ClickType clickType, int hb) {
|
||||
if (clickType == ClickType.RIGHT) {
|
||||
new ViewAllPagesMenu(this.menu).openMenu(player);
|
||||
playNeutral(player);
|
||||
} else {
|
||||
if (hasNext(player)) {
|
||||
this.menu.modPage(player, this.mod);
|
||||
Button.playNeutral(player);
|
||||
} else {
|
||||
Button.playFail(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasNext(Player player) {
|
||||
int pg = this.menu.getPage() + this.mod;
|
||||
return pg > 0 && this.menu.getPages(player) >= pg;
|
||||
}
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package rip.tilly.bedwars.utils.menu.pagination;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import rip.tilly.bedwars.utils.menu.Button;
|
||||
import rip.tilly.bedwars.utils.menu.Menu;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public abstract class PaginatedMenu extends Menu {
|
||||
|
||||
@Getter private int page = 1;
|
||||
|
||||
{
|
||||
setUpdateAfterClick(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTitle(Player player) {
|
||||
return getPrePaginatedTitle(player) + " - " + page + "/" + getPages(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the page number
|
||||
*
|
||||
* @param player player viewing the inventory
|
||||
* @param mod delta to modify the page number by
|
||||
*/
|
||||
public final void modPage(Player player, int mod) {
|
||||
page += mod;
|
||||
getButtons().clear();
|
||||
openMenu(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param player player viewing the inventory
|
||||
*/
|
||||
public final int getPages(Player player) {
|
||||
int buttonAmount = getAllPagesButtons(player).size();
|
||||
|
||||
if (buttonAmount == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return (int) Math.ceil(buttonAmount / (double) getMaxItemsPerPage(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Map<Integer, Button> getButtons(Player player) {
|
||||
int minIndex = (int) ((double) (page - 1) * getMaxItemsPerPage(player));
|
||||
int maxIndex = (int) ((double) (page) * getMaxItemsPerPage(player));
|
||||
|
||||
HashMap<Integer, Button> buttons = new HashMap<>();
|
||||
|
||||
buttons.put(0, new PageButton(-1, this));
|
||||
buttons.put(8, new PageButton(1, this));
|
||||
|
||||
for (Map.Entry<Integer, Button> entry : getAllPagesButtons(player).entrySet()) {
|
||||
int ind = entry.getKey();
|
||||
if (ind >= minIndex && ind < maxIndex) {
|
||||
ind -= (int) ((double) (getMaxItemsPerPage(player)) * (page - 1)) - 9;
|
||||
buttons.put(ind, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
Map<Integer, Button> global = getGlobalButtons(player);
|
||||
if (global != null) {
|
||||
for (Map.Entry<Integer, Button> gent : global.entrySet()) {
|
||||
buttons.put(gent.getKey(), gent.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
return buttons;
|
||||
}
|
||||
|
||||
public int getMaxItemsPerPage(Player player) {
|
||||
return 18;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param player player viewing the inventory
|
||||
*
|
||||
* @return a Map of buttons that returns items which will be present on all pages
|
||||
*/
|
||||
public Map<Integer, Button> getGlobalButtons(Player player) {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void bottomTopButtons(boolean full, Map buttons, ItemStack itemStack) {
|
||||
IntStream.range(0, getSize()).filter(slot -> buttons.get(slot) == null).forEach(slot -> {
|
||||
if (slot < 9 || slot > getSize() - 10 || full && (slot % 9 == 0 || (slot + 1) % 9 == 0)) {
|
||||
buttons.put(slot, new Button() {
|
||||
@Override
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
return itemStack;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param player player viewing the inventory
|
||||
*
|
||||
* @return title of the inventory before the page number is added
|
||||
*/
|
||||
public abstract String getPrePaginatedTitle(Player player);
|
||||
|
||||
/**
|
||||
* @param player player viewing the inventory
|
||||
*
|
||||
* @return a map of buttons that will be paginated and spread across pages
|
||||
*/
|
||||
public abstract Map<Integer, Button> getAllPagesButtons(Player player);
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package rip.tilly.bedwars.utils.menu.pagination;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.bukkit.entity.Player;
|
||||
import rip.tilly.bedwars.utils.CC;
|
||||
import rip.tilly.bedwars.utils.menu.Button;
|
||||
import rip.tilly.bedwars.utils.menu.Menu;
|
||||
import rip.tilly.bedwars.utils.menu.buttons.BackButton;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class ViewAllPagesMenu extends Menu {
|
||||
|
||||
@NonNull @Getter PaginatedMenu menu;
|
||||
|
||||
@Override
|
||||
public String getTitle(Player player) {
|
||||
return CC.translate("&eJump to page");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Integer, Button> getButtons(Player player) {
|
||||
HashMap<Integer, Button> buttons = new HashMap<>();
|
||||
|
||||
buttons.put(0, new BackButton(menu));
|
||||
|
||||
int index = 10;
|
||||
for (int i = 1; i <= menu.getPages(player); i++) {
|
||||
buttons.put(index++, new JumpToPageButton(i, menu, menu.getPage() == i));
|
||||
|
||||
if ((index - 8) % 9 == 0) {
|
||||
index += 2;
|
||||
}
|
||||
}
|
||||
|
||||
return buttons;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAutoUpdate() {
|
||||
return true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user