222 lines
11 KiB
Java
222 lines
11 KiB
Java
package com.craftaro.ultimatekits.gui;
|
|
|
|
import com.craftaro.core.compatibility.CompatibleMaterial;
|
|
import com.craftaro.core.gui.Gui;
|
|
import com.craftaro.core.gui.GuiUtils;
|
|
import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial;
|
|
import com.craftaro.core.utils.ItemUtils;
|
|
import com.craftaro.core.utils.TextUtils;
|
|
import com.craftaro.ultimatekits.UltimateKits;
|
|
import com.craftaro.ultimatekits.kit.Kit;
|
|
import com.craftaro.ultimatekits.category.Category;
|
|
import com.craftaro.ultimatekits.settings.Settings;
|
|
import com.craftaro.ultimatekits.utils.Methods;
|
|
import org.bukkit.Bukkit;
|
|
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 java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class KitSelectorGui extends Gui {
|
|
|
|
private final Player player;
|
|
private final UltimateKits plugin;
|
|
|
|
private int timer;
|
|
private final Category category;
|
|
private List<String> kitList;
|
|
private boolean kitsmode = false;
|
|
|
|
private final boolean glassless;
|
|
private final int showPerPage;
|
|
|
|
public KitSelectorGui(UltimateKits plugin, Player player, Category category) {
|
|
this.player = player;
|
|
this.plugin = plugin;
|
|
this.category = category;
|
|
glassless = Settings.DO_NOT_USE_GLASS_BORDERS.getBoolean();
|
|
|
|
setTitle(plugin.getLocale().getMessage("interface.selector.title").getMessage());
|
|
loadKits();
|
|
int showPerRow = glassless ? 9 : 7;
|
|
int nrows = (int) Math.ceil(kitList.size() / (double) showPerRow);
|
|
setRows(glassless ? nrows : nrows + 2);
|
|
showPerPage = showPerRow * (glassless ? (nrows == 6 ? 6 : 5) : 4);
|
|
setPages(kitList.size() / showPerPage);
|
|
|
|
setItem(0, 4, GuiUtils.createButtonItem(XMaterial.BOOK,
|
|
plugin.getLocale().getMessage("interface.selector.details")
|
|
.processPlaceholder("player", player.getName()).getMessage().split("\\|")));
|
|
|
|
if (pages > 1) {
|
|
this.setNextPage(rows - 1, 5, GuiUtils.createButtonItem(ItemUtils.getCustomHead("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"),
|
|
plugin.getLocale().getMessage("interface.button.next").getMessage()));
|
|
|
|
this.setPrevPage(rows - 1, 3, GuiUtils.createButtonItem(ItemUtils.getCustomHead("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"),
|
|
plugin.getLocale().getMessage("interface.button.last").getMessage()));
|
|
|
|
this.setOnPage(pager -> showPage());
|
|
}
|
|
|
|
if (!glassless) {
|
|
setButton(rows - 1, 4, GuiUtils.createButtonItem(Settings.EXIT_ICON.getMaterial(XMaterial.OAK_DOOR),
|
|
UltimateKits.getInstance().getLocale().getMessage("interface.button.exit").getMessage()),
|
|
event -> exit());
|
|
}
|
|
|
|
ItemStack glass2 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial());
|
|
setDefaultItem(AIR);
|
|
mirrorFill(0, 0, true, true, glass2);
|
|
|
|
if (!glassless) {
|
|
if (Settings.RAINBOW.getBoolean()) {
|
|
animateGlass();
|
|
timer = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
|
|
if (inventory.getViewers().isEmpty()) return;
|
|
animateGlass();
|
|
}, 20L, 20L);
|
|
setOnClose(event -> Bukkit.getScheduler().cancelTask(timer));
|
|
} else {
|
|
ItemStack glass1 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_1.getMaterial());
|
|
ItemStack glass3 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_3.getMaterial());
|
|
mirrorFill(0, 0, true, true, glass2);
|
|
mirrorFill(1, 0, true, true, glass2);
|
|
mirrorFill(0, 1, true, true, glass2);
|
|
mirrorFill(0, 2, true, true, glass3);
|
|
mirrorFill(0, 3, false, true, glass1);
|
|
}
|
|
}
|
|
|
|
if (category != null)
|
|
setButton(0, 0, GuiUtils.createButtonItem(ItemUtils.getCustomHead("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"),
|
|
plugin.getLocale().getMessage("interface.button.back").getMessage()),
|
|
event -> guiManager.showGUI(player, new CategorySelectorGui(plugin, player)));
|
|
|
|
|
|
showPage();
|
|
}
|
|
|
|
private void loadKits() {
|
|
kitList = plugin.getKitManager().getKits().stream()
|
|
.filter(kit -> !kit.isHidden() && kit.hasPermissionToPreview(player)
|
|
&& (category == null || kit.getCategory() == category))
|
|
.map(Kit::getKey)
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
private static final Random rand = new Random();
|
|
|
|
private void animateGlass() {
|
|
for (int col = 1; col < 8; ++col) {
|
|
ItemStack it;
|
|
if ((it = getItem(0, col)) == null || it.getType() == Material.AIR || it.getType().name().contains("PANE"))
|
|
setItem(0, col, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneForColor(rand.nextInt(16))));
|
|
if ((it = getItem(rows - 1, col)) == null || it.getType() == Material.AIR || it.getType().name().contains("PANE"))
|
|
setItem(rows - 1, col, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneForColor(rand.nextInt(16))));
|
|
}
|
|
for (int row = 1; row + 1 < rows; ++row) {
|
|
setItem(row, 0, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneForColor(rand.nextInt(16))));
|
|
setItem(row, 8, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneForColor(rand.nextInt(16))));
|
|
}
|
|
}
|
|
|
|
private void showPage() {
|
|
int index = (page - 1) * showPerPage;
|
|
for (int row = glassless ? 0 : 1; row < (!glassless || pages != 1 ? rows - 1 : rows); ++row) {
|
|
for (int col = glassless ? 0 : 1; col < (glassless ? 9 : 8); ++col) {
|
|
if (index >= kitList.size()) {
|
|
setItem(row, col, null);
|
|
clearActions(row, col);
|
|
continue;
|
|
}
|
|
final String kitItem = kitList.get(index++);
|
|
final Kit kit = plugin.getKitManager().getKit(kitItem);
|
|
|
|
String kitTitle = kit.getTitle() != null
|
|
? ChatColor.translateAlternateColorCodes('&', kit.getTitle())
|
|
: plugin.getLocale().getMessage("interface.selector.kit")
|
|
.processPlaceholder("kit", TextUtils.formatText(kitItem, true)).getMessage();
|
|
|
|
setButton(row, col, GuiUtils.createButtonItem(
|
|
kit.getDisplayItem() != null ? kit.getDisplayItem() : XMaterial.ENCHANTED_BOOK.parseItem(), kitTitle,
|
|
getKitLore(kit)),
|
|
event -> {
|
|
if (event.clickType == ClickType.MIDDLE && player.hasPermission("ultimatekits.admin")) {
|
|
kitsmode = !kitsmode;
|
|
showPage();
|
|
} else if (kitsmode) {
|
|
if (event.clickType == ClickType.RIGHT) {
|
|
plugin.getKitManager().moveKit(kit, true);
|
|
} else if (event.clickType == ClickType.LEFT) {
|
|
plugin.getKitManager().moveKit(kit, false);
|
|
}
|
|
loadKits();
|
|
plugin.saveKits(false);
|
|
showPage();
|
|
} else if (event.clickType == ClickType.LEFT) {
|
|
kit.display(player, guiManager, this);
|
|
} else if (event.clickType == ClickType.RIGHT) {
|
|
kit.buy(event.player, event.manager);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
private List<String> getKitLore(Kit kit) {
|
|
ArrayList<String> lore = new ArrayList<>();
|
|
if (kit.getPrice() != 0)
|
|
lore.add(plugin.getLocale().getMessage("interface.selector.aboutkitprice")
|
|
.processPlaceholder("price", String.valueOf(kit.getPrice()))
|
|
.getMessage());
|
|
else if (kit.getLink() != null)
|
|
lore.add(plugin.getLocale().getMessage("general.type.link").getMessage());
|
|
|
|
if (!kitsmode) {
|
|
if (!plugin.getLocale().getMessage("interface.selector.aboutkit").getMessage().trim().equals("")) {
|
|
String[] parts = plugin.getLocale().getMessage("interface.selector.aboutkit").getMessage().split("\\|");
|
|
lore.add("");
|
|
for (String line : parts)
|
|
lore.add(ChatColor.translateAlternateColorCodes('&', line));
|
|
}
|
|
if (kit.hasPermissionToClaim(player)) {
|
|
if (kit.getNextUse(player) == -1) {
|
|
lore.add(plugin.getLocale().getMessage("event.claim.once").getMessage());
|
|
} else if (kit.getNextUse(player) > 0) {
|
|
if (!plugin.getLocale().getMessage("event.claim.wait").getMessage().trim().equals("")) {
|
|
lore.add(plugin.getLocale().getMessage("event.claim.wait")
|
|
.processPlaceholder("time", Methods.makeReadable(kit.getNextUse(player)))
|
|
.getMessage());
|
|
}
|
|
} else if (!plugin.getLocale().getMessage("event.claim.ready").getMessage().trim().equals("")) {
|
|
lore.add(plugin.getLocale().getMessage("event.claim.ready").getMessage());
|
|
}
|
|
} else
|
|
lore.add(plugin.getLocale().getMessage("event.claim.noaccess").getMessage());
|
|
lore.add("");
|
|
lore.add(plugin.getLocale().getMessage("interface.selector.leftpreview").getMessage());
|
|
if (kit.hasPermissionToClaim(player)) {
|
|
lore.add(plugin.getLocale().getMessage("interface.selector.rightclaim").getMessage());
|
|
} else if (kit.getPrice() != 0 || kit.getLink() != null) {
|
|
lore.add(plugin.getLocale().getMessage("interface.selector.rightbuy").getMessage());
|
|
}
|
|
|
|
if (player.hasPermission("ultimatekits.admin")) {
|
|
lore.add("");
|
|
lore.add(plugin.getLocale().getMessage("interface.selector.adminlore").getMessage());
|
|
}
|
|
} else {
|
|
lore.addAll(Arrays.asList(plugin.getLocale().getMessage("interface.selector.editlore").getMessage().split("\\|")));
|
|
}
|
|
return lore;
|
|
}
|
|
|
|
}
|