EpicVouchers/src/main/java/com/craftaro/epicvouchers/menus/VoucherEditorMenu.java

137 lines
6.2 KiB
Java

package com.craftaro.epicvouchers.menus;
import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial;
import com.craftaro.core.utils.ItemUtils;
import com.craftaro.epicvouchers.EpicVouchers;
import com.craftaro.epicvouchers.libraries.ItemBuilder;
import com.craftaro.epicvouchers.libraries.inventory.IconInv;
import com.craftaro.epicvouchers.libraries.inventory.icons.Icon;
import com.craftaro.epicvouchers.libraries.inventory.icons.StringIcon;
import com.craftaro.epicvouchers.libraries.inventory.icons.StringListIcon;
import com.craftaro.epicvouchers.libraries.inventory.icons.ToggleableIcon;
import com.craftaro.epicvouchers.menus.sub.editor.EffectsMenu;
import com.craftaro.epicvouchers.menus.sub.editor.ParticlesMenu;
import com.craftaro.epicvouchers.menus.sub.editor.SoundsMenu;
import com.craftaro.epicvouchers.menus.sub.editor.TitlesMenu;
import com.craftaro.epicvouchers.voucher.Voucher;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import static org.bukkit.ChatColor.GRAY;
import static org.bukkit.ChatColor.YELLOW;
import static org.bukkit.Material.BOOK;
public class VoucherEditorMenu extends IconInv {
private final EpicVouchers instance;
private final Voucher voucher;
public VoucherEditorMenu(EpicVouchers instance, Voucher voucher) {
super(36, "Voucher options");
this.instance = instance;
this.voucher = voucher;
//Booleans
addIcon(0, new ToggleableIcon("Glow", event -> voucher.setGlow(!voucher.isGlow()), voucher.isGlow()));
addIcon(1, new ToggleableIcon("Confirm", event -> voucher.setConfirm(!voucher.isConfirm()), voucher.isConfirm()));
addIcon(2, new ToggleableIcon("Unbreakable", event -> voucher.setUnbreakable(!voucher.isUnbreakable()), voucher.isUnbreakable()));
addIcon(3, new ToggleableIcon("Hide Attributes", event -> voucher.setHideAttributes(!voucher.isHideAttributes()), voucher.isHideAttributes()));
addIcon(4, new ToggleableIcon("Remove Item", event -> voucher.setRemoveItem(!voucher.isRemoveItem()), voucher.isRemoveItem()));
addIcon(5, new ToggleableIcon("Feed Player", event -> voucher.setFeedPlayer(!voucher.isFeedPlayer()), voucher.isFeedPlayer()));
addIcon(6, new ToggleableIcon("Heal Player", event -> voucher.setHealPlayer(!voucher.isHealPlayer()), voucher.isHealPlayer()));
addIcon(7, new ToggleableIcon("Smite Effect", event -> voucher.setSmiteEffect(!voucher.isSmiteEffect()), voucher.isSmiteEffect()));
//Strings
addIcon(9, new StringIcon(instance, "Permission", voucher.getPermission(), (player, editString) -> {
voucher.setPermission(editString);
reopen(player);
}));
addIcon(10, new StringIcon(instance, "Actionbar", voucher.getActionBar(), (player, editString) -> {
voucher.setActionBar(editString);
reopen(player);
}));
addIcon(11, new StringIcon(instance, "Material", voucher.getMaterial().toString(), (player, editString) -> {
if (editString.contains(":")) {
voucher.setData(Short.parseShort(editString.split(":")[1]));
voucher.setMaterial(Material.valueOf(editString.split(":")[0]));
} else {
voucher.setMaterial(Material.valueOf(editString));
}
reopen(player);
}, string -> {
if (string.isEmpty()) {
return false;
}
if (string.contains(":") && string.split(":").length == 2) {
String[] split = string.split(":");
return Material.matchMaterial(split[0]) != null && StringUtils.isNumeric(split[1]);
}
return Material.matchMaterial(string) != null;
}, true));
addIcon(12, new StringIcon(instance, "Name", voucher.getName(false), (player, editString) -> {
voucher.setName(editString);
reopen(player);
}));
addIcon(13, new StringIcon(instance, new ItemBuilder(voucher.getTexture() == null ? XMaterial.PLAYER_HEAD.parseItem() : ItemUtils.getCustomHead(voucher.getTexture()))
.name(YELLOW + "Skull Texture")
.lore(GRAY + "Right click to edit", GRAY + "Left click to clear").build(), voucher.getTexture(), (player, editString) -> {
voucher.setTexture(editString);
reopen(player);
}));
// Sections
addIcon(18, new StringListIcon(instance, voucher.getCommands(), "Commands", voucher));
addIcon(19, new StringListIcon(instance, voucher.getBroadcasts(false), "Broadcasts", voucher));
addIcon(20, new StringListIcon(instance, voucher.getMessages(false), "Messages", voucher));
addIcon(21, new StringListIcon(instance, voucher.getLore(false), "Lore", voucher));
addIcon(22, new Icon(new ItemBuilder(BOOK).name(YELLOW + "Titles").lore(GRAY + "Click to view").build(), event -> new TitlesMenu(instance, voucher).open(event.getPlayer())));
addIcon(23, new Icon(new ItemBuilder(BOOK).name(YELLOW + "Sounds").lore(GRAY + "Click to view").build(), event -> new SoundsMenu(instance, voucher).open(event.getPlayer())));
addIcon(24, new Icon(new ItemBuilder(BOOK).name(YELLOW + "Particles").lore(GRAY + "Click to view").build(), event -> new ParticlesMenu(instance, voucher).open(event.getPlayer())));
addIcon(25, new Icon(new ItemBuilder(BOOK).name(YELLOW + "Effects").lore(GRAY + "Click to view").build(), event -> new EffectsMenu(instance, voucher).open(event.getPlayer())));
// Misc
addIcon(getInventory().getSize() - 5, voucher.toItemStack());
addIcon(getInventory().getSize() - 9, new ItemBuilder(Material.BARRIER)
.name(YELLOW + "Return")
.lore(GRAY + "Return to the editor")
.build(), event -> new OptionMenu(instance, voucher).open(event.getPlayer()));
onClick(event -> {
if (event.getItem() != null && event.getClickType() != ClickType.RIGHT && event.getSlot() < 18) {
reopen(event.getPlayer());
}
});
}
private void reopen(Player player) {
new VoucherEditorMenu(this.instance, this.voucher).open(player);
}
}