uhhh
This commit is contained in:
@ -5,10 +5,6 @@ import org.bukkit.ChatColor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Lucanius
|
||||
* Project: BedWars
|
||||
*/
|
||||
public class CC {
|
||||
|
||||
public static final String scoreboardBar = ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "----------------------";
|
||||
|
@ -128,7 +128,7 @@ public class ItemBuilder implements Listener {
|
||||
|
||||
public ItemBuilder hideFlags() {
|
||||
final ItemMeta meta = is.getItemMeta();
|
||||
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES);
|
||||
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS);
|
||||
is.setItemMeta(meta);
|
||||
|
||||
return this;
|
||||
|
52
src/main/java/rip/tilly/bedwars/utils/menu/Button.java
Normal file
52
src/main/java/rip/tilly/bedwars/utils/menu/Button.java
Normal file
@ -0,0 +1,52 @@
|
||||
package rip.tilly.bedwars.utils.menu;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public abstract class Button {
|
||||
|
||||
public static Button placeholder(final Material material, final byte data, String... title) {
|
||||
return (new Button() {
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
ItemStack it = new ItemStack(material, 1, data);
|
||||
ItemMeta meta = it.getItemMeta();
|
||||
|
||||
meta.setDisplayName(StringUtils.join(title));
|
||||
it.setItemMeta(meta);
|
||||
|
||||
return it;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void playFail(Player player) {
|
||||
player.playSound(player.getLocation(), Sound.DIG_GRASS, 20F, 0.1F);
|
||||
}
|
||||
|
||||
public static void playSuccess(Player player) {
|
||||
player.playSound(player.getLocation(), Sound.NOTE_PIANO, 20F, 15F);
|
||||
}
|
||||
|
||||
public static void playNeutral(Player player) {
|
||||
player.playSound(player.getLocation(), Sound.CLICK, 20F, 1F);
|
||||
}
|
||||
|
||||
public abstract ItemStack getButtonItem(Player player);
|
||||
|
||||
public void clicked(Player player, int slot, ClickType clickType, int hotbarButton) {
|
||||
|
||||
}
|
||||
|
||||
public boolean shouldCancel(Player player, int slot, ClickType clickType) {
|
||||
return (true);
|
||||
}
|
||||
|
||||
public boolean shouldUpdate(Player player, int slot, ClickType clickType) {
|
||||
return (false);
|
||||
}
|
||||
}
|
150
src/main/java/rip/tilly/bedwars/utils/menu/Menu.java
Normal file
150
src/main/java/rip/tilly/bedwars/utils/menu/Menu.java
Normal file
@ -0,0 +1,150 @@
|
||||
package rip.tilly.bedwars.utils.menu;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import rip.tilly.bedwars.BedWars;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter @Setter
|
||||
public abstract class Menu {
|
||||
|
||||
public static Map<String, Menu> currentlyOpenedMenus = new HashMap<>();
|
||||
@Getter private Map<Integer, Button> buttons = new HashMap<>();
|
||||
|
||||
private boolean autoUpdate = false;
|
||||
private boolean updateAfterClick = true;
|
||||
private boolean closedByMenu = false;
|
||||
private boolean placeholder = false;
|
||||
|
||||
private Button placeholderButton = Button.placeholder(Material.STAINED_GLASS_PANE, (byte) 7, " ");
|
||||
private BukkitTask task;
|
||||
|
||||
private ItemStack createItemStack(Player player, Button button) {
|
||||
ItemStack item = button.getButtonItem(player);
|
||||
if (item.getType() != Material.SKULL) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta != null && meta.hasDisplayName()) {
|
||||
meta.setDisplayName(meta.getDisplayName() + "§b§c§d§e");
|
||||
}
|
||||
item.setItemMeta(meta);
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public void openMenu(final Player player) {
|
||||
this.buttons = this.getButtons(player);
|
||||
|
||||
Menu previousMenu = Menu.currentlyOpenedMenus.get(player.getName());
|
||||
Inventory inventory = null;
|
||||
int size = this.getSize() == -1 ? this.size(this.buttons) : this.getSize();
|
||||
boolean update = false;
|
||||
String title = this.getTitle(player);
|
||||
|
||||
if (title.length() > 32) {
|
||||
title = title.substring(0, 32);
|
||||
}
|
||||
|
||||
if (player.getOpenInventory() != null) {
|
||||
if (previousMenu == null) {
|
||||
player.closeInventory();
|
||||
} else {
|
||||
int previousSize = player.getOpenInventory().getTopInventory().getSize();
|
||||
|
||||
if (previousSize == size && player.getOpenInventory().getTopInventory().getTitle().equals(title)) {
|
||||
inventory = player.getOpenInventory().getTopInventory();
|
||||
update = true;
|
||||
} else {
|
||||
previousMenu.setClosedByMenu(true);
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (inventory == null) {
|
||||
inventory = Bukkit.createInventory(player, size, title);
|
||||
}
|
||||
|
||||
inventory.setContents(new ItemStack[inventory.getSize()]);
|
||||
|
||||
currentlyOpenedMenus.put(player.getName(), this);
|
||||
|
||||
for (Map.Entry<Integer, Button> buttonEntry : this.buttons.entrySet()) {
|
||||
inventory.setItem(buttonEntry.getKey(), createItemStack(player, buttonEntry.getValue()));
|
||||
}
|
||||
|
||||
if (this.isPlaceholder()) {
|
||||
for (int index = 0; index < size; index++) {
|
||||
if (this.buttons.get(index) == null) {
|
||||
this.buttons.put(index, this.placeholderButton);
|
||||
inventory.setItem(index, this.placeholderButton.getButtonItem(player));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (update) {
|
||||
player.updateInventory();
|
||||
} else {
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
|
||||
this.setClosedByMenu(false);
|
||||
if (autoUpdate && task == null) {
|
||||
task = BedWars.getInstance().getServer().getScheduler().runTaskTimer(BedWars.getInstance(), () -> this.openMenu(player), 0, 20L);
|
||||
}
|
||||
}
|
||||
|
||||
public int size(Map<Integer, Button> buttons) {
|
||||
int highest = 0;
|
||||
|
||||
for (int buttonValue : buttons.keySet()) {
|
||||
if (buttonValue > highest) {
|
||||
highest = buttonValue;
|
||||
}
|
||||
}
|
||||
|
||||
return (int) (Math.ceil((highest + 1) / 9D) * 9D);
|
||||
}
|
||||
|
||||
public int getSlot(int x, int y) {
|
||||
return ((9 * y) + x);
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
public abstract String getTitle(Player player);
|
||||
|
||||
public abstract Map<Integer, Button> getButtons(Player player);
|
||||
|
||||
public void onClose(Player player) {
|
||||
if (task != null) {
|
||||
task.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
public void fillEmptySlots(Map<Integer, Button> buttons, ItemStack itemStack) {
|
||||
int bound = getSize();
|
||||
|
||||
for (int slot = 0; slot < bound; slot++) {
|
||||
if (buttons.get(slot) == null) {
|
||||
buttons.put(slot, new Button() {
|
||||
@Override
|
||||
public ItemStack getButtonItem(Player player) {
|
||||
return itemStack;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user