Updating plugin to meet Songoda standards.
This commit is contained in:
parent
d0a66b933e
commit
50a2c7a066
2
pom.xml
2
pom.xml
|
@ -2,7 +2,7 @@
|
|||
<groupId>com.songoda</groupId>
|
||||
<artifactId>EpicVouchers</artifactId>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>1.0.9</version>
|
||||
<version>2.0</version>
|
||||
<build>
|
||||
<defaultGoal>clean package</defaultGoal>
|
||||
<plugins>
|
||||
|
|
|
@ -3,7 +3,8 @@ package com.songoda.epicvouchers;
|
|||
import com.songoda.epicvouchers.command.CommandManager;
|
||||
import com.songoda.epicvouchers.handlers.Connections;
|
||||
import com.songoda.epicvouchers.libraries.Bountiful;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.listeners.PlayerCommandListener;
|
||||
import com.songoda.epicvouchers.listeners.PlayerInteractListener;
|
||||
import com.songoda.epicvouchers.utils.*;
|
||||
|
@ -17,6 +18,7 @@ import org.bukkit.plugin.PluginManager;
|
|||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
public class EpicVouchers extends JavaPlugin {
|
||||
|
||||
|
@ -24,21 +26,19 @@ public class EpicVouchers extends JavaPlugin {
|
|||
@Getter private final ServerVersion serverVersion = ServerVersion.fromPackageName(Bukkit.getServer().getClass().getPackage().getName());
|
||||
@Getter private CommandManager commandManager;
|
||||
@Getter private Connections connections;
|
||||
private ConsoleCommandSender console;
|
||||
@Getter private CoolDownManager cooldowns;
|
||||
@Getter private Locale locale;
|
||||
private SettingsManager settingsManager;
|
||||
@Getter private VoucherExecutor voucherExecutor;
|
||||
@Getter private VoucherManager voucherManager;
|
||||
@Getter private ConfigWrapper vouchersFile = new ConfigWrapper(this, "", "vouchers.yml");
|
||||
@Getter private LinkedHashMap<String, Voucher> vouchers;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
console = getServer().getConsoleSender();
|
||||
console.sendMessage(Methods.formatText("&a============================="));
|
||||
console.sendMessage(Methods.formatText("&7EpicVouchers " + this.getDescription().getVersion() + " by &5Brianna <3&7!"));
|
||||
console.sendMessage(Methods.formatText("&7Action: &aEnabling&7..."));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&a============================="));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&7EpicVouchers " + this.getDescription().getVersion() + " by &5Songoda <3&7!"));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&7Action: &aEnabling&7..."));
|
||||
|
||||
// Locales
|
||||
Locale.init(this);
|
||||
|
@ -46,15 +46,16 @@ public class EpicVouchers extends JavaPlugin {
|
|||
this.locale = Locale.getLocale(getConfig().getString("Locale", "en_US"));
|
||||
|
||||
FastInv.init(this);
|
||||
IconInv.init(this);
|
||||
Debugger.init(this);
|
||||
|
||||
this.settingsManager = new SettingsManager(this);
|
||||
this.settingsManager.updateSettings();
|
||||
this.vouchers = new LinkedHashMap<>();
|
||||
getConfig().options().copyDefaults(true);
|
||||
saveConfig();
|
||||
|
||||
this.commandManager = new CommandManager(this);
|
||||
this.voucherManager = new VoucherManager();
|
||||
this.connections = new Connections(this);
|
||||
this.cooldowns = new CoolDownManager(this);
|
||||
this.voucherExecutor = new VoucherExecutor(this);
|
||||
|
@ -71,14 +72,13 @@ public class EpicVouchers extends JavaPlugin {
|
|||
|
||||
loadVouchersFromFile();
|
||||
|
||||
// Bukkit.getScheduler().runTaskTimerAsynchronously(this, this::saveToFile, 6000, 6000);
|
||||
|
||||
Bountiful.findVersion();
|
||||
connections.openMySQL();
|
||||
console.sendMessage(Methods.formatText("&a============================="));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&a============================="));
|
||||
}
|
||||
|
||||
private void loadVouchersFromFile() {
|
||||
vouchers.clear();
|
||||
/*
|
||||
* Register Vouchers into VoucherManger from configuration
|
||||
*/
|
||||
|
@ -87,9 +87,11 @@ public class EpicVouchers extends JavaPlugin {
|
|||
|
||||
Voucher voucher = new Voucher(key);
|
||||
ConfigurationSection cs = vouchersFile.getConfig().getConfigurationSection("vouchers." + key);
|
||||
Material material = cs.getString("material") == null || cs.getString("material").equals("") ? Material.PAPER :
|
||||
Material.matchMaterial(cs.getString("material")) == null ? Material.PAPER : Material.matchMaterial(cs.getString("material"));
|
||||
|
||||
voucher.setPermission(cs.getString("permission", ""));
|
||||
voucher.setMaterial(Material.valueOf(cs.getString("material", "PAPER")));
|
||||
voucher.setMaterial(material);
|
||||
voucher.setData((short) cs.getInt("data", 0));
|
||||
voucher.setName(cs.getString("name", "default"));
|
||||
voucher.setLore(cs.getStringList("lore"));
|
||||
|
@ -115,29 +117,16 @@ public class EpicVouchers extends JavaPlugin {
|
|||
voucher.setParticle(cs.getString("particles.particle"));
|
||||
voucher.setParticleAmount(cs.getInt("particles.amount", 0));
|
||||
voucher.setEffect(cs.getString("effects.effect"));
|
||||
voucher.setEffectAmplifer(cs.getInt("effects.amplifier"));
|
||||
voucher.setEffectAmplifier(cs.getInt("effects.amplifier"));
|
||||
voucher.setItemStack(cs.getItemStack("itemstack", null));
|
||||
|
||||
voucherManager.addVoucher(key, voucher);
|
||||
vouchers.put(key, voucher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveToFile(Voucher voucher) {
|
||||
ConfigurationSection cs = vouchersFile.getConfig().getConfigurationSection("vouchers." + voucher.getKey());
|
||||
|
||||
cs.set("material", voucher.getMaterial().name());
|
||||
cs.set("name", voucher.getName(false));
|
||||
cs.set("lore", voucher.getLore(false));
|
||||
|
||||
if (voucher.getData() != 0)
|
||||
cs.set("data", voucher.getData());
|
||||
|
||||
vouchersFile.saveConfig();
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
vouchersFile.reloadConfig();
|
||||
getVoucherManager().getVouchers().forEach(this::saveToFile);
|
||||
loadVouchersFromFile();
|
||||
|
||||
reloadConfig();
|
||||
|
@ -147,12 +136,11 @@ public class EpicVouchers extends JavaPlugin {
|
|||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
getVoucherManager().getVouchers().forEach(this::saveToFile);
|
||||
connections.closeMySQL();
|
||||
console.sendMessage(Methods.formatText("&a============================="));
|
||||
console.sendMessage(Methods.formatText("&7EpicVouchers " + this.getDescription().getVersion() + " by &5Brianna <3&7!"));
|
||||
console.sendMessage(Methods.formatText("&7Action: &cDisabling&7..."));
|
||||
console.sendMessage(Methods.formatText("&a============================="));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&a============================="));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&7EpicVouchers " + this.getDescription().getVersion() + " by &5Songoda <3&7!"));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&7Action: &cDisabling&7..."));
|
||||
Bukkit.getConsoleSender().sendMessage(Methods.format("&a============================="));
|
||||
}
|
||||
|
||||
}
|
|
@ -53,7 +53,7 @@ public class CommandManager implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
}
|
||||
commandSender.sendMessage(instance.getLocale().getMessage("general.nametag.prefix") + Methods.formatText(instance.getLocale().getMessage("command.error.notexist")));
|
||||
commandSender.sendMessage(instance.getLocale().getMessage("general.nametag.prefix") + Methods.format(instance.getLocale().getMessage("command.error.notexist")));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -69,8 +69,8 @@ public class CommandManager implements CommandExecutor {
|
|||
return;
|
||||
}
|
||||
if (returnType == AbstractCommand.ReturnType.SYNTAX_ERROR) {
|
||||
sender.sendMessage(instance.getLocale().getMessage("general.nametag.prefix") + Methods.formatText("&cInvalid Syntax!"));
|
||||
sender.sendMessage(instance.getLocale().getMessage("general.nametag.prefix") + Methods.formatText("&7The valid syntax is: &6" + command.getSyntax() + "&7."));
|
||||
sender.sendMessage(instance.getLocale().getMessage("general.nametag.prefix") + Methods.format("&cInvalid Syntax!"));
|
||||
sender.sendMessage(instance.getLocale().getMessage("general.nametag.prefix") + Methods.format("&7The valid syntax is: &6" + command.getSyntax() + "&7."));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -29,11 +29,11 @@ public class CommandEditor extends AbstractCommand {
|
|||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "/epicvouchers editor";
|
||||
return "/vouchers editor";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Edit vouchers in a gui.";
|
||||
return "Edit vouchers in a GUI.";
|
||||
}
|
||||
}
|
|
@ -14,11 +14,11 @@ public class CommandEpicVouchers extends AbstractCommand {
|
|||
@Override
|
||||
protected ReturnType runCommand(EpicVouchers instance, CommandSender sender, String... args) {
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(Methods.formatText(instance.getLocale().getMessage("general.nametag.prefix") + "&7Version " + instance.getDescription().getVersion() + " Created with <3 by &5&l&oBrianna"));
|
||||
sender.sendMessage(Methods.format(instance.getLocale().getMessage("general.nametag.prefix") + "&7Version " + instance.getDescription().getVersion() + " Created with <3 by &5&l&oSongoda"));
|
||||
|
||||
for (AbstractCommand command : instance.getCommandManager().getCommands()) {
|
||||
if (command.getPermissionNode() == null || sender.hasPermission(command.getPermissionNode())) {
|
||||
sender.sendMessage(Methods.formatText("&8 - &a" + command.getSyntax() + "&7 - " + command.getDescription()));
|
||||
sender.sendMessage(Methods.format("&8 - &a" + command.getSyntax() + "&7 - " + command.getDescription()));
|
||||
}
|
||||
}
|
||||
sender.sendMessage("");
|
||||
|
|
|
@ -3,12 +3,16 @@ package com.songoda.epicvouchers.command.commands;
|
|||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.command.AbstractCommand;
|
||||
import com.songoda.epicvouchers.events.ForceRedeemEvent;
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
public class CommandForce extends AbstractCommand {
|
||||
|
||||
public CommandForce(AbstractCommand parent) {
|
||||
|
@ -23,46 +27,43 @@ public class CommandForce extends AbstractCommand {
|
|||
sender.sendMessage(instance.getLocale().getMessage("command.error.noplayer"));
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
Voucher voucher = instance.getVoucherManager().getVoucher(args[2]);
|
||||
if (voucher == null) {
|
||||
|
||||
if (!instance.getVouchers().containsKey(args[2])) {
|
||||
sender.sendMessage(instance.getLocale().getMessage("command.error.novoucher"));
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
try {
|
||||
int amount = Integer.parseInt(args[3]);
|
||||
String output;
|
||||
if (args[1].equalsIgnoreCase("everyone")) {
|
||||
output = "everyone";
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (player != sender) {
|
||||
ForceRedeemEvent event = new ForceRedeemEvent(player, voucher.getName(true), amount, sender);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
for (int times = 0; times < amount; times++) {
|
||||
instance.getVoucherExecutor().redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Player player = Bukkit.getPlayer(args[1]);
|
||||
ForceRedeemEvent event = new ForceRedeemEvent(player, voucher.getName(true), amount, sender);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
output = player.getName();
|
||||
for (int times = 0; times < amount; times++) {
|
||||
instance.getVoucherExecutor().redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
}
|
||||
}
|
||||
String message = instance.getLocale().getMessage("command.force.send", output, voucher.getName(true), String.valueOf(amount));
|
||||
sender.sendMessage(message);
|
||||
} catch (Exception error) {
|
||||
|
||||
Voucher voucher = instance.getVouchers().get(args[2]);
|
||||
|
||||
if (!StringUtils.isNumeric(args[3])) {
|
||||
sender.sendMessage(instance.getLocale().getMessage("command.error.notnumber"));
|
||||
Debugger.runReport(error);
|
||||
return ReturnType.SUCCESS;
|
||||
}
|
||||
|
||||
Collection<Player> players;
|
||||
String output;
|
||||
int amount = Integer.parseInt(args[3]);
|
||||
|
||||
if(args[1].equalsIgnoreCase("everyone")) {
|
||||
players = (Collection<Player>) Bukkit.getOnlinePlayers();
|
||||
output = "everyone";
|
||||
} else {
|
||||
players = Collections.singletonList(Bukkit.getPlayer(args[1]));
|
||||
output = Bukkit.getPlayer(args[1]).getName();
|
||||
}
|
||||
|
||||
players.forEach(player -> {
|
||||
ForceRedeemEvent event = new ForceRedeemEvent(player, voucher.getName(true), amount, sender);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
for (int times = 0; times < amount; times++) {
|
||||
instance.getVoucherExecutor().redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
}
|
||||
});
|
||||
String message = instance.getLocale().getMessage("command.force.send", output, voucher.getName(true), String.valueOf(amount));
|
||||
sender.sendMessage(message);
|
||||
return ReturnType.SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,16 +17,22 @@ public class CommandGive extends AbstractCommand {
|
|||
|
||||
@Override
|
||||
protected ReturnType runCommand(EpicVouchers instance, CommandSender sender, String... args) {
|
||||
if (args.length != 4) return ReturnType.SYNTAX_ERROR;
|
||||
if (args.length != 4) {
|
||||
return ReturnType.SYNTAX_ERROR;
|
||||
}
|
||||
|
||||
if (!args[1].equalsIgnoreCase("everyone") && Bukkit.getPlayer(args[1]) == null) {
|
||||
sender.sendMessage(instance.getLocale().getMessage("command.error.noplayer"));
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
Voucher voucher = instance.getVoucherManager().getVoucher(args[2]);
|
||||
if (voucher == null) {
|
||||
|
||||
if (!instance.getVouchers().containsKey(args[2])) {
|
||||
sender.sendMessage(instance.getLocale().getMessage("command.error.novoucher"));
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
|
||||
Voucher voucher = instance.getVouchers().get(args[2]);
|
||||
|
||||
try {
|
||||
String givemessage = instance.getLocale().getMessage("command.give.send");
|
||||
String receivemessage = instance.getLocale().getMessage("command.give.receive");
|
||||
|
|
|
@ -4,6 +4,8 @@ import com.songoda.epicvouchers.EpicVouchers;
|
|||
import com.songoda.epicvouchers.command.AbstractCommand;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CommandList extends AbstractCommand {
|
||||
|
||||
public CommandList(AbstractCommand parent) {
|
||||
|
@ -12,12 +14,12 @@ public class CommandList extends AbstractCommand {
|
|||
|
||||
@Override
|
||||
protected ReturnType runCommand(EpicVouchers instance, CommandSender sender, String... args) {
|
||||
if (args.length != 1) return ReturnType.SYNTAX_ERROR;
|
||||
if (args.length != 1) {
|
||||
return ReturnType.SYNTAX_ERROR;
|
||||
}
|
||||
|
||||
String message = instance.getLocale().getMessage("command.list.list");
|
||||
String list = instance.getVoucherManager().getVouchers().toString();
|
||||
list = list.replaceAll("[()\\[\\]]", "");
|
||||
message = message.replaceAll("%list%", list);
|
||||
String list = String.join(", ", instance.getVouchers().keySet());
|
||||
String message = instance.getLocale().getMessage("command.list.list").replaceAll("%list%", list);
|
||||
sender.sendMessage(message);
|
||||
|
||||
return ReturnType.SUCCESS;
|
||||
|
@ -31,11 +33,11 @@ public class CommandList extends AbstractCommand {
|
|||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "/epicvouchers list";
|
||||
return "/vouchers list";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Displays a list of all vouchers from the vouchers file.";
|
||||
return "Displays all vouchers";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ public class CommandReload extends AbstractCommand {
|
|||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "/epicvouchers reload";
|
||||
return "/vouchers reload";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -29,9 +29,9 @@ public class Connections {
|
|||
|
||||
|
||||
connection = DriverManager.getConnection("jdbc:mysql://" + mysqlIP + ":" + mysqlPort + "/" + mysqlDatabase + "?useSSL=true?autoReconnect=true", mysqlUsername, mysqlPassword);
|
||||
System.out.println(Methods.formatText("&fSuccessfully created a connection with MySQL."));
|
||||
System.out.println(Methods.format("&fSuccessfully created a connection with MySQL."));
|
||||
} catch (Exception error) {
|
||||
System.out.println(Methods.formatText("&cFailed to create a connection with MySQL."));
|
||||
System.out.println(Methods.format("&cFailed to create a connection with MySQL."));
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
@ -42,9 +42,9 @@ public class Connections {
|
|||
}
|
||||
try {
|
||||
connection.close();
|
||||
System.out.println(Methods.formatText("&fSuccessfully closed the MySQL connection."));
|
||||
System.out.println(Methods.format("&fSuccessfully closed the MySQL connection."));
|
||||
} catch (Exception error) {
|
||||
System.out.println(Methods.formatText("&cFailed to close the MySQL connection."));
|
||||
System.out.println(Methods.format("&cFailed to close the MySQL connection."));
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
@ -61,9 +61,9 @@ public class Connections {
|
|||
statement.execute("CREATE TABLE IF NOT EXISTS redeems (id INT NOT NULL AUTO_INCREMENT, player varchar(120) NOT NULL, voucher varchar(120) NOT NULL, timestamp varchar(120) NOT NULL, PRIMARY KEY (ID));");
|
||||
statement.execute("INSERT INTO redeems VALUES (default, '" + player.getName() + "', '" + voucher + "', '" + time + "');");
|
||||
statement.close();
|
||||
System.out.println(Methods.formatText("&fSuccessfully saved the redeem in the MySQL database."));
|
||||
System.out.println(Methods.format("&fSuccessfully saved the redeem in the MySQL database."));
|
||||
} catch (Exception error) {
|
||||
System.out.println(Methods.formatText("&cFailed to save the redeem data in the MySQL database."));
|
||||
System.out.println(Methods.format("&cFailed to save the redeem data in the MySQL database."));
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,8 +29,6 @@ public class AbstractAnvilGUI {
|
|||
private static Class<?> ChatMessage;
|
||||
private static Class<?> EntityHuman;
|
||||
private static boolean loadedClasses = false;
|
||||
private Sound closeSound = Sound.ENTITY_PLAYER_LEVELUP;
|
||||
@SuppressWarnings("unused")
|
||||
private AnvilClickEventHandler handler;
|
||||
private Inventory inv;
|
||||
private Map<AnvilSlot, ItemStack> items = new HashMap<>();
|
||||
|
@ -85,7 +83,6 @@ public class AbstractAnvilGUI {
|
|||
if (!inv.equals(AbstractAnvilGUI.this.inv)) return;
|
||||
inv.clear();
|
||||
OnClose onClose = getOnClose();
|
||||
player.playSound(player.getLocation(), closeSound, 1F, 1F);
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
|
||||
if (onClose != null) onClose.OnClose(player, inv);
|
||||
destroy();
|
||||
|
@ -117,8 +114,9 @@ public class AbstractAnvilGUI {
|
|||
return player;
|
||||
}
|
||||
|
||||
public void setSlot(AnvilSlot slot, ItemStack item) {
|
||||
public AbstractAnvilGUI setSlot(AnvilSlot slot, ItemStack item) {
|
||||
items.put(slot, item);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void open() {
|
||||
|
@ -191,12 +189,9 @@ public class AbstractAnvilGUI {
|
|||
return onClose;
|
||||
}
|
||||
|
||||
public void setOnClose(OnClose onClose) {
|
||||
public AbstractAnvilGUI setOnClose(OnClose onClose) {
|
||||
this.onClose = onClose;
|
||||
}
|
||||
|
||||
public void setCloseSound(Sound sound) {
|
||||
closeSound = sound;
|
||||
return this;
|
||||
}
|
||||
|
||||
public enum AnvilSlot {
|
||||
|
@ -206,7 +201,7 @@ public class AbstractAnvilGUI {
|
|||
|
||||
private int slot;
|
||||
|
||||
private AnvilSlot(int slot) {
|
||||
AnvilSlot(int slot) {
|
||||
this.slot = slot;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ import org.bukkit.potion.PotionEffectType;
|
|||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A complete {@link ItemStack} builder for FastInv (only works on 1.8+).
|
||||
* A complete {@link ItemStack} inventory for FastInv (only works on 1.8+).
|
||||
*
|
||||
* The project is on <a href="https://github.com/MrMicky-FR/FastInv">GitHub</a>
|
||||
*
|
||||
|
@ -130,6 +130,10 @@ public class ItemBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder addGlow() {
|
||||
return enchant(Enchantment.DURABILITY, 1).addFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
|
||||
/*
|
||||
* Flags:
|
||||
*/
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.songoda.epicvouchers.libraries;
|
||||
package com.songoda.epicvouchers.libraries.inventory;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -138,13 +138,12 @@ public class FastInv implements InventoryHolder {
|
|||
* Add an {@link ItemStack} to the menus on specific slot with a {@link FastInvClickListener} to handle clicks.
|
||||
*
|
||||
* @param slot The slot of the item.
|
||||
* @param item The item to add.
|
||||
* @param listener The FastInvClickListener for the item.
|
||||
* @param itemStack The icon to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int slot, ItemStack item, FastInvClickListener listener) {
|
||||
public FastInv addItem(int slot, ItemStack itemStack, FastInvClickListener listener) {
|
||||
runSync(() -> {
|
||||
inventory.setItem(slot, item);
|
||||
inventory.setItem(slot, itemStack);
|
||||
|
||||
if (listener != null) {
|
||||
itemListeners.put(slot, listener);
|
||||
|
@ -174,7 +173,7 @@ public class FastInv implements InventoryHolder {
|
|||
* @param slotFrom Starting slot to put the item in.
|
||||
* @param slotTo Ending slot to put the item in.
|
||||
* @param item The item to add.
|
||||
* @param listener The FastInvClickListener for the item.
|
||||
* @param listener The IconClickListener for the item.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int slotFrom, int slotTo, ItemStack item, FastInvClickListener listener) {
|
||||
|
@ -220,7 +219,7 @@ public class FastInv implements InventoryHolder {
|
|||
*
|
||||
* @param slots The slots to place the item.
|
||||
* @param item The item to add.
|
||||
* @param listener The FastInvClickListener for the item.
|
||||
* @param listener The IconClickListener for the item.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int[] slots, ItemStack item, FastInvClickListener listener) {
|
|
@ -0,0 +1,500 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory;
|
||||
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.Icon;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.*;
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* A fast API to easily create advanced GUI.
|
||||
* The project is on <a href="https://github.com/MrMicky-FR/FastInv">GitHub</a>
|
||||
*
|
||||
* @author MrMicky
|
||||
* @version 2.0.3 - Now supports async operations
|
||||
*/
|
||||
public class IconInv implements InventoryHolder {
|
||||
|
||||
private static Plugin plugin = null;
|
||||
private boolean cancelTasksOnClose = true, cancelled = true;
|
||||
private Set<IconInvCloseListener> closeListeners = new HashSet<>();
|
||||
private Set<IconClickListener> clickListeners = new HashSet<>();
|
||||
private Map<Integer, Icon> itemListeners = new HashMap<>();
|
||||
private Set<BukkitTask> tasks = new HashSet<>();
|
||||
private Inventory inventory;
|
||||
|
||||
/**
|
||||
* Create a new FastInv with a custom size.
|
||||
*
|
||||
* @param size The size of the menus.
|
||||
*/
|
||||
public IconInv(int size) {
|
||||
this(size, InventoryType.CHEST.getDefaultTitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new FastInv with a custom size and title.
|
||||
*
|
||||
* @param size The size of the menus.
|
||||
* @param title The title (name) of the menus.
|
||||
*/
|
||||
public IconInv(int size, String title) {
|
||||
this(size, InventoryType.CHEST, title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new FastInv with a custom type.
|
||||
*
|
||||
* @param type The type of the menus.
|
||||
*/
|
||||
public IconInv(InventoryType type) {
|
||||
this(type, type.getDefaultTitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new FastInv with a custom type and title.
|
||||
*
|
||||
* @param type The type of the menus.
|
||||
* @param title The title of the menus.
|
||||
* @throws IllegalStateException if FastInv is not init with FastInv.init(Plugin plugin)
|
||||
*/
|
||||
public IconInv(InventoryType type, String title) {
|
||||
this(0, type, title);
|
||||
}
|
||||
|
||||
private IconInv(int size, InventoryType type, String title) {
|
||||
if (plugin == null) {
|
||||
throw new IllegalStateException("FastInv is not initialised");
|
||||
}
|
||||
|
||||
runSync(() -> {
|
||||
if (type == InventoryType.CHEST && size > 0) {
|
||||
inventory = Bukkit.createInventory(this, size, title);
|
||||
} else {
|
||||
inventory = Bukkit.createInventory(this, type, title);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register your FastInv instance.
|
||||
*
|
||||
* @param plugin The plugin that uses FastInv.
|
||||
*/
|
||||
public static void init(Plugin plugin) {
|
||||
if (IconInv.plugin == null) {
|
||||
IconInv.plugin = plugin;
|
||||
Bukkit.getPluginManager().registerEvents(getListener(), plugin);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus with a {@link IconClickListener} to handle clicks.
|
||||
*
|
||||
* @param icon The icon to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv addIcon(Icon icon) {
|
||||
runSync(() -> {
|
||||
int slot = inventory.firstEmpty();
|
||||
if (slot >= 0) {
|
||||
addIcon(slot, icon);
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on specific slot with a {@link IconClickListener} to handle clicks.
|
||||
*
|
||||
* @param slot The slot of the item.
|
||||
* @param icon The icon to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv addIcon(int slot, Icon icon) {
|
||||
runSync(() -> {
|
||||
inventory.setItem(slot, icon.getItemStack());
|
||||
itemListeners.put(slot, icon);
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on a range of slots with a {@link IconClickListener} to handle clicks.
|
||||
*
|
||||
* @param slotFrom Starting slot to put the item in.
|
||||
* @param slotTo Ending slot to put the item in.
|
||||
* @param icon The icon to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv addIcon(int slotFrom, int slotTo, Icon icon) {
|
||||
for (int i = slotFrom; i <= slotTo; i++) {
|
||||
addIcon(i, icon);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on the edges.
|
||||
*
|
||||
* @param icon The icon to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv edge(Icon icon) {
|
||||
int height = inventory.getSize() / 9;
|
||||
|
||||
addIcon(0, 9, icon);
|
||||
addIcon(inventory.getSize() - 9, inventory.getSize() - 1, icon);
|
||||
|
||||
for (int i = 0; i < height; i++) {
|
||||
addIcon(i * 9, icon);
|
||||
addIcon(i * 9 + 8, icon);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on multiples slots with a {@link IconClickListener} to handle click.
|
||||
*
|
||||
* @param slots The slots to place the item.
|
||||
* @param icon The icon to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv addIcon(int[] slots, Icon icon) {
|
||||
for (int slot : slots) {
|
||||
addIcon(slot, icon);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public IconInv fill(Icon icon) {
|
||||
runSync(() -> {
|
||||
for (int i = 0; i < inventory.getSize(); i++) {
|
||||
if (inventory.getItem(i) == null) {
|
||||
addIcon(i, icon);
|
||||
}
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
public IconInv addIcon(int slot, ItemStack itemStack) {
|
||||
return addIcon(slot, new Icon(itemStack));
|
||||
}
|
||||
|
||||
public IconInv addIcon(ItemStack itemStack, Consumer<IconClickEvent> event) {
|
||||
return addIcon(new Icon(itemStack, event));
|
||||
}
|
||||
|
||||
public IconInv addIcon(int slot, ItemStack itemStack, Consumer<IconClickEvent> event) {
|
||||
return addIcon(slot, new Icon(itemStack, event));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a {@link IconInvCloseListener} to listen on menus close.
|
||||
*
|
||||
* @param listener The {@link IconInvCloseListener} to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv onClose(IconInvCloseListener listener) {
|
||||
closeListeners.add(listener);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a {@link IconClickListener} to listen on menus click.
|
||||
*
|
||||
* @param listener The {@link IconClickListener} to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv onClick(IconClickListener listener) {
|
||||
clickListeners.add(listener);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedule a task to run.
|
||||
*
|
||||
* @param period Delay between each run.
|
||||
* @param runnable The {@link Runnable} task to run.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv onUpdate(long period, Runnable runnable) {
|
||||
return onUpdate(period, period, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedule a task to run with a delay before starting.
|
||||
*
|
||||
* @param delay Ticks to wait before starting the task.
|
||||
* @param period Delay between each run.
|
||||
* @param runnable The {@link Runnable} task to run.
|
||||
* @return This FastInv instance, for chaining
|
||||
*/
|
||||
public IconInv onUpdate(long delay, long period, Runnable runnable) {
|
||||
tasks.add(Bukkit.getScheduler().runTaskTimer(plugin, runnable, delay, period));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the menus to a player.
|
||||
*
|
||||
* @param player The player to open the menu.
|
||||
*/
|
||||
public void open(Player player) {
|
||||
Bukkit.getScheduler().runTask(plugin, () -> player.openInventory(inventory));
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the menus to players.
|
||||
*
|
||||
* @param players The players to open the menu.
|
||||
*/
|
||||
public void open(Player... players) {
|
||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||
for (Player p : players) {
|
||||
p.openInventory(inventory);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel all tasks.
|
||||
*/
|
||||
public void cancelTasks() {
|
||||
tasks.forEach(BukkitTask::cancel);
|
||||
tasks.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Run a task on the server primary thread.
|
||||
*
|
||||
* @param runnable The runnable to run on the main thread
|
||||
*/
|
||||
public void runSync(Runnable runnable) {
|
||||
if (Bukkit.isPrimaryThread()) {
|
||||
runnable.run();
|
||||
} else {
|
||||
Bukkit.getScheduler().runTask(plugin, runnable);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set if the tasks will be cancel on menus close.
|
||||
*
|
||||
* @param cancelTasksOnClose Set if the tasks will be cancel
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public IconInv setCancelTasksOnClose(boolean cancelTasksOnClose) {
|
||||
this.cancelTasksOnClose = cancelTasksOnClose;
|
||||
return this;
|
||||
}
|
||||
|
||||
public interface IconClickListener {
|
||||
void onClick(IconClickEvent event);
|
||||
}
|
||||
|
||||
public interface IconInvCloseListener {
|
||||
void onClose(IconInvCloseEvent event);
|
||||
}
|
||||
|
||||
public static abstract class IconEvent {
|
||||
|
||||
private Player player;
|
||||
private IconInv inventory;
|
||||
private boolean cancelled;
|
||||
|
||||
IconEvent(Player player, IconInv inventory, boolean cancelled) {
|
||||
this.player = player;
|
||||
this.inventory = inventory;
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the FastInv menus.
|
||||
*
|
||||
* @return This associated FastInv instance.
|
||||
*/
|
||||
public IconInv getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Player} who clicked.
|
||||
*
|
||||
* @return the player who clicked.
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get if the event is cancelled or not.
|
||||
*
|
||||
* @return Whether the event was cancelled.
|
||||
*/
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set if the event will be cancel or not.
|
||||
*
|
||||
* @param cancel Whether the event should be cancelled.
|
||||
*/
|
||||
public void setCancelled(boolean cancel) {
|
||||
this.cancelled = cancel;
|
||||
}
|
||||
}
|
||||
|
||||
public static class IconClickEvent extends IconEvent {
|
||||
|
||||
private int slot;
|
||||
private ItemStack item;
|
||||
private InventoryAction action;
|
||||
private ClickType clickType;
|
||||
|
||||
private IconClickEvent(Player player, IconInv inventory, int slot, ItemStack item,
|
||||
boolean cancelled, InventoryAction action, ClickType clickType) {
|
||||
super(player, inventory, cancelled);
|
||||
this.slot = slot;
|
||||
this.item = item;
|
||||
this.action = action;
|
||||
this.clickType = clickType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link InventoryAction}
|
||||
*
|
||||
* @return The action of the event
|
||||
*/
|
||||
public InventoryAction getAction() {
|
||||
return this.action;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link ClickType} of the event.
|
||||
*
|
||||
* @return The click type
|
||||
*/
|
||||
public ClickType getClickType() {
|
||||
return this.clickType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the clicked {@link ItemStack}
|
||||
*
|
||||
* @return The clicked item
|
||||
*/
|
||||
public ItemStack getItem() {
|
||||
return this.item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of the clicked slot
|
||||
*
|
||||
* @return The slot number
|
||||
*/
|
||||
public int getSlot() {
|
||||
return this.slot;
|
||||
}
|
||||
}
|
||||
|
||||
public static class IconInvCloseEvent extends IconEvent {
|
||||
private IconInvCloseEvent(Player player, IconInv inventory, boolean cancelled) {
|
||||
super(player, inventory, cancelled);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getDefaultCancel() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
public IconInv setDefaultCancel(boolean value) {
|
||||
cancelled = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Bukkit menus associated with this FastInv instance.
|
||||
*
|
||||
* @return The Bukkit {@link Inventory}.
|
||||
*/
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
private static Listener getListener() {
|
||||
return new Listener() {
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent event) {
|
||||
if (event.getInventory().getHolder() instanceof IconInv && event.getWhoClicked() instanceof Player) {
|
||||
int slot = event.getRawSlot();
|
||||
IconInv inv = (IconInv) event.getInventory().getHolder();
|
||||
|
||||
IconClickEvent clickEvent = new IconClickEvent((Player) event.getWhoClicked(), inv, slot,
|
||||
event.getCurrentItem(), inv.cancelled, event.getAction(), event.getClick());
|
||||
|
||||
if (inv.itemListeners.containsKey(slot)) {
|
||||
inv.itemListeners.get(slot).run(clickEvent);
|
||||
}
|
||||
|
||||
inv.clickListeners.forEach(listener -> listener.onClick(clickEvent));
|
||||
|
||||
if (clickEvent.isCancelled()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClose(InventoryCloseEvent event) {
|
||||
if (event.getInventory().getHolder() instanceof IconInv && event.getPlayer() instanceof Player) {
|
||||
Player player = (Player) event.getPlayer();
|
||||
IconInv inv = (IconInv) event.getInventory().getHolder();
|
||||
|
||||
IconInvCloseEvent closeEvent = new IconInvCloseEvent(player, inv, false);
|
||||
inv.closeListeners.forEach(listener -> listener.onClose(closeEvent));
|
||||
|
||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||
// Tiny delay to prevent errors.
|
||||
if (closeEvent.isCancelled() && player.isOnline()) {
|
||||
player.openInventory(inv.getInventory());
|
||||
} else if (inv.getInventory().getViewers().isEmpty() && inv.cancelTasksOnClose) {
|
||||
inv.cancelTasks();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDisable(PluginDisableEvent event) {
|
||||
if (event.getPlugin().equals(plugin)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (player.getOpenInventory().getTopInventory().getHolder() instanceof IconInv) {
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory.icons;
|
||||
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv.IconClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Icon {
|
||||
private ItemStack itemStack;
|
||||
private Consumer<IconClickEvent> consumer;
|
||||
|
||||
public Icon(ItemStack itemStack) {
|
||||
this(itemStack, event -> {});
|
||||
}
|
||||
|
||||
public Icon(ItemStack item, Consumer<IconClickEvent> consumer) {
|
||||
this.itemStack = item;
|
||||
this.consumer = consumer;
|
||||
}
|
||||
|
||||
public void run(IconClickEvent e) { consumer.accept(e); }
|
||||
|
||||
public ItemStack getItemStack() { return itemStack; }
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory.icons;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public class IntegerIcon extends StringIcon {
|
||||
public IntegerIcon(EpicVouchers instance, String string, int current, BiConsumer<Player, Integer> consumer) {
|
||||
super(instance, Material.IRON_INGOT, string, "" + current, (player, edited) -> consumer.accept(player, Integer.parseInt(edited)), StringUtils::isNumeric);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory.icons;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.AbstractAnvilGUI;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.utils.Tuple;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import static com.songoda.epicvouchers.libraries.AbstractAnvilGUI.AnvilSlot.INPUT_LEFT;
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
import static org.bukkit.Material.PAPER;
|
||||
|
||||
public class ListEntryIcon extends Icon {
|
||||
public ListEntryIcon(EpicVouchers instance, String entry, BiConsumer<Player, String> onRemove, BiConsumer<Player, Tuple<String, String>> onEdit) {
|
||||
super(new ItemBuilder(PAPER).name(YELLOW + entry).lore(GRAY + "Right click to edit",
|
||||
GRAY + "Left click to remove").build(), event -> {
|
||||
if (event.getClickType() == ClickType.LEFT) {
|
||||
onRemove.accept(event.getPlayer(), entry);
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractAnvilGUI anvilGUI = new AbstractAnvilGUI(instance, event.getPlayer(), anvilEvent -> onEdit.accept(event.getPlayer(), new Tuple<>(entry, anvilEvent.getName())));
|
||||
|
||||
anvilGUI.setSlot(INPUT_LEFT, new ItemBuilder(PAPER).name(entry).build());
|
||||
anvilGUI.open();
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory.icons;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.AbstractAnvilGUI;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
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.function.BiConsumer;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static com.songoda.epicvouchers.libraries.AbstractAnvilGUI.AnvilSlot.INPUT_LEFT;
|
||||
import static com.songoda.epicvouchers.utils.Methods.format;
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.WHITE;
|
||||
import static org.bukkit.Material.SIGN;
|
||||
|
||||
public class StringIcon extends Icon {
|
||||
|
||||
public StringIcon(EpicVouchers instance, String string, String current, BiConsumer<Player, String> consumer) {
|
||||
this(instance, string, current, consumer, s -> true);
|
||||
}
|
||||
|
||||
public StringIcon(EpicVouchers instance, Material material, String string, String current, BiConsumer<Player, String> consumer, Predicate<String> predicate) {
|
||||
this(instance, new ItemBuilder(material).name(ChatColor.YELLOW + string)
|
||||
.lore(GRAY + "Current: " + WHITE + current, GRAY + "Right click to edit", GRAY + "Left click to clear").build(), current, consumer, predicate, false);
|
||||
}
|
||||
|
||||
public StringIcon(EpicVouchers instance, String string, String current, BiConsumer<Player, String> consumer, Predicate<String> predicate) {
|
||||
this(instance, new ItemBuilder(SIGN).name(ChatColor.YELLOW + string)
|
||||
.lore(GRAY + "Current: " + WHITE + current, GRAY + "Right click to edit", GRAY + "Left click to clear").build(), current, consumer, predicate, false);
|
||||
}
|
||||
|
||||
public StringIcon(EpicVouchers instance, String string, String current, BiConsumer<Player, String> consumer, Predicate<String> predicate, boolean noLeft) {
|
||||
this(instance, new ItemBuilder(SIGN).name(ChatColor.YELLOW + string)
|
||||
.lore(GRAY + "Current: " + WHITE + current, GRAY + "Right click to edit", GRAY + "Left click to clear").build(), current, consumer, predicate, noLeft);
|
||||
}
|
||||
|
||||
public StringIcon(EpicVouchers instance, ItemStack itemStack, String current, BiConsumer<Player, String> consumer) {
|
||||
this(instance, itemStack, current, consumer, s -> true, false);
|
||||
}
|
||||
|
||||
public StringIcon(EpicVouchers instance, ItemStack itemStack, String current, BiConsumer<Player, String> consumer, Predicate<String> predicate, boolean noLeft) {
|
||||
super(itemStack, event -> {
|
||||
if (!noLeft && event.getClickType() == ClickType.LEFT) {
|
||||
consumer.accept(event.getPlayer(), "");
|
||||
event.getPlayer().sendMessage(format("&7Successfully cleared&7."));
|
||||
} else {
|
||||
AbstractAnvilGUI anvilGUI = new AbstractAnvilGUI(instance, event.getPlayer(), anvilEvent -> {
|
||||
if (!predicate.test(anvilEvent.getName())) {
|
||||
event.getPlayer().sendMessage(format("&cFailed to set value to: " + anvilEvent.getName()));
|
||||
return;
|
||||
}
|
||||
consumer.accept(event.getPlayer(), anvilEvent.getName());
|
||||
event.getPlayer().sendMessage(format("&7Successfully set to &r{changed}&7.", "{changed}", anvilEvent.getName()));
|
||||
});
|
||||
anvilGUI.setSlot(INPUT_LEFT, new ItemBuilder(SIGN).name(current).build());
|
||||
anvilGUI.open();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory.icons;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.menus.sub.StringListMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class StringListIcon extends Icon {
|
||||
public StringListIcon(EpicVouchers instance, List<String> list, String name, Voucher voucher) {
|
||||
super(new ItemBuilder(Material.BOOK)
|
||||
.name(ChatColor.YELLOW + name)
|
||||
.lore(ChatColor.GRAY + "Click to view")
|
||||
.build(), event -> new StringListMenu(instance, name, list, name, voucher).open(event.getPlayer()));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.songoda.epicvouchers.libraries.inventory.icons;
|
||||
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv.IconClickEvent;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ToggleableIcon extends Icon {
|
||||
private Consumer<IconClickEvent> consumer;
|
||||
|
||||
public ToggleableIcon(String displayname, Consumer<IconClickEvent> consumer, boolean state) {
|
||||
super(new ItemBuilder(Material.PAPER)
|
||||
.name(ChatColor.YELLOW + displayname)
|
||||
.lore(state ? ChatColor.GREEN + "ENABLED" : ChatColor.RED + "DISABLED")
|
||||
.build(), event -> {});
|
||||
this.consumer = consumer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(IconClickEvent event) {
|
||||
consumer.accept(event);
|
||||
}
|
||||
}
|
|
@ -27,7 +27,7 @@ public class PlayerInteractListener implements Listener {
|
|||
return;
|
||||
}
|
||||
|
||||
for (Voucher voucher : instance.getVoucherManager().getVouchers()) {
|
||||
for (Voucher voucher : instance.getVouchers().values()) {
|
||||
Player player = event.getPlayer();
|
||||
if (!player.hasPermission(voucher.getPermission())) {
|
||||
continue;
|
||||
|
@ -35,15 +35,22 @@ public class PlayerInteractListener implements Listener {
|
|||
|
||||
ItemStack item = event.getPlayer().getItemInHand();
|
||||
|
||||
if (item.getType() != voucher.getMaterial() || item.getDurability() != voucher.getData()) {
|
||||
continue;
|
||||
if (voucher.getItemStack() != null) {
|
||||
if(!voucher.getItemStack().isSimilar(item)) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (item.getType() != voucher.getMaterial() || item.getDurability() != voucher.getData()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
if (!item.hasItemMeta() || !meta.hasDisplayName() || !meta.getDisplayName().equals(voucher.getName(true)) || !meta.getLore().equals(voucher.getLore(true))) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
if (!meta.hasDisplayName() || !meta.getDisplayName().equals(voucher.getName(true)) || !meta.getLore().equals(voucher.getLore(true))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
UUID uuid = player.getUniqueId();
|
||||
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.bukkit.ChatColor.*;
|
||||
import static org.bukkit.enchantments.Enchantment.DURABILITY;
|
||||
import static org.bukkit.inventory.ItemFlag.HIDE_ENCHANTS;
|
||||
|
||||
public class BooleanEditor extends FastInv {
|
||||
public BooleanEditor(EpicVouchers instance, Voucher voucher) {
|
||||
super(9, instance.getLocale().getMessage("interface.boolean.title"));
|
||||
|
||||
addItem(0, new ItemBuilder(Material.BARRIER)
|
||||
.name(instance.getLocale().getMessage("interface.editvoucher.backtitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.backlore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> new EditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Glow").lore(
|
||||
voucher.isGlow() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setGlow(!voucher.isGlow()).saveSetting("glow", voucher.isGlow()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Confirm").lore(
|
||||
voucher.isConfirm() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setConfirm(!voucher.isConfirm()).saveSetting("confirm", voucher.isConfirm()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Unbreakable").lore(
|
||||
voucher.isUnbreakable() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setUnbreakable(!voucher.isUnbreakable()).saveSetting("unbreakable", voucher.isUnbreakable()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Hide Attributes").lore(
|
||||
voucher.isHideAttributes() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setHideAttributes(!voucher.isHideAttributes()).saveSetting("hide-attributes", voucher.isHideAttributes()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Remove Item").lore(
|
||||
voucher.isRemoveItem() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setRemoveItem(!voucher.isRemoveItem()).saveSetting("remove-item", voucher.isRemoveItem()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Feed Player").lore(
|
||||
voucher.isFeedPlayer() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setFeedPlayer(!voucher.isFeedPlayer()).saveSetting("feed-player", voucher.isFeedPlayer()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Heal Player").lore(
|
||||
voucher.isHealPlayer() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setHealPlayer(!voucher.isHealPlayer()).saveSetting("heal-player", voucher.isHealPlayer()));
|
||||
|
||||
addItem(new ItemBuilder(Material.PAPER).name(YELLOW + "Smite Effect").lore(
|
||||
voucher.isSmiteEffect() ? GREEN + "ENABLED" : RED + "DISABLED"
|
||||
).build(), event -> voucher.setSmiteEffect(!voucher.isSmiteEffect()).saveSetting("smite-effect", voucher.isSmiteEffect()));
|
||||
|
||||
|
||||
onClick(event -> {
|
||||
if(event.getItem() != null && event.getSlot() != 0) {
|
||||
new BooleanEditor(instance, voucher).open(event.getPlayer());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
|
@ -20,10 +20,7 @@ public class ConfirmMenu extends FastInv {
|
|||
addItem(11, new ItemBuilder(Material.EMERALD)
|
||||
.name(instance.getLocale().getMessage("interface.confirmsettings.confirmitemname"))
|
||||
.lore(instance.getLocale().getMessage("interface.confirmsettings.confirmitemlore"))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> {
|
||||
SoundUtils.playSound(event.getPlayer(), "LEVEL_UP", 1);
|
||||
.addGlow().build(), event -> {
|
||||
event.getPlayer().closeInventory();
|
||||
instance.getVoucherExecutor().redeemVoucher(event.getPlayer(), voucher, event.getPlayer().getItemInHand(), true);
|
||||
});
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.AbstractAnvilGUI;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.songoda.epicvouchers.libraries.AbstractAnvilGUI.AnvilSlot.INPUT_LEFT;
|
||||
import static org.bukkit.Material.NAME_TAG;
|
||||
import static org.bukkit.Material.PAPER;
|
||||
import static org.bukkit.Material.STONE;
|
||||
import static org.bukkit.enchantments.Enchantment.DURABILITY;
|
||||
import static org.bukkit.inventory.ItemFlag.HIDE_ENCHANTS;
|
||||
|
||||
public class EditorMenu extends FastInv {
|
||||
|
||||
public EditorMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(27, instance.getLocale().getMessage("interface.editvoucher.title").replaceAll("%voucher%", voucher.getKey()));
|
||||
|
||||
addItem(13, new ItemBuilder(voucher.toItemStack()).name(Methods.formatText(voucher.getName(true))).build());
|
||||
|
||||
addItem(18, new ItemBuilder(Material.BARRIER)
|
||||
.name(instance.getLocale().getMessage("interface.editvoucher.backtitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.backlore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> new VoucherMenu(instance).open(event.getPlayer()));
|
||||
|
||||
addItem(0, new ItemBuilder(Material.FEATHER)
|
||||
.name(instance.getLocale().getMessage("interface.editvoucher.recivetitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.recivelore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> {
|
||||
SoundUtils.playSound(event.getPlayer(), "LEVEL_UP", 1);
|
||||
event.getPlayer().getInventory().addItem(voucher.toItemStack());
|
||||
String message = instance.getLocale().getMessage("interface.editvoucher.recivemessage").replaceAll("%voucher%", voucher.getName(true));
|
||||
event.getPlayer().sendMessage(message);
|
||||
});
|
||||
|
||||
addItem(8, new ItemBuilder(NAME_TAG)
|
||||
.name(instance.getLocale().getMessage("interface.editvoucher.renametitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.renamelore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> {
|
||||
SoundUtils.playSound(event.getPlayer(), "NOTE_BASS", 1);
|
||||
event.getPlayer().sendMessage(instance.getLocale().getMessage("interface.editvoucher.renamemessage"));
|
||||
AbstractAnvilGUI gui = new AbstractAnvilGUI(instance, event.getPlayer(), anvilEvent -> {
|
||||
voucher.setName(anvilEvent.getName());
|
||||
event.getPlayer().sendMessage(Methods.formatText(instance.getLocale().getMessage("interface.editvoucher.renamefinish", anvilEvent.getName())));
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
instance.saveToFile(voucher);
|
||||
});
|
||||
|
||||
gui.setOnClose((player, inv) -> new EditorMenu(instance, voucher).open(player));
|
||||
gui.setSlot(INPUT_LEFT, voucher.toItemStack());
|
||||
gui.open();
|
||||
});
|
||||
|
||||
addItem(2, new ItemBuilder(STONE)
|
||||
.name(instance.getLocale().getMessage("interface.editvoucher.itemtitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.itemlore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> new SetItemMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
addItem(6, new ItemBuilder(PAPER)
|
||||
.name(instance.getLocale().getMessage("interface.boolean.itemtitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.boolean.itemlore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> new BooleanEditor(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
|
||||
if (instance.getConfig().getBoolean("Interface.Fill Interfaces With Glass")) {
|
||||
ItemStack fillItem = instance.getServerVersion().isServerVersionAtLeast(ServerVersion.V1_13) ? new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE")) :
|
||||
new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7);
|
||||
|
||||
fill(new ItemBuilder(fillItem).name(ChatColor.RESET.toString()).build());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.FastInv;
|
||||
import com.songoda.epicvouchers.menus.sub.SetItemMenu;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import static com.songoda.epicvouchers.utils.Methods.format;
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
import static org.bukkit.Material.BOOK;
|
||||
import static org.bukkit.Material.STONE;
|
||||
|
||||
public class OptionMenu extends FastInv {
|
||||
|
||||
public OptionMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(27, "Options: " + voucher.getKey());
|
||||
|
||||
addItem(13, new ItemBuilder(voucher.toItemStack()).name(format(voucher.getName(true))).build());
|
||||
|
||||
addItem(18, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.addGlow().build(), event -> new VoucherMenu(instance).open(event.getPlayer()));
|
||||
|
||||
addItem(0, new ItemBuilder(Material.FEATHER)
|
||||
.name(format("&6Receive voucher"))
|
||||
.lore(format("&eReceive a copy of the voucher"))
|
||||
.addGlow()
|
||||
.build(), event -> event.getPlayer().getInventory().addItem(voucher.toItemStack()));
|
||||
|
||||
addItem(26, new ItemBuilder(STONE)
|
||||
.name(format("&6Set item"))
|
||||
.lore(format("&eSet the item of your voucher."))
|
||||
.addGlow().build(), event -> new SetItemMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
addItem(8, new ItemBuilder(BOOK)
|
||||
.name(format("&6Change all options"))
|
||||
.lore(format("&eSet the options of your voucher."))
|
||||
.build(), event -> new VoucherEditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
fill(new ItemBuilder(instance.getServerVersion().isServerVersionAtLeast(ServerVersion.V1_13) ?
|
||||
new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE")) :
|
||||
new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7)).name(ChatColor.RESET.toString()).build());
|
||||
}
|
||||
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.bukkit.enchantments.Enchantment.DURABILITY;
|
||||
import static org.bukkit.inventory.ItemFlag.HIDE_ENCHANTS;
|
||||
|
||||
public class SetItemMenu extends FastInv {
|
||||
private final EpicVouchers instance;
|
||||
|
||||
public SetItemMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(27, instance.getLocale().getMessage("interface.setitem.title"));
|
||||
this.instance = instance;
|
||||
|
||||
setDefaultCancel(false);
|
||||
|
||||
ItemStack fillItem = instance.getServerVersion().isServerVersionAtLeast(ServerVersion.V1_13) ? new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE")) :
|
||||
new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7);
|
||||
fill(fillItem, event -> event.setCancelled(true));
|
||||
|
||||
addItem(13, null);
|
||||
|
||||
addItem(18, new ItemBuilder(Material.BARRIER)
|
||||
.name(instance.getLocale().getMessage("interface.editvoucher.backtitle"))
|
||||
.lore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.backlore")))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> {
|
||||
event.setCancelled(true);
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
});
|
||||
|
||||
addItem(26, new ItemBuilder(Material.ANVIL).name(ChatColor.GREEN + "Confirm").build(), event -> {
|
||||
event.setCancelled(true);
|
||||
|
||||
if (event.getInventory().getInventory().getItem(13) == null) {
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack itemStack = event.getInventory().getInventory().getItem(13);
|
||||
|
||||
voucher.setMaterial(itemStack.getType());
|
||||
|
||||
if (itemStack.getDurability() != 0) {
|
||||
voucher.setData(itemStack.getDurability());
|
||||
}
|
||||
|
||||
if (!itemStack.hasItemMeta()) {
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemStack.getItemMeta().hasDisplayName()) {
|
||||
voucher.setName(itemStack.getItemMeta().getDisplayName());
|
||||
}
|
||||
|
||||
if (itemStack.getItemMeta().hasLore()) {
|
||||
voucher.setLore(itemStack.getItemMeta().getLore());
|
||||
}
|
||||
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
instance.saveToFile(voucher);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.Icon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.StringIcon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.StringListIcon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.ToggleableIcon;
|
||||
import com.songoda.epicvouchers.menus.sub.EffectsMenu;
|
||||
import com.songoda.epicvouchers.menus.sub.ParticlesMenu;
|
||||
import com.songoda.epicvouchers.menus.sub.SoundsMenu;
|
||||
import com.songoda.epicvouchers.menus.sub.TitlesMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
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()).saveSetting("glow", voucher.isGlow()), voucher.isGlow()));
|
||||
|
||||
addIcon(1, new ToggleableIcon("Confirm", event -> voucher.setConfirm(!voucher.isConfirm()).saveSetting("confirm", voucher.isConfirm()), voucher.isConfirm()));
|
||||
|
||||
addIcon(2, new ToggleableIcon("Unbreakable", event -> voucher.setUnbreakable(!voucher.isUnbreakable()).saveSetting("unbreakable", voucher.isUnbreakable()), voucher.isUnbreakable()));
|
||||
|
||||
addIcon(3, new ToggleableIcon("Hide Attributes", event -> voucher.setHideAttributes(!voucher.isHideAttributes()).saveSetting("hide-attributes", voucher.isHideAttributes()), voucher.isHideAttributes()));
|
||||
|
||||
addIcon(4, new ToggleableIcon("Remove Item", event -> voucher.setRemoveItem(!voucher.isRemoveItem()).saveSetting("remove-item", voucher.isRemoveItem()), voucher.isRemoveItem()));
|
||||
|
||||
addIcon(5, new ToggleableIcon("Feed Player", event -> voucher.setFeedPlayer(!voucher.isFeedPlayer()).saveSetting("feed-player", voucher.isFeedPlayer()), voucher.isFeedPlayer()));
|
||||
|
||||
addIcon(6, new ToggleableIcon("Heal Player", event -> voucher.setHealPlayer(!voucher.isHealPlayer()).saveSetting("heal-player", voucher.isHealPlayer()), voucher.isHealPlayer()));
|
||||
|
||||
addIcon(7, new ToggleableIcon("Smite Effect", event -> voucher.setSmiteEffect(!voucher.isSmiteEffect()).saveSetting("smite-effect", voucher.isSmiteEffect()), voucher.isSmiteEffect()));
|
||||
|
||||
//Strings
|
||||
|
||||
addIcon(9, new StringIcon(instance, "Permission", voucher.getPermission(), (player, editString) -> {
|
||||
voucher.setPermission(editString).saveSetting("permission", editString);
|
||||
reopen(player);
|
||||
}));
|
||||
|
||||
addIcon(10, new StringIcon(instance, "Actionbar", voucher.getActionBar(), (player, editString) -> {
|
||||
voucher.setActionBar(editString).saveSetting("actionbar", editString);
|
||||
reopen(player);
|
||||
}));
|
||||
|
||||
addIcon(11, new StringIcon(instance, "Material", voucher.getMaterial().toString(), (player, editString) -> {
|
||||
voucher.setMaterial(Material.valueOf(editString)).saveSetting("material", editString);
|
||||
reopen(player);
|
||||
}, string -> !string.isEmpty() && Material.matchMaterial(string) != null, true));
|
||||
|
||||
addIcon(12, new StringIcon(instance, "Name", voucher.getName(false), (player, editString) -> {
|
||||
voucher.setName(editString).saveSetting("name", 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(instance, voucher).open(player);
|
||||
}
|
||||
}
|
|
@ -1,40 +1,59 @@
|
|||
package com.songoda.epicvouchers.menus;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.libraries.AbstractAnvilGUI;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.Icon;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class VoucherMenu extends FastInv {
|
||||
import static com.songoda.epicvouchers.libraries.AbstractAnvilGUI.AnvilSlot.INPUT_LEFT;
|
||||
import static com.songoda.epicvouchers.utils.Methods.format;
|
||||
import static org.bukkit.Material.PAPER;
|
||||
|
||||
public class VoucherMenu extends IconInv {
|
||||
|
||||
public VoucherMenu(EpicVouchers instance) {
|
||||
super(Math.ceil(instance.getVoucherManager().getVouchers().size() / 9.0) > 81 ? 81 : (int) Math.ceil(instance.getVoucherManager().getVouchers().size() / 9.0) * 9,
|
||||
instance.getLocale().getMessage("interface.editor.title"));
|
||||
|
||||
for (Voucher voucher : instance.getVoucherManager().getVouchers()) {
|
||||
ItemBuilder item = new ItemBuilder(voucher.toItemStack());
|
||||
item.name(item.getName() + Methods.formatText(" &b&l[CLICK TO EDIT]"));
|
||||
super((int) (Math.ceil(instance.getVouchers().size() / 9.0) * 9 + (instance.getVouchers().size() % 9 == 0 ? 9 : 0)), "Vouchers");
|
||||
|
||||
for (Voucher voucher : instance.getVouchers().values()) {
|
||||
if (getInventory().firstEmpty() != -1) {
|
||||
addItem(getInventory().firstEmpty(), item.build(), event -> {
|
||||
SoundUtils.playSound(event.getPlayer(), "NOTE_PIANO", 1);
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
});
|
||||
addIcon(getInventory().firstEmpty(), voucher.toItemStack(), event -> new OptionMenu(instance, voucher).open(event.getPlayer()));
|
||||
}
|
||||
}
|
||||
|
||||
if (instance.getConfig().getBoolean("Interface.Fill Interfaces With Glass")) {
|
||||
ItemStack fillItem = instance.getServerVersion().isServerVersionAtLeast(ServerVersion.V1_13) ? new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE")) :
|
||||
new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7);
|
||||
addIcon(getInventory().getSize() - 1, new Icon(new ItemBuilder(PAPER)
|
||||
.name(format("&6New voucher"))
|
||||
.lore(format("&eCreate a new voucher with set id.")).build(), event -> {
|
||||
AbstractAnvilGUI anvilGUI = new AbstractAnvilGUI(instance, event.getPlayer(), anvilEvent -> {
|
||||
if (instance.getVouchers().containsKey(anvilEvent.getName())) {
|
||||
event.getPlayer().sendMessage(format("&cAlready a voucher registered with the id: " + anvilEvent.getName()));
|
||||
new VoucherMenu(instance).open(event.getPlayer());
|
||||
return;
|
||||
}
|
||||
|
||||
fill(new ItemBuilder(fillItem).name(ChatColor.RESET.toString()).build());
|
||||
}
|
||||
Voucher voucher = new Voucher(anvilEvent.getName());
|
||||
voucher.setMaterial(PAPER);
|
||||
voucher.setName("&f" + anvilEvent.getName());
|
||||
|
||||
instance.getVouchers().put(anvilEvent.getName(), voucher);
|
||||
instance.getVouchersFile().getConfig().set("vouchers." + anvilEvent.getName() + ".material", voucher.getMaterial().toString());
|
||||
instance.getVouchersFile().getConfig().set("vouchers." + anvilEvent.getName() + ".name", voucher.getName(false));
|
||||
instance.getVouchersFile().saveConfig();
|
||||
event.getPlayer().sendMessage(format("&7Successfully created voucher with id &r{id}&7.", "{id}", anvilEvent.getName()));
|
||||
new VoucherMenu(instance).open(event.getPlayer());
|
||||
});
|
||||
anvilGUI.setSlot(INPUT_LEFT, new ItemBuilder(PAPER).name("Insert id").build());
|
||||
anvilGUI.open();
|
||||
}));
|
||||
|
||||
fill(new Icon(new ItemBuilder(instance.getServerVersion().isServerVersionAtLeast(ServerVersion.V1_13) ?
|
||||
new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE")) :
|
||||
new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7)).name(ChatColor.RESET.toString()).build()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
package com.songoda.epicvouchers.menus.sub;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.IntegerIcon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.StringIcon;
|
||||
import com.songoda.epicvouchers.menus.VoucherEditorMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
|
||||
public class EffectsMenu extends IconInv {
|
||||
public EffectsMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(9, "Titles");
|
||||
|
||||
addIcon(1, new StringIcon(instance, "Effect", voucher.getEffect(), (player, editString) -> {
|
||||
voucher.setEffect(editString).saveSetting("effects.effect", editString);
|
||||
new EffectsMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(2, new IntegerIcon(instance, "Effect Amplifier", voucher.getEffectAmplifier(), (player, number) -> {
|
||||
voucher.setEffectAmplifier(number).saveSetting("effects.amplifier", number);
|
||||
new EffectsMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(3, new IntegerIcon(instance, "Duration", voucher.getEffectDuration(), (player, number) -> {
|
||||
voucher.setEffectDuration(number).saveSetting("effects.duration", number);
|
||||
new EffectsMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(0, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.build(), event -> new VoucherEditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package com.songoda.epicvouchers.menus.sub;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.IntegerIcon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.StringIcon;
|
||||
import com.songoda.epicvouchers.menus.VoucherEditorMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
|
||||
public class ParticlesMenu extends IconInv {
|
||||
public ParticlesMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(9, "Particles");
|
||||
|
||||
addIcon(1, new StringIcon(instance, "Particle", voucher.getParticle(), (player, editString) -> {
|
||||
voucher.setParticle(editString).saveSetting("particles.particle", editString);
|
||||
new ParticlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(2, new IntegerIcon(instance, "Stay", voucher.getParticleAmount(), (player, number) -> {
|
||||
voucher.setParticleAmount(number).saveSetting("particles.amount", number);
|
||||
new ParticlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(0, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.build(), event -> new VoucherEditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package com.songoda.epicvouchers.menus.sub;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.FastInv;
|
||||
import com.songoda.epicvouchers.menus.OptionMenu;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static com.songoda.epicvouchers.utils.Methods.format;
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
|
||||
public class SetItemMenu extends FastInv {
|
||||
|
||||
public SetItemMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(27, "Set item");
|
||||
|
||||
setDefaultCancel(false);
|
||||
|
||||
fill(new ItemBuilder(instance.getServerVersion().isServerVersionAtLeast(ServerVersion.V1_13) ?
|
||||
new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE")) :
|
||||
new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7))
|
||||
.name(ChatColor.RESET.toString()).build(), event -> event.setCancelled(true));
|
||||
|
||||
addItem(13, null);
|
||||
|
||||
addItem(18, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.addGlow().build(), event -> {
|
||||
event.setCancelled(true);
|
||||
new OptionMenu(instance, voucher).open(event.getPlayer());
|
||||
});
|
||||
|
||||
addItem(26, new ItemBuilder(Material.ANVIL)
|
||||
.name(ChatColor.GREEN + "Confirm")
|
||||
.lore(GRAY + "Left click to save without NBT", GRAY + "Right click to save with NBT")
|
||||
.build(), event -> {
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory().getInventory().getItem(13) == null) {
|
||||
new OptionMenu(instance, voucher).open(event.getPlayer());
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack itemStack = event.getInventory().getInventory().getItem(13);
|
||||
|
||||
if(event.getClickType() == ClickType.RIGHT) {
|
||||
new OptionMenu(instance, voucher).open(event.getPlayer());
|
||||
voucher.setName("");
|
||||
voucher.setLore(null);
|
||||
voucher.setItemStack(itemStack);
|
||||
voucher.saveSetting("itemstack", itemStack);
|
||||
}
|
||||
|
||||
voucher.setMaterial(itemStack.getType());
|
||||
voucher.saveSetting("material", itemStack.getType().toString());
|
||||
|
||||
if (itemStack.getDurability() != 0) {
|
||||
voucher.setData(itemStack.getDurability());
|
||||
}
|
||||
|
||||
if (!itemStack.hasItemMeta()) {
|
||||
new OptionMenu(instance, voucher).open(event.getPlayer());
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemStack.getItemMeta().hasDisplayName()) {
|
||||
voucher.setName(itemStack.getItemMeta().getDisplayName());
|
||||
voucher.saveSetting("name", itemStack.getItemMeta().getDisplayName());
|
||||
}
|
||||
|
||||
if (itemStack.getItemMeta().hasLore()) {
|
||||
voucher.setLore(itemStack.getItemMeta().getLore());
|
||||
voucher.saveSetting("lore", itemStack.getItemMeta().getLore());
|
||||
}
|
||||
|
||||
new OptionMenu(instance, voucher).open(event.getPlayer());
|
||||
});
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package com.songoda.epicvouchers.menus.sub;
|
||||
|
||||
import com.google.common.base.Enums;
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.IntegerIcon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.StringIcon;
|
||||
import com.songoda.epicvouchers.menus.VoucherEditorMenu;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
|
||||
public class SoundsMenu extends IconInv {
|
||||
public SoundsMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(9, "Sound");
|
||||
|
||||
addIcon(1, new StringIcon(instance, "Sound", voucher.getSound(), (player, editString) -> {
|
||||
voucher.setSound(editString).saveSetting("sounds.sound", editString);
|
||||
new SoundsMenu(instance, voucher).open(player);
|
||||
}, string -> Enums.getIfPresent(SoundUtils.class, string).isPresent()));
|
||||
|
||||
addIcon(2, new IntegerIcon(instance, "Pitch", voucher.getSoundPitch(), (player, number) -> {
|
||||
voucher.setSoundPitch(number).saveSetting("sounds.pitch", number);
|
||||
new SoundsMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(0, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.build(), event -> new VoucherEditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package com.songoda.epicvouchers.menus.sub;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.AbstractAnvilGUI;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.ListEntryIcon;
|
||||
import com.songoda.epicvouchers.menus.VoucherEditorMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.songoda.epicvouchers.libraries.AbstractAnvilGUI.AnvilSlot.INPUT_LEFT;
|
||||
import static org.bukkit.ChatColor.*;
|
||||
import static org.bukkit.Material.PAPER;
|
||||
|
||||
public class StringListMenu extends IconInv {
|
||||
|
||||
public StringListMenu(EpicVouchers instance, String key, List<String> list, String toEdit, Voucher voucher) {
|
||||
super((int) ((list.isEmpty() ? 9 : Math.ceil(list.size() / 9.0) * 9) + 9), key);
|
||||
int size = getInventory().getSize();
|
||||
|
||||
addIcon(size - 9, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.build(), event -> new VoucherEditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
addIcon(size - 5, new ItemBuilder(Material.BOOK)
|
||||
.name(YELLOW + "Editing: " + GRAY + toEdit)
|
||||
.lore(list.stream().map(s -> DARK_GRAY + "- " + GRAY + s).collect(Collectors.toList()))
|
||||
.build());
|
||||
|
||||
addIcon(size - 1, new ItemBuilder(PAPER).name(GREEN + "Add to list").build(), event -> {
|
||||
AbstractAnvilGUI anvilGUI = new AbstractAnvilGUI(instance, event.getPlayer(), anvilEvent -> {
|
||||
list.add(anvilEvent.getName());
|
||||
voucher.saveSetting(key.toLowerCase(), list);
|
||||
new StringListMenu(instance, key, list, toEdit, voucher).open(event.getPlayer());
|
||||
});
|
||||
|
||||
anvilGUI.setSlot(INPUT_LEFT, new ItemStack(PAPER));
|
||||
anvilGUI.open();
|
||||
});
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
String entry = list.get(i);
|
||||
addIcon(new ListEntryIcon(instance, entry, (player, removeString) -> {
|
||||
list.remove(removeString);
|
||||
voucher.saveSetting(key.toLowerCase(), list);
|
||||
new StringListMenu(instance, key, list, toEdit, voucher).open(player);
|
||||
}, (player, tuple) -> {
|
||||
list.set(list.indexOf(tuple.x), tuple.y);
|
||||
voucher.saveSetting(key.toLowerCase(), list);
|
||||
new StringListMenu(instance, key, list, toEdit, voucher).open(player);
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.songoda.epicvouchers.menus.sub;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.libraries.ItemBuilder;
|
||||
import com.songoda.epicvouchers.libraries.inventory.IconInv;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.IntegerIcon;
|
||||
import com.songoda.epicvouchers.libraries.inventory.icons.StringIcon;
|
||||
import com.songoda.epicvouchers.menus.VoucherEditorMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import static org.bukkit.ChatColor.GRAY;
|
||||
import static org.bukkit.ChatColor.YELLOW;
|
||||
|
||||
public class TitlesMenu extends IconInv {
|
||||
public TitlesMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(9, "Titles");
|
||||
|
||||
addIcon(1, new StringIcon(instance, "Title", voucher.getTitle(), (player, editString) -> {
|
||||
voucher.setTitle(editString).saveSetting("titles.title", editString);
|
||||
new TitlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(2, new StringIcon(instance, "Subtitle", voucher.getSubTitle(), (player, editString) -> {
|
||||
voucher.setTitle(editString).saveSetting("titles.title", editString);
|
||||
new TitlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(3, new IntegerIcon(instance, "Fade in", voucher.getTitleFadeIn(), (player, number) -> {
|
||||
voucher.setTitleFadeIn(number).saveSetting("titles.fade-in", number);
|
||||
new TitlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(4, new IntegerIcon(instance, "Fade out", voucher.getTitleFadeOut(), (player, number) -> {
|
||||
voucher.setTitleFadeOut(number).saveSetting("titles.fade-out", number);
|
||||
new TitlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(5, new IntegerIcon(instance, "Stay", voucher.getTitleStay(), (player, number) -> {
|
||||
voucher.setTitleStay(number).saveSetting("titles.stay", number);
|
||||
new TitlesMenu(instance, voucher).open(player);
|
||||
}));
|
||||
|
||||
addIcon(0, new ItemBuilder(Material.BARRIER)
|
||||
.name(YELLOW + "Return")
|
||||
.lore(GRAY + "Return to the editor")
|
||||
.build(), event -> new VoucherEditorMenu(instance, voucher).open(event.getPlayer()));
|
||||
|
||||
}
|
||||
}
|
|
@ -2,20 +2,18 @@ package com.songoda.epicvouchers.utils;
|
|||
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class Methods {
|
||||
|
||||
public static String formatText(String text) {
|
||||
public static String format(String text) {
|
||||
if (text == null || text.equals(""))
|
||||
return "";
|
||||
return formatText(text, false);
|
||||
return format(text, "", null);
|
||||
}
|
||||
|
||||
public static String formatText(String text, boolean cap) {
|
||||
if (text == null || text.equals(""))
|
||||
return "";
|
||||
if (cap)
|
||||
text = text.substring(0, 1).toUpperCase() + text.substring(1);
|
||||
return ChatColor.translateAlternateColorCodes('&', text);
|
||||
public static String format(String text, String toReplace, @Nullable Object object) {
|
||||
return ChatColor.translateAlternateColorCodes('&', text).replace(toReplace, object == null ? "" : object.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -216,7 +216,7 @@ public enum SoundUtils {
|
|||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
System.out.println(Methods.formatText("&cFailed to find the sound enum called " + cached + "."));
|
||||
System.out.println(Methods.format("&cFailed to find the sound enum called " + cached + "."));
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package com.songoda.epicvouchers.utils;
|
||||
|
||||
public class Tuple<X, Y> {
|
||||
public final X x;
|
||||
public final Y y;
|
||||
public Tuple(X x, Y y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ import com.songoda.epicvouchers.utils.Methods;
|
|||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
|
@ -14,25 +15,29 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.songoda.epicvouchers.utils.Methods.format;
|
||||
import static org.bukkit.Material.PAPER;
|
||||
|
||||
@Accessors(chain = true)
|
||||
public class Voucher {
|
||||
|
||||
@Getter private final String key;
|
||||
@Getter @Setter private String permission;
|
||||
@Getter @Setter private Material material = Material.COOKIE;
|
||||
@Getter @Setter private String permission = "";
|
||||
@Getter @Setter private Material material = PAPER;
|
||||
@Getter @Setter private short data = 0;
|
||||
@Getter @Setter private int cooldown = 0;
|
||||
@Setter private String name;
|
||||
@Setter private List<String> lore = new ArrayList<>();
|
||||
@Getter @Setter private boolean glow = true;
|
||||
@Getter @Setter private boolean confirm = true;
|
||||
@Getter @Setter private boolean unbreakable = true;
|
||||
@Getter @Setter private boolean unbreakable = false;
|
||||
@Getter @Setter private boolean hideAttributes = false;
|
||||
@Getter @Setter private boolean removeItem = true;
|
||||
@Getter @Setter private boolean feedPlayer = true;
|
||||
@Getter @Setter private boolean healPlayer = true;
|
||||
@Getter @Setter private boolean smiteEffect = true;
|
||||
@Getter @Setter private boolean feedPlayer = false;
|
||||
@Getter @Setter private boolean healPlayer = false;
|
||||
@Getter @Setter private boolean smiteEffect = false;
|
||||
|
||||
@Setter private List<String> broadcasts = new ArrayList<>();
|
||||
@Setter private List<String> messages = new ArrayList<>();
|
||||
|
@ -40,21 +45,23 @@ public class Voucher {
|
|||
|
||||
@Setter private String actionBar;
|
||||
|
||||
@Setter private String title = "&6Thank you.";
|
||||
@Setter private String subTitle = "&eYou have redeemed the voucher %voucher%.";
|
||||
@Getter @Setter private int titleFadeIn = 10;
|
||||
@Getter @Setter private int titleStay = 50;
|
||||
@Getter @Setter private int titleFadeOut = 10;
|
||||
@Setter private String title = "";
|
||||
@Setter private String subTitle = "";
|
||||
@Getter @Setter private int titleFadeIn = 0;
|
||||
@Getter @Setter private int titleStay = 0;
|
||||
@Getter @Setter private int titleFadeOut = 0;
|
||||
|
||||
@Getter @Setter private String sound = "NOTE_PLING";
|
||||
@Getter @Setter private int soundPitch = 1;
|
||||
@Getter @Setter private String sound = "";
|
||||
@Getter @Setter private int soundPitch = 0;
|
||||
|
||||
@Getter @Setter private String particle = "FLAME";
|
||||
@Getter @Setter private int particleAmount = 100;
|
||||
@Getter @Setter private String particle = "";
|
||||
@Getter @Setter private int particleAmount = 0;
|
||||
|
||||
@Getter @Setter private String effect = "SPEED";
|
||||
@Getter @Setter private int effectAmplifer = 2;
|
||||
@Getter @Setter private int effectDuration = 10;
|
||||
@Getter @Setter private String effect = "";
|
||||
@Getter @Setter private int effectAmplifier = 0;
|
||||
@Getter @Setter private int effectDuration = 0;
|
||||
|
||||
@Getter @Setter private ItemStack itemStack;
|
||||
|
||||
public Voucher(String key) {
|
||||
this.key = key;
|
||||
|
@ -65,19 +72,30 @@ public class Voucher {
|
|||
}
|
||||
|
||||
public ItemStack toItemStack(int amount) {
|
||||
ItemStack item = new ItemStack(material, amount, data);
|
||||
ItemStack item = itemStack == null ? new ItemStack(material, amount, data) : itemStack;
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(Methods.formatText(name));
|
||||
|
||||
if(meta == null) {
|
||||
meta = Bukkit.getItemFactory().getItemMeta(material);
|
||||
}
|
||||
|
||||
if(!name.isEmpty()) {
|
||||
meta.setDisplayName(format(name));
|
||||
}
|
||||
|
||||
if (lore != null) {
|
||||
meta.setLore(getLore(true));
|
||||
}
|
||||
|
||||
if (glow) {
|
||||
meta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
}
|
||||
|
||||
if (unbreakable) {
|
||||
meta.spigot().setUnbreakable(true);
|
||||
}
|
||||
|
||||
if (hideAttributes) {
|
||||
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||
meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
|
||||
|
@ -87,35 +105,19 @@ public class Voucher {
|
|||
}
|
||||
|
||||
public String getName(boolean applyFormatting) {
|
||||
if (!applyFormatting) return name;
|
||||
return Methods.formatText(name);
|
||||
return applyFormatting ? format(name) : name;
|
||||
}
|
||||
|
||||
public List<String> getLore(boolean applyFormatting) {
|
||||
if (!applyFormatting) return lore;
|
||||
List<String> itemLore = new ArrayList<>();
|
||||
for (String line : lore) {
|
||||
itemLore.add(Methods.formatText(line));
|
||||
}
|
||||
return itemLore;
|
||||
return applyFormatting ? lore.stream().map(Methods::format).collect(Collectors.toList()) : lore;
|
||||
}
|
||||
|
||||
public List<String> getBroadcasts(boolean applyFormatting) {
|
||||
if (!applyFormatting) return broadcasts;
|
||||
List<String> itemBroadcasts = new ArrayList<>();
|
||||
for (String line : broadcasts) {
|
||||
itemBroadcasts.add(Methods.formatText(line));
|
||||
}
|
||||
return itemBroadcasts;
|
||||
return applyFormatting ? broadcasts.stream().map(Methods::format).collect(Collectors.toList()) : broadcasts;
|
||||
}
|
||||
|
||||
public List<String> getMessages(boolean applyFormatting) {
|
||||
if (!applyFormatting) return messages;
|
||||
List<String> itemMessages = new ArrayList<>();
|
||||
for (String line : messages) {
|
||||
itemMessages.add(Methods.formatText(line));
|
||||
}
|
||||
return itemMessages;
|
||||
return applyFormatting ? messages.stream().map(Methods::format).collect(Collectors.toList()) : messages;
|
||||
}
|
||||
|
||||
public void saveSetting(String key, Object value) {
|
||||
|
@ -130,15 +132,15 @@ public class Voucher {
|
|||
}
|
||||
|
||||
public String getActionBar() {
|
||||
return Methods.formatText(actionBar);
|
||||
return format(actionBar);
|
||||
}
|
||||
|
||||
public String getSubTitle() {
|
||||
return Methods.formatText(subTitle);
|
||||
return format(subTitle);
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return Methods.formatText(title);
|
||||
return format(title);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.songoda.epicvouchers.EpicVouchers;
|
|||
import com.songoda.epicvouchers.events.VoucherRedeemEvent;
|
||||
import com.songoda.epicvouchers.libraries.Bountiful;
|
||||
import com.songoda.epicvouchers.listeners.PlayerCommandListener;
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -109,12 +110,12 @@ public class VoucherExecutor {
|
|||
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command);
|
||||
}
|
||||
}
|
||||
if(voucher.getActionBar() != null &&!voucher.getActionBar().isEmpty()) {
|
||||
if (voucher.getActionBar() != null && !voucher.getActionBar().isEmpty()) {
|
||||
String actionbar = voucher.getActionBar().replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(true));
|
||||
Bountiful.sendActionBar(player, actionbar);
|
||||
}
|
||||
|
||||
if(voucher.getTitle() != null &&!voucher.getTitle().isEmpty()) {
|
||||
if (voucher.getTitle() != null && !voucher.getTitle().isEmpty()) {
|
||||
String title = voucher.getTitle().replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(true));
|
||||
String subtitle = voucher.getSubTitle().replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(true));
|
||||
|
||||
|
@ -125,7 +126,7 @@ public class VoucherExecutor {
|
|||
Bountiful.sendTitle(player, fadein, stay, fadeout, title, subtitle);
|
||||
}
|
||||
|
||||
if(voucher.getSound() != null && !voucher.getSound().isEmpty()) {
|
||||
if (voucher.getSound() != null && !voucher.getSound().isEmpty()) {
|
||||
String sound = voucher.getSound();
|
||||
int pitch = voucher.getSoundPitch();
|
||||
SoundUtils.playSound(player, sound, pitch);
|
||||
|
@ -141,20 +142,20 @@ public class VoucherExecutor {
|
|||
String effect = voucher.getEffect();
|
||||
|
||||
if (effect != null && !effect.isEmpty()) {
|
||||
int amplifier = voucher.getEffectAmplifer();
|
||||
int amplifier = voucher.getEffectAmplifier();
|
||||
int duration = voucher.getEffectDuration() * 20;
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.getByName(effect), duration, amplifier));
|
||||
}
|
||||
|
||||
instance.getLogger().log(Level.INFO, Methods.formatText("&f" + player.getName() + " has successfully redeemed the voucher " + voucher.getKey() + "."));
|
||||
instance.getLogger().log(Level.INFO, Methods.format("&f" + player.getName() + " has successfully redeemed the voucher " + voucher.getKey() + "."));
|
||||
instance.getConnections().saveRedeem(player, voucher.getName(true));
|
||||
} else {
|
||||
instance.getLogger().log(Level.WARNING, Methods.formatText("&c" + player.getName() + " has failed to duplicate the voucher " + voucher.getKey() + "."));
|
||||
instance.getLogger().log(Level.WARNING, Methods.format("&c" + player.getName() + " has failed to duplicate the voucher " + voucher.getKey() + "."));
|
||||
}
|
||||
} catch (Exception error) {
|
||||
error.printStackTrace();
|
||||
instance.getLogger().log(Level.SEVERE, Methods.formatText("&cFailed to redeem the voucher " + voucher.getKey() + " for the player " + player.getName() + "."));
|
||||
// Debugger.runReport(error);
|
||||
instance.getLogger().log(Level.SEVERE, Methods.format("&cFailed to redeem the voucher " + voucher.getKey() + " for the player " + player.getName() + "."));
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
package com.songoda.epicvouchers.voucher;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class VoucherManager {
|
||||
|
||||
private final Map<String, Voucher> registeredVouchers = new HashMap<>();
|
||||
|
||||
public void addVoucher(String name, Voucher voucher) {
|
||||
registeredVouchers.put(name, voucher);
|
||||
}
|
||||
|
||||
public Voucher getVoucher(String name) {
|
||||
for (Voucher voucher : registeredVouchers.values()) {
|
||||
if (voucher.getKey().equalsIgnoreCase(name.trim())) return voucher;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<Voucher> getVouchers() {
|
||||
return new ArrayList<>(registeredVouchers.values());
|
||||
}
|
||||
|
||||
}
|
|
@ -9,25 +9,6 @@ interface.confirmsettings.confirmitemname= "&2&lREDEEM"
|
|||
interface.confirmsettings.confirmitemlore= "&aClick here if you want to confirm your redeem."
|
||||
interface.confirmsettings.cancelitemname= "&4&lCANCEL"
|
||||
interface.confirmsettings.cancelitemlore= "&cClick here if you want to cancel your redeem."
|
||||
interface.setitem.title= "&6Set item"
|
||||
interface.boolean.title= "&6Edit booleans"
|
||||
interface.editor.title= "&6Editor"
|
||||
interface.editvoucher.title= "&6Editor [&e%voucher%&6]";
|
||||
interface.editvoucher.backtitle= "&4Return";
|
||||
interface.editvoucher.backlore= "&cReturn to the main menu of the editor."
|
||||
interface.editvoucher.recivetitle= "&2Receive"
|
||||
interface.editvoucher.recivelore= "&aReceive a clone item of this voucher."
|
||||
interface.editvoucher.recivemessage= "&7You have received the voucher &6%voucher%&7."
|
||||
interface.editvoucher.renametitle= "&6Rename"
|
||||
interface.editvoucher.renamelore= "&eRename the display name of the voucher."
|
||||
interface.editvoucher.renamemessage= "&7Please enter the name that this voucher should be renamed to."
|
||||
interface.editvoucher.renamefinish= "&7Successfully renamed the voucher to &r%renamed%&7."
|
||||
|
||||
interface.editvoucher.itemtitle= "&6Set item"
|
||||
interface.editvoucher.itemlore= "&eSet the item of your voucher."
|
||||
|
||||
interface.boolean.itemlore= "&eSet boolean values."
|
||||
interface.boolean.itemtitle= "&eEdit the boolean values of your voucher."
|
||||
|
||||
#Command Messages
|
||||
|
||||
|
@ -35,7 +16,7 @@ command.error.noplayer= "&7That user either does not exist or is not online";
|
|||
command.error.novoucher= "&cThat voucher does not exist.";
|
||||
command.error.notexist= "&7The command you entered does not exist or is spelt incorrectly."
|
||||
command.error.notnumber= "&7Failed to parse that number into a valid amount."
|
||||
command.reload.success= "&7Config Reloaded"
|
||||
command.reload.success= "&7Reloaded all config files and vouchers."
|
||||
command.give.send= "&7You have received the voucher &6%voucher% &7(&6x%amount%&7)."
|
||||
command.give.receive= "&7You have given &6%player% &7the voucher &6%voucher% &7(&6x%amount%&7)."
|
||||
command.force.send= "&7You have forced &6%player% &7to redeem the voucher &6%voucher% &7(&6x%amount%&7).";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
name: EpicVouchers
|
||||
main: com.songoda.epicvouchers.EpicVouchers
|
||||
version: 1.0.9
|
||||
version: ${project.version}
|
||||
author: Songoda
|
||||
website: https://songoda.host/epicvouchers
|
||||
description: Enhance your server with awesome customizable vouchers with a lot of features.
|
||||
|
|
Loading…
Reference in New Issue