Recoded pretty much everything and fixed the editor.
Closes SD-1024 and SD-696
This commit is contained in:
parent
ac1ff21e02
commit
c45d0b9a99
119
pom.xml
119
pom.xml
|
@ -24,132 +24,33 @@
|
|||
</resources>
|
||||
<sourceDirectory>src/main/java</sourceDirectory>
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>private</id>
|
||||
<url>http://repo.songoda.com/repository/private</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.13.1</version>
|
||||
<version>1.13.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
<artifactId>arconix</artifactId>
|
||||
<version>LATEST</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org</groupId>
|
||||
<artifactId>kingdoms</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.milkbowl</groupId>
|
||||
<artifactId>vault</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.ryanhamshire</groupId>
|
||||
<artifactId>GriefPrevention</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q</groupId>
|
||||
<artifactId>worldedit</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q</groupId>
|
||||
<artifactId>worldguard</artifactId>
|
||||
<version>7.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com</groupId>
|
||||
<artifactId>plotsquared</artifactId>
|
||||
<version>RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.palmergames.bukkit</groupId>
|
||||
<artifactId>towny</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.wasteofplastic</groupId>
|
||||
<artifactId>askyblock</artifactId>
|
||||
<version>3.0.6.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>us.talabrek</groupId>
|
||||
<artifactId>ultimateskyblock</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.markeh</groupId>
|
||||
<artifactId>factionsframework</artifactId>
|
||||
<version>1.2.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>br.net.fabiozumbi12</groupId>
|
||||
<artifactId>RedProtect</artifactId>
|
||||
<version>7.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
<artifactId>epicspawners</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.gmail.nossr50</groupId>
|
||||
<artifactId>mcmmo</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.gamingmesh</groupId>
|
||||
<artifactId>jobs</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.botsko</groupId>
|
||||
<artifactId>prism</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.diddiz</groupId>
|
||||
<artifactId>logblock</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net</groupId>
|
||||
<artifactId>coreprotect</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>uk.antiperson</groupId>
|
||||
<artifactId>stackmob</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sothatsit</groupId>
|
||||
<artifactId>blockstore</artifactId>
|
||||
<version>LATEST</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.black_ixx</groupId>
|
||||
<artifactId>playerpoints</artifactId>
|
||||
<version>2.1.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xyz.wildseries</groupId>
|
||||
<artifactId>wildstacker</artifactId>
|
||||
<version>b6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.clip</groupId>
|
||||
<artifactId>placeholderapi</artifactId>
|
||||
<version>2.5.1</version>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -2,19 +2,14 @@ package com.songoda.epicvouchers;
|
|||
|
||||
import com.songoda.epicvouchers.command.CommandManager;
|
||||
import com.songoda.epicvouchers.handlers.Connections;
|
||||
import com.songoda.epicvouchers.handlers.PreventHacks;
|
||||
import com.songoda.epicvouchers.inventory.Confirmation;
|
||||
import com.songoda.epicvouchers.inventory.VoucherEditor;
|
||||
import com.songoda.epicvouchers.liberaries.Bountiful;
|
||||
import com.songoda.epicvouchers.utils.ConfigWrapper;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.ServerVersion;
|
||||
import com.songoda.epicvouchers.utils.SettingsManager;
|
||||
import com.songoda.epicvouchers.voucher.ClickListener;
|
||||
import com.songoda.epicvouchers.voucher.Cooldowns;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import com.songoda.epicvouchers.voucher.VoucherManager;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import com.songoda.epicvouchers.libraries.Bountiful;
|
||||
import com.songoda.epicvouchers.libraries.FastInv;
|
||||
import com.songoda.epicvouchers.listeners.ChatListener;
|
||||
import com.songoda.epicvouchers.listeners.PlayerCommandListener;
|
||||
import com.songoda.epicvouchers.listeners.PlayerInteractListener;
|
||||
import com.songoda.epicvouchers.utils.*;
|
||||
import com.songoda.epicvouchers.voucher.*;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
|
@ -26,29 +21,21 @@ import java.io.File;
|
|||
|
||||
public class EpicVouchers extends JavaPlugin {
|
||||
|
||||
private static EpicVouchers INSTANCE;
|
||||
private ConsoleCommandSender console;
|
||||
private CommandManager commandManager;
|
||||
private References references;
|
||||
private Locale locale;
|
||||
private VoucherEditor voucherEditor;
|
||||
private Confirmation confirmation;
|
||||
private VoucherManager voucherManager;
|
||||
private Connections connections;
|
||||
private Cooldowns cooldowns;
|
||||
@Getter private CommandManager commandManager;
|
||||
@Getter private Locale locale;
|
||||
@Getter private VoucherManager voucherManager;
|
||||
@Getter private Connections connections;
|
||||
@Getter private CoolDownManager cooldowns;
|
||||
@Getter private VoucherExecutor voucherExecutor;
|
||||
private SettingsManager settingsManager;
|
||||
|
||||
private ConfigWrapper vouchersFile = new ConfigWrapper(this, "", "vouchers.yml");
|
||||
|
||||
private ServerVersion serverVersion = ServerVersion.fromPackageName(Bukkit.getServer().getClass().getPackage().getName());
|
||||
|
||||
public static EpicVouchers getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
@Getter private final ServerVersion serverVersion = ServerVersion.fromPackageName(Bukkit.getServer().getClass().getPackage().getName());
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
INSTANCE = this;
|
||||
console = this.getServer().getConsoleSender();
|
||||
console.sendMessage(Methods.formatText("&a============================="));
|
||||
console.sendMessage(Methods.formatText("&7EpicVouchers " + this.getDescription().getVersion() + " by &5Brianna <3&7!"));
|
||||
|
@ -60,29 +47,29 @@ public class EpicVouchers extends JavaPlugin {
|
|||
Locale.saveDefaultLocale("en_US");
|
||||
this.locale = Locale.getLocale(getConfig().getString("Locale", "en_US"));
|
||||
|
||||
FastInv.init(this);
|
||||
Debugger.init(this);
|
||||
|
||||
|
||||
this.settingsManager = new SettingsManager(this);
|
||||
this.settingsManager.updateSettings();
|
||||
getConfig().options().copyDefaults(true);
|
||||
saveConfig();
|
||||
|
||||
this.references = new References();
|
||||
this.voucherEditor = new VoucherEditor(this);
|
||||
this.commandManager = new CommandManager(this);
|
||||
this.confirmation = new Confirmation(this);
|
||||
this.voucherManager = new VoucherManager();
|
||||
this.connections = new Connections(this);
|
||||
this.cooldowns = new Cooldowns();
|
||||
this.cooldowns = new CoolDownManager(this);
|
||||
this.voucherExecutor = new VoucherExecutor(this);
|
||||
|
||||
PluginManager manager = Bukkit.getServer().getPluginManager();
|
||||
manager.registerEvents(new ClickListener(this), EpicVouchers.getInstance());
|
||||
manager.registerEvents(voucherEditor, EpicVouchers.getInstance());
|
||||
manager.registerEvents(new Confirmation(this), EpicVouchers.getInstance());
|
||||
manager.registerEvents(new PreventHacks(), EpicVouchers.getInstance());
|
||||
manager.registerEvents(new PlayerInteractListener(this), this);
|
||||
manager.registerEvents(new PlayerCommandListener(), this);
|
||||
manager.registerEvents(new ChatListener(this), this);
|
||||
|
||||
File folder = getDataFolder();
|
||||
File voucherfile = new File(folder, "vouchers.yml");
|
||||
if (!voucherfile.exists()) {
|
||||
File voucherFile = new File(folder, "vouchers.yml");
|
||||
if (!voucherFile.exists()) {
|
||||
saveResource("vouchers.yml", true);
|
||||
}
|
||||
|
||||
|
@ -183,7 +170,6 @@ public class EpicVouchers extends JavaPlugin {
|
|||
this.vouchersFile = new ConfigWrapper(this, "", "vouchers.yml");
|
||||
loadVouchersFromFile();
|
||||
locale.reloadMessages();
|
||||
references = new References();
|
||||
reloadConfig();
|
||||
saveConfig();
|
||||
}
|
||||
|
@ -200,52 +186,4 @@ public class EpicVouchers extends JavaPlugin {
|
|||
|
||||
}
|
||||
|
||||
public ServerVersion getServerVersion() {
|
||||
return serverVersion;
|
||||
}
|
||||
|
||||
public boolean isServerVersion(ServerVersion version) {
|
||||
return serverVersion == version;
|
||||
}
|
||||
|
||||
public boolean isServerVersion(ServerVersion... versions) {
|
||||
return ArrayUtils.contains(versions, serverVersion);
|
||||
}
|
||||
|
||||
public boolean isServerVersionAtLeast(ServerVersion version) {
|
||||
return serverVersion.ordinal() >= version.ordinal();
|
||||
}
|
||||
|
||||
public Locale getLocale() {
|
||||
return locale;
|
||||
}
|
||||
|
||||
public References getReferences() {
|
||||
return references;
|
||||
}
|
||||
|
||||
public Confirmation getConfirmation() {
|
||||
return confirmation;
|
||||
}
|
||||
|
||||
public CommandManager getCommandManager() {
|
||||
return commandManager;
|
||||
}
|
||||
|
||||
public VoucherEditor getVoucherEditor() {
|
||||
return voucherEditor;
|
||||
}
|
||||
|
||||
public VoucherManager getVoucherManager() {
|
||||
return voucherManager;
|
||||
}
|
||||
|
||||
public Cooldowns getCooldowns() {
|
||||
return cooldowns;
|
||||
}
|
||||
|
||||
public Connections getConnections() {
|
||||
return connections;
|
||||
}
|
||||
|
||||
}
|
|
@ -34,6 +34,7 @@ public class Locale {
|
|||
|
||||
private final File file;
|
||||
private final String name, region;
|
||||
private final String prefix;
|
||||
|
||||
private Locale(String name, String region) {
|
||||
if (plugin == null)
|
||||
|
@ -44,6 +45,7 @@ public class Locale {
|
|||
|
||||
String fileName = name + "_" + region + FILE_EXTENSION;
|
||||
this.file = new File(localeFolder, fileName);
|
||||
this.prefix = getMessage("general.nametag.prefix") + " ";
|
||||
|
||||
if (this.reloadMessages()) return;
|
||||
|
||||
|
@ -314,7 +316,7 @@ public class Locale {
|
|||
public String getMessage(String node, Object... args) {
|
||||
String message = getMessage(node);
|
||||
for (Object arg : args) {
|
||||
message = message.replaceFirst("\\%.*?\\%", arg.toString());
|
||||
message = message.replaceFirst("%.*?%", arg.toString());
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
@ -372,4 +374,7 @@ public class Locale {
|
|||
return true;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package com.songoda.epicvouchers;
|
||||
|
||||
public class References {
|
||||
|
||||
private String prefix;
|
||||
|
||||
public References() {
|
||||
prefix = EpicVouchers.getInstance().getLocale().getMessage("general.nametag.prefix") + " ";
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return this.prefix;
|
||||
}
|
||||
}
|
|
@ -14,9 +14,9 @@ import java.util.List;
|
|||
|
||||
public class CommandManager implements CommandExecutor {
|
||||
|
||||
private EpicVouchers instance;
|
||||
private final EpicVouchers instance;
|
||||
|
||||
private List<AbstractCommand> commands = new ArrayList<>();
|
||||
private final List<AbstractCommand> commands = new ArrayList<>();
|
||||
|
||||
public CommandManager(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
|
@ -53,7 +53,7 @@ public class CommandManager implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
}
|
||||
commandSender.sendMessage(instance.getReferences().getPrefix() + Methods.formatText(instance.getLocale().getMessage("command.error.notexist")));
|
||||
commandSender.sendMessage(instance.getLocale().getPrefix() + Methods.formatText(instance.getLocale().getMessage("command.error.notexist")));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -69,12 +69,12 @@ public class CommandManager implements CommandExecutor {
|
|||
return;
|
||||
}
|
||||
if (returnType == AbstractCommand.ReturnType.SYNTAX_ERROR) {
|
||||
sender.sendMessage(instance.getReferences().getPrefix() + Methods.formatText("&cInvalid Syntax!"));
|
||||
sender.sendMessage(instance.getReferences().getPrefix() + Methods.formatText("&7The valid syntax is: &6" + command.getSyntax() + "&7."));
|
||||
sender.sendMessage(instance.getLocale().getPrefix() + Methods.formatText("&cInvalid Syntax!"));
|
||||
sender.sendMessage(instance.getLocale().getPrefix() + Methods.formatText("&7The valid syntax is: &6" + command.getSyntax() + "&7."));
|
||||
}
|
||||
return;
|
||||
}
|
||||
sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("event.general.nopermission"));
|
||||
sender.sendMessage(instance.getLocale().getPrefix() + instance.getLocale().getMessage("event.general.nopermission"));
|
||||
}
|
||||
|
||||
public List<AbstractCommand> getCommands() {
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.songoda.epicvouchers.command.commands;
|
|||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.command.AbstractCommand;
|
||||
import com.songoda.epicvouchers.menus.VoucherMenu;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
@ -16,7 +17,7 @@ public class CommandEditor extends AbstractCommand {
|
|||
if (args.length != 1) return ReturnType.SYNTAX_ERROR;
|
||||
|
||||
instance.reload();
|
||||
instance.getVoucherEditor().openMenu((Player) sender);
|
||||
new VoucherMenu(instance).open((Player) sender);
|
||||
return ReturnType.SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ public class CommandEpicVouchers extends AbstractCommand {
|
|||
@Override
|
||||
protected ReturnType runCommand(EpicVouchers instance, CommandSender sender, String... args) {
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(Methods.formatText(instance.getReferences().getPrefix() + "&7Version " + instance.getDescription().getVersion() + " Created with <3 by &5&l&oBrianna"));
|
||||
sender.sendMessage(Methods.formatText(instance.getLocale().getPrefix() + "&7Version " + instance.getDescription().getVersion() + " Created with <3 by &5&l&oBrianna"));
|
||||
|
||||
for (AbstractCommand command : instance.getCommandManager().getCommands()) {
|
||||
if (command.getPermissionNode() == null || sender.hasPermission(command.getPermissionNode())) {
|
||||
|
|
|
@ -5,7 +5,6 @@ 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 com.songoda.epicvouchers.voucher.VoucherExecutor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -42,7 +41,7 @@ public class CommandForce extends AbstractCommand {
|
|||
return ReturnType.FAILURE;
|
||||
}
|
||||
for (int times = 0; times < amount; times++) {
|
||||
VoucherExecutor.redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
instance.getVoucherExecutor().redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +54,7 @@ public class CommandForce extends AbstractCommand {
|
|||
}
|
||||
output = player.getName();
|
||||
for (int times = 0; times < amount; times++) {
|
||||
VoucherExecutor.redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
instance.getVoucherExecutor().redeemVoucher(player, voucher, player.getItemInHand(), false);
|
||||
}
|
||||
}
|
||||
String message = instance.getLocale().getMessage("command.force.send", output, voucher.getName(true), String.valueOf(amount));
|
||||
|
|
|
@ -10,10 +10,10 @@ public class ForceRedeemEvent extends Event implements Cancellable {
|
|||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private String voucher;
|
||||
private int amount;
|
||||
private CommandSender sender;
|
||||
private final Player player;
|
||||
private final String voucher;
|
||||
private final int amount;
|
||||
private final CommandSender sender;
|
||||
private boolean cancelled;
|
||||
|
||||
public ForceRedeemEvent(Player player, String voucher, int amount, CommandSender sender) {
|
||||
|
|
|
@ -11,11 +11,11 @@ public class VoucherReceiveEvent extends Event implements Cancellable {
|
|||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private String voucher;
|
||||
private ItemStack item;
|
||||
private int amount;
|
||||
private CommandSender sender;
|
||||
private final Player player;
|
||||
private final String voucher;
|
||||
private final ItemStack item;
|
||||
private final int amount;
|
||||
private final CommandSender sender;
|
||||
private boolean cancelled;
|
||||
|
||||
public VoucherReceiveEvent(Player player, String voucher, ItemStack item, int amount, CommandSender sender) {
|
||||
|
|
|
@ -10,10 +10,10 @@ public class VoucherRedeemEvent extends Event implements Cancellable {
|
|||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private String voucher;
|
||||
private ItemStack item;
|
||||
private boolean manual;
|
||||
private final Player player;
|
||||
private final String voucher;
|
||||
private final ItemStack item;
|
||||
private final boolean manual;
|
||||
private boolean cancelled;
|
||||
|
||||
public VoucherRedeemEvent(Player player, String voucher, ItemStack item, boolean manual) {
|
||||
|
|
|
@ -9,7 +9,7 @@ import java.sql.*;
|
|||
|
||||
public class Connections {
|
||||
|
||||
private EpicVouchers instance;
|
||||
private final EpicVouchers instance;
|
||||
private Connection connection;
|
||||
|
||||
public Connections(EpicVouchers instance) {
|
||||
|
|
|
@ -1,114 +0,0 @@
|
|||
package com.songoda.epicvouchers.inventory;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import com.songoda.epicvouchers.voucher.VoucherExecutor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Confirmation implements Listener {
|
||||
|
||||
private EpicVouchers instance;
|
||||
|
||||
private static HashMap<UUID, Voucher> vouchercache = new HashMap<>();
|
||||
private static HashMap<UUID, ItemStack> itemcache = new HashMap<>();
|
||||
|
||||
public Confirmation(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public void confirmVoucher(Player player, Voucher voucher, ItemStack item) {
|
||||
Inventory confirmmenu = Bukkit.createInventory(null, 27, instance.getLocale().getMessage("interface.confirmsettings.title"));
|
||||
SoundUtils.playSound(player, "NOTE_PIANO", 1);
|
||||
ItemStack confirmitem = new ItemStack(Material.EMERALD, 1, (short) 0);
|
||||
ItemMeta confirmitemmeta = confirmitem.getItemMeta();
|
||||
confirmitemmeta.setDisplayName(instance.getLocale().getMessage("interface.confirmsettings.confirmitemname"));
|
||||
confirmitemmeta.setLore(Arrays.asList(instance.getLocale().getMessage("interface.confirmsettings.confirmitemlore")));
|
||||
|
||||
confirmitemmeta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
confirmitemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
|
||||
confirmitem.setItemMeta(confirmitemmeta);
|
||||
confirmmenu.setItem(11, confirmitem);
|
||||
ItemStack cancelitem = new ItemStack(Material.REDSTONE_BLOCK, 1, (short) 0);
|
||||
ItemMeta cancelitemmeta = cancelitem.getItemMeta();
|
||||
cancelitemmeta.setDisplayName(instance.getLocale().getMessage("interface.confirmsettings.cancelitemname"));
|
||||
cancelitemmeta.setLore(Arrays.asList(instance.getLocale().getMessage("interface.confirmsettings.cancelitemlore")));
|
||||
|
||||
cancelitemmeta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
cancelitemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
|
||||
cancelitem.setItemMeta(cancelitemmeta);
|
||||
confirmmenu.setItem(15, cancelitem);
|
||||
if (instance.getConfig().getBoolean("Interface.Fill Interfaces With Glass")) {
|
||||
ItemStack fillitem;
|
||||
try {
|
||||
fillitem = new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7);
|
||||
} catch (Exception error) {
|
||||
fillitem = new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE"));
|
||||
}
|
||||
ItemMeta fillitemmeta = fillitem.getItemMeta();
|
||||
fillitemmeta.setDisplayName(Methods.formatText("&r"));
|
||||
fillitem.setItemMeta(fillitemmeta);
|
||||
for (int empty = 0; empty < confirmmenu.getSize(); empty++) {
|
||||
if (confirmmenu.getItem(empty) == null) {
|
||||
confirmmenu.setItem(empty, fillitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
UUID uuid = player.getUniqueId();
|
||||
vouchercache.put(uuid, voucher);
|
||||
itemcache.put(uuid, item);
|
||||
player.openInventory(confirmmenu);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clickListener(InventoryClickEvent event) {
|
||||
try {
|
||||
if (event.getInventory().getType() != InventoryType.CHEST || !event.getInventory().getTitle().equals(instance.getLocale().getMessage("interface.confirmsettings.title"))) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
ItemStack clicked = event.getCurrentItem();
|
||||
if (clicked == null) return;
|
||||
event.setCancelled(true);
|
||||
if (!clicked.getItemMeta().hasDisplayName())
|
||||
return;
|
||||
if (clicked.getItemMeta().getDisplayName().equals(instance.getLocale().getMessage("interface.confirmsettings.confirmitemname"))) {
|
||||
SoundUtils.playSound(player, "LEVEL_UP", 1);
|
||||
player.closeInventory();
|
||||
UUID uuid = player.getUniqueId();
|
||||
Voucher voucher = vouchercache.get(uuid);
|
||||
ItemStack item = itemcache.get(uuid);
|
||||
VoucherExecutor.redeemVoucher(player, voucher, item, true);
|
||||
} else if (clicked.getItemMeta().getDisplayName().equals(instance.getLocale().getMessage("interface.confirmsettings.cancelitemname"))) {
|
||||
UUID uuid = player.getUniqueId();
|
||||
vouchercache.remove(uuid);
|
||||
itemcache.remove(uuid);
|
||||
SoundUtils.playSound(player, "CLICK", 1);
|
||||
player.closeInventory();
|
||||
}
|
||||
} catch (Exception error) {
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,219 +0,0 @@
|
|||
package com.songoda.epicvouchers.inventory;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class VoucherEditor implements Listener {
|
||||
|
||||
private HashMap<UUID, Voucher> editor = new HashMap<>();
|
||||
private HashMap<UUID, String> type = new HashMap<>();
|
||||
|
||||
public EpicVouchers instance;
|
||||
|
||||
public VoucherEditor(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public void openMenu(Player player) {
|
||||
Inventory editormenu = Bukkit.createInventory(null, 27, instance.getLocale().getMessage("interface.editor.title"));
|
||||
SoundUtils.playSound(player, "NOTE_BASS", 1);
|
||||
for (Voucher voucher : instance.getVoucherManager().getVouchers()) {
|
||||
ItemStack item = voucher.toItemStack();
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(meta.getDisplayName() + Methods.formatText(" &b&l[CLICK TO EDIT]"));
|
||||
item.setItemMeta(meta);
|
||||
editormenu.setItem(editormenu.firstEmpty(), item);
|
||||
}
|
||||
if (instance.getConfig().getBoolean("Interface.Fill Interfaces With Glass")) {
|
||||
ItemStack fillitem;
|
||||
try {
|
||||
fillitem = new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7);
|
||||
} catch (Exception error) {
|
||||
fillitem = new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE"));
|
||||
}
|
||||
ItemMeta fillitemmeta = fillitem.getItemMeta();
|
||||
fillitemmeta.setDisplayName(Methods.formatText("&r"));
|
||||
fillitem.setItemMeta(fillitemmeta);
|
||||
for (int empty = 0; empty < editormenu.getSize(); empty++) {
|
||||
if (editormenu.getItem(empty) == null) {
|
||||
editormenu.setItem(empty, fillitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
player.openInventory(editormenu);
|
||||
}
|
||||
|
||||
private void editVoucher(Player player, Voucher voucher, ItemStack item) {
|
||||
String title = instance.getLocale().getMessage("interface.editvoucher.title");
|
||||
title = title.replaceAll("%voucher%", voucher.getKey());
|
||||
Inventory editormenu = Bukkit.createInventory(null, 27, title);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(Methods.formatText(voucher.getName(true)));
|
||||
item.setItemMeta(meta);
|
||||
editormenu.setItem(13, item);
|
||||
|
||||
ItemStack backitem = new ItemStack(Material.BARRIER, 1, (short) 0);
|
||||
ItemMeta backitemmeta = backitem.getItemMeta();
|
||||
backitemmeta.setDisplayName(instance.getLocale().getMessage("interface.editvoucher.backtitle"));
|
||||
backitemmeta.setLore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.backlore")));
|
||||
backitemmeta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
backitemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
backitem.setItemMeta(backitemmeta);
|
||||
editormenu.setItem(18, backitem);
|
||||
|
||||
ItemStack cloneitem = new ItemStack(Material.FEATHER, 1, (short) 0);
|
||||
ItemMeta cloneitemmeta = cloneitem.getItemMeta();
|
||||
cloneitemmeta.setDisplayName(instance.getLocale().getMessage("interface.editvoucher.recivetitle"));
|
||||
cloneitemmeta.setLore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.recivelore")));
|
||||
cloneitemmeta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
cloneitemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
cloneitem.setItemMeta(cloneitemmeta);
|
||||
editormenu.setItem(0, cloneitem);
|
||||
ItemStack renameitem = new ItemStack(Material.NAME_TAG, 1, (short) 0);
|
||||
ItemMeta renameitemmeta = renameitem.getItemMeta();
|
||||
renameitemmeta.setDisplayName(instance.getLocale().getMessage("interface.editvoucher.renametitle"));
|
||||
renameitemmeta.setLore(Collections.singletonList(instance.getLocale().getMessage("interface.editvoucher.renamelore")));
|
||||
renameitemmeta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
renameitemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
renameitem.setItemMeta(renameitemmeta);
|
||||
editormenu.setItem(8, renameitem);
|
||||
if (instance.getConfig().getBoolean("Interface.Fill Interfaces With Glass")) {
|
||||
ItemStack fillitem;
|
||||
try {
|
||||
fillitem = new ItemStack(Material.valueOf("STAINED_GLASS_PANE"), 1, (short) 7);
|
||||
} catch (Exception error) {
|
||||
fillitem = new ItemStack(Material.valueOf("GRAY_STAINED_GLASS_PANE"));
|
||||
}
|
||||
ItemMeta fillitemmeta = fillitem.getItemMeta();
|
||||
fillitemmeta.setDisplayName(Methods.formatText("&r"));
|
||||
fillitem.setItemMeta(fillitemmeta);
|
||||
for (int empty = 0; empty < editormenu.getSize(); empty++) {
|
||||
if (editormenu.getItem(empty) == null) {
|
||||
editormenu.setItem(empty, fillitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
player.openInventory(editormenu);
|
||||
editor.put(player.getUniqueId(), voucher);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void click2Listener(InventoryClickEvent event) {
|
||||
try {
|
||||
if (event.getInventory().getType() != InventoryType.CHEST || !event.getInventory().getTitle().equals(instance.getLocale().getMessage("interface.editor.title"))) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
for (Voucher voucher : instance.getVoucherManager().getVouchers()) {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
//ToDO: this is awful
|
||||
if (item == null) return;
|
||||
if (item.getType() != voucher.getMaterial() ||
|
||||
item.getDurability() != voucher.getData()) {
|
||||
continue;
|
||||
}
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (!meta.hasLore() || !meta.getLore().equals(voucher.getLore(true))) {
|
||||
continue;
|
||||
}
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
SoundUtils.playSound(player, "NOTE_PIANO", 1);
|
||||
editVoucher(player, voucher, item);
|
||||
}
|
||||
} catch (Exception error) {
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clickListener(InventoryClickEvent event) {
|
||||
try {
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
if (event.getInventory().getType() != InventoryType.CHEST || !editor.containsKey(player.getUniqueId())) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
|
||||
ItemStack item = event.getCurrentItem();
|
||||
if (item == null || !item.hasItemMeta()) return;
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
if (!meta.hasDisplayName() || !meta.hasLore()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (meta.getDisplayName().equals(instance.getLocale().getMessage("interface.editvoucher.recivetitle"))) {
|
||||
SoundUtils.playSound(player, "LEVEL_UP", 1);
|
||||
player.getInventory().addItem(editor.get(player.getUniqueId()).toItemStack());
|
||||
player.updateInventory();
|
||||
String message = instance.getLocale().getMessage("interface.editvoucher.recivemessage");
|
||||
message = message.replaceAll("%voucher%", editor.get(player.getUniqueId()).getName(true));
|
||||
player.sendMessage(message);
|
||||
} else if (meta.getDisplayName().equals(instance.getLocale().getMessage("interface.editvoucher.backtitle"))) {
|
||||
openMenu(player);
|
||||
} else if (meta.getDisplayName().equals(instance.getLocale().getMessage("interface.editvoucher.renametitle"))) {
|
||||
SoundUtils.playSound((Player) event.getWhoClicked(), "NOTE_BASS", 1);
|
||||
Voucher cache = editor.get(event.getWhoClicked().getUniqueId());
|
||||
event.getWhoClicked().closeInventory();
|
||||
editor.put(event.getWhoClicked().getUniqueId(), cache);
|
||||
type.put(event.getWhoClicked().getUniqueId(), "rename");
|
||||
event.getWhoClicked().sendMessage(instance.getLocale().getMessage("interface.editvoucher.renamemessage"));
|
||||
}
|
||||
} catch (Exception error) {
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void chatListener(AsyncPlayerChatEvent event) {
|
||||
if (!editor.containsKey(event.getPlayer().getUniqueId())
|
||||
|| !type.containsKey(event.getPlayer().getUniqueId())
|
||||
|| !type.get(event.getPlayer().getUniqueId()).equals("rename")) {
|
||||
return;
|
||||
}
|
||||
type.remove(event.getPlayer().getUniqueId());
|
||||
Voucher voucher = editor.get(event.getPlayer().getUniqueId());
|
||||
voucher.setName(event.getMessage());
|
||||
String message = instance.getLocale().getMessage("interface.editvoucher.renamefinish", event.getMessage());
|
||||
message = Methods.formatText(message);
|
||||
event.getPlayer().sendMessage(message);
|
||||
editVoucher(event.getPlayer(), editor.get(event.getPlayer().getUniqueId()), voucher.toItemStack());
|
||||
SoundUtils.playSound(event.getPlayer(), "NOTE_PIANO", 1);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void closeListener(InventoryCloseEvent event) {
|
||||
editor.remove(event.getPlayer().getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void leaveListener(PlayerQuitEvent event) {
|
||||
editor.remove(event.getPlayer().getUniqueId());
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.songoda.epicvouchers.liberaries;
|
||||
package com.songoda.epicvouchers.libraries;
|
||||
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -19,14 +19,14 @@ public class Bountiful {
|
|||
}
|
||||
|
||||
public static Integer getPlayerProtocol(Player player) {
|
||||
return Integer.valueOf(47);
|
||||
return 47;
|
||||
}
|
||||
|
||||
public static void sendPacket(Player player, Object packet) {
|
||||
try {
|
||||
Object handle = player.getClass().getMethod("getHandle", new Class[0]).invoke(player, new Object[0]);
|
||||
Object handle = player.getClass().getMethod("getHandle", new Class[0]).invoke(player);
|
||||
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
|
||||
playerConnection.getClass().getMethod("sendPacket", new Class[] { getNMSClass("Packet") }).invoke(playerConnection, new Object[] { packet });
|
||||
playerConnection.getClass().getMethod("sendPacket", new Class[] { getNMSClass("Packet") }).invoke(playerConnection, packet);
|
||||
} catch (Exception error) {
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
|
@ -46,26 +46,26 @@ public class Bountiful {
|
|||
try {
|
||||
if (title != null) {
|
||||
Object field = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null);
|
||||
Object chattitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, new Object[] { "{\"text\":\"" + title + "\"}" });
|
||||
Constructor<?> subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[] { getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE });
|
||||
Object titlepacket = subtitleconstructor.newInstance(new Object[] { field, chattitle, fadein, stay, fadeout });
|
||||
Object chattitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, "{\"text\":\"" + title + "\"}");
|
||||
Constructor<?> subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
||||
Object titlepacket = subtitleconstructor.newInstance(field, chattitle, fadein, stay, fadeout);
|
||||
sendPacket(player, titlepacket);
|
||||
field = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null);
|
||||
chattitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, new Object[] { "{\"text\":\"" + title + "\"}" });
|
||||
subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[] { getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent") });
|
||||
titlepacket = subtitleconstructor.newInstance(new Object[] { field, chattitle });
|
||||
chattitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, "{\"text\":\"" + title + "\"}");
|
||||
subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"));
|
||||
titlepacket = subtitleconstructor.newInstance(field, chattitle);
|
||||
sendPacket(player, titlepacket);
|
||||
}
|
||||
if (subtitle != null) {
|
||||
Object field = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null);
|
||||
Object chatsubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, new Object[] { "{\"text\":\"" + title + "\"}" });
|
||||
Constructor<?> subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[] { getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE });
|
||||
Object subtitlepacket = subtitleconstructor.newInstance(new Object[] { field, chatsubtitle, fadein, stay, fadeout });
|
||||
Object chatsubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, "{\"text\":\"" + title + "\"}");
|
||||
Constructor<?> subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
||||
Object subtitlepacket = subtitleconstructor.newInstance(field, chatsubtitle, fadein, stay, fadeout);
|
||||
sendPacket(player, subtitlepacket);
|
||||
field = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null);
|
||||
chatsubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, new Object[] { "{\"text\":\"" + subtitle + "\"}" });
|
||||
subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[] { getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE });
|
||||
subtitlepacket = subtitleconstructor.newInstance(new Object[] { field, chatsubtitle, fadein, stay, fadeout });
|
||||
chatsubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, "{\"text\":\"" + subtitle + "\"}");
|
||||
subtitleconstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
||||
subtitlepacket = subtitleconstructor.newInstance(field, chatsubtitle, fadein, stay, fadeout);
|
||||
sendPacket(player, subtitlepacket);
|
||||
}
|
||||
} catch (Exception error) {
|
||||
|
@ -97,14 +97,14 @@ public class Bountiful {
|
|||
chatmessagetype = object;
|
||||
}
|
||||
}
|
||||
Object object = chatcomponent.getConstructor(new Class[] { String.class }).newInstance(new Object[] { message });
|
||||
Object customobject = playoutchat.getConstructor(new Class[] { basecomponent, chatmessagetypeclass }).newInstance(new Object[] { object, chatmessagetype });
|
||||
Method method = craftplayerclass.getDeclaredMethod("getHandle", new Class[0]);
|
||||
Object invokedmethod = method.invoke(craftplayer, new Object[0]);
|
||||
Object object = chatcomponent.getConstructor(new Class[] { String.class }).newInstance(message);
|
||||
Object customobject = playoutchat.getConstructor(new Class[] { basecomponent, chatmessagetypeclass }).newInstance(object, chatmessagetype);
|
||||
Method method = craftplayerclass.getDeclaredMethod("getHandle");
|
||||
Object invokedmethod = method.invoke(craftplayer);
|
||||
Field field = invokedmethod.getClass().getDeclaredField("playerConnection");
|
||||
Object packetchat = field.get(invokedmethod);
|
||||
Method methodclass = packetchat.getClass().getDeclaredMethod("sendPacket", new Class[] { simplepacket });
|
||||
methodclass.invoke(packetchat, new Object[] { customobject });
|
||||
Method methodclass = packetchat.getClass().getDeclaredMethod("sendPacket", simplepacket);
|
||||
methodclass.invoke(packetchat, customobject);
|
||||
} catch (Exception error) {
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
|
@ -120,21 +120,21 @@ public class Bountiful {
|
|||
if (oldmethod) {
|
||||
Class<?> chatserializer = Class.forName("net.minecraft.server." + nmsversion + ".ChatSerializer");
|
||||
Class<?> basecomponent = Class.forName("net.minecraft.server." + nmsversion + ".IChatBaseComponent");
|
||||
Method method = chatserializer.getDeclaredMethod("a", new Class[] { String.class });
|
||||
Object baseinvoke = basecomponent.cast(method.invoke(chatserializer, new Object[] { "{\"text\": \"" + message + "\"}" }));
|
||||
customobject = playoutchat.getConstructor(new Class[] { basecomponent, Byte.TYPE }).newInstance(new Object[] { baseinvoke, Byte.valueOf((byte) 2) });
|
||||
Method method = chatserializer.getDeclaredMethod("a", String.class);
|
||||
Object baseinvoke = basecomponent.cast(method.invoke(chatserializer, "{\"text\": \"" + message + "\"}"));
|
||||
customobject = playoutchat.getConstructor(new Class[] { basecomponent, Byte.TYPE }).newInstance(baseinvoke, (byte) 2);
|
||||
} else {
|
||||
Class<?> componenttext = Class.forName("net.minecraft.server." + nmsversion + ".ChatComponentText");
|
||||
Class<?> chatbase = Class.forName("net.minecraft.server." + nmsversion + ".IChatBaseComponent");
|
||||
Object object = componenttext.getConstructor(new Class[] { String.class }).newInstance(new Object[] { message });
|
||||
customobject = playoutchat.getConstructor(new Class[] { chatbase, Byte.TYPE }).newInstance(new Object[] { object, Byte.valueOf((byte) 2) });
|
||||
Object object = componenttext.getConstructor(new Class[] { String.class }).newInstance(message);
|
||||
customobject = playoutchat.getConstructor(new Class[] { chatbase, Byte.TYPE }).newInstance(object, (byte) 2);
|
||||
}
|
||||
Method handlemethod = craftplayerclass.getDeclaredMethod("getHandle", new Class[0]);
|
||||
Object objectinvoked = handlemethod.invoke(craftplayer, new Object[0]);
|
||||
Method handlemethod = craftplayerclass.getDeclaredMethod("getHandle");
|
||||
Object objectinvoked = handlemethod.invoke(craftplayer);
|
||||
Field field = objectinvoked.getClass().getDeclaredField("playerConnection");
|
||||
Object fieldinvoked = field.get(objectinvoked);
|
||||
Method methodclass = fieldinvoked.getClass().getDeclaredMethod("sendPacket", new Class[] { simplepacket });
|
||||
methodclass.invoke(fieldinvoked, new Object[] { customobject });
|
||||
Method methodclass = fieldinvoked.getClass().getDeclaredMethod("sendPacket", simplepacket);
|
||||
methodclass.invoke(fieldinvoked, customobject);
|
||||
} catch (Exception error) {
|
||||
Debugger.runReport(error);
|
||||
}
|
|
@ -0,0 +1,526 @@
|
|||
package com.songoda.epicvouchers.libraries;
|
||||
|
||||
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.*;
|
||||
|
||||
/**
|
||||
* 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 FastInv implements InventoryHolder {
|
||||
|
||||
private static Plugin plugin = null;
|
||||
private boolean cancelTasksOnClose = true;
|
||||
private Set<FastInvCloseListener> closeListeners = new HashSet<>();
|
||||
private Set<FastInvClickListener> clickListeners = new HashSet<>();
|
||||
private Map<Integer, FastInvClickListener> 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 FastInv(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 FastInv(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 FastInv(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 FastInv(InventoryType type, String title) {
|
||||
this(0, type, title);
|
||||
}
|
||||
|
||||
private FastInv(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 (FastInv.plugin == null) {
|
||||
FastInv.plugin = plugin;
|
||||
Bukkit.getPluginManager().registerEvents(getListener(), plugin);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus.
|
||||
*
|
||||
* @param item The item to add
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(ItemStack item) {
|
||||
return addItem(item, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus with a {@link FastInvClickListener} to handle clicks.
|
||||
*
|
||||
* @param item The item to add.
|
||||
* @param listener The {@link FastInvClickListener} for the item.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(ItemStack item, FastInvClickListener listener) {
|
||||
runSync(() -> {
|
||||
int slot = inventory.firstEmpty();
|
||||
if (slot >= 0) {
|
||||
addItem(slot, item, listener);
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on a specific slot.
|
||||
*
|
||||
* @param slot The slot of the item.
|
||||
* @param item The item to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int slot, ItemStack item) {
|
||||
return addItem(slot, item, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int slot, ItemStack item, FastInvClickListener listener) {
|
||||
runSync(() -> {
|
||||
inventory.setItem(slot, item);
|
||||
|
||||
if (listener != null) {
|
||||
itemListeners.put(slot, listener);
|
||||
} else {
|
||||
itemListeners.remove(slot);
|
||||
}
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on a range of slots.
|
||||
*
|
||||
* @param slotFrom Starting slot to put the item in.
|
||||
* @param slotTo Ending slot to put the item in.
|
||||
* @param item The item to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int slotFrom, int slotTo, ItemStack item) {
|
||||
return addItem(slotFrom, slotTo, item, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on a range of slots with a {@link FastInvClickListener} to handle clicks.
|
||||
*
|
||||
* @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.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int slotFrom, int slotTo, ItemStack item, FastInvClickListener listener) {
|
||||
for (int i = slotFrom; i <= slotTo; i++) {
|
||||
addItem(i, item, listener);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on multiple slots.
|
||||
*
|
||||
* @param slots The slot of the item.
|
||||
* @param item The item to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int[] slots, ItemStack item) {
|
||||
return addItem(slots, item, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on the edges.
|
||||
*
|
||||
* @param item The item to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv edge(ItemStack item) {
|
||||
int height = inventory.getSize() / 9;
|
||||
|
||||
addItem(0, 9, item);
|
||||
addItem(inventory.getSize() - 9, inventory.getSize() - 1, item);
|
||||
|
||||
for (int i = 0; i < height; i++) {
|
||||
addItem(i * 9, item);
|
||||
addItem(i * 9 + 8, item);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an {@link ItemStack} to the menus on multiples slots with a {@link FastInvClickListener} to handle click.
|
||||
*
|
||||
* @param slots The slots to place the item.
|
||||
* @param item The item to add.
|
||||
* @param listener The FastInvClickListener for the item.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv addItem(int[] slots, ItemStack item, FastInvClickListener listener) {
|
||||
for (int slot : slots) {
|
||||
addItem(slot, item, listener);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public FastInv fill(ItemStack itemStack) {
|
||||
runSync(() -> {
|
||||
for (int i = 0; i < inventory.getSize(); i++) {
|
||||
if (inventory.getItem(i) == null) {
|
||||
addItem(i, itemStack);
|
||||
}
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a {@link FastInvCloseListener} to listen on menus close.
|
||||
*
|
||||
* @param listener The {@link FastInvCloseListener} to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv onClose(FastInvCloseListener listener) {
|
||||
closeListeners.add(listener);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a {@link FastInvClickListener} to listen on menus click.
|
||||
*
|
||||
* @param listener The {@link FastInvClickListener} to add.
|
||||
* @return This FastInv instance, for chaining.
|
||||
*/
|
||||
public FastInv onClick(FastInvClickListener 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 FastInv 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 FastInv 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);
|
||||
}
|
||||
}
|
||||
|
||||
public interface FastInvClickListener {
|
||||
void onClick(FastInvClickEvent event);
|
||||
}
|
||||
|
||||
public interface FastInvCloseListener {
|
||||
void onClose(FastInvCloseEvent event);
|
||||
}
|
||||
|
||||
public static abstract class FastInvEvent {
|
||||
|
||||
private Player player;
|
||||
private FastInv inventory;
|
||||
private boolean cancelled;
|
||||
|
||||
FastInvEvent(Player player, FastInv inventory, boolean cancelled) {
|
||||
this.player = player;
|
||||
this.inventory = inventory;
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the FastInv menus.
|
||||
*
|
||||
* @return This associated FastInv instance.
|
||||
*/
|
||||
public FastInv 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 FastInvClickEvent extends FastInvEvent {
|
||||
|
||||
private int slot;
|
||||
private ItemStack item;
|
||||
private InventoryAction action;
|
||||
private ClickType clickType;
|
||||
|
||||
private FastInvClickEvent(Player player, FastInv 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 FastInvCloseEvent extends FastInvEvent {
|
||||
private FastInvCloseEvent(Player player, FastInv inventory, boolean cancelled) {
|
||||
super(player, inventory, cancelled);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 FastInv && event.getWhoClicked() instanceof Player) {
|
||||
int slot = event.getRawSlot();
|
||||
FastInv inv = (FastInv) event.getInventory().getHolder();
|
||||
|
||||
FastInvClickEvent clickEvent = new FastInvClickEvent((Player) event.getWhoClicked(), inv, slot,
|
||||
event.getCurrentItem(), true, event.getAction(), event.getClick());
|
||||
|
||||
if (inv.itemListeners.containsKey(slot)) {
|
||||
inv.itemListeners.get(slot).onClick(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 FastInv && event.getPlayer() instanceof Player) {
|
||||
Player player = (Player) event.getPlayer();
|
||||
FastInv inv = (FastInv) event.getInventory().getHolder();
|
||||
|
||||
FastInvCloseEvent closeEvent = new FastInvCloseEvent(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 FastInv) {
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 FastInv setCancelTasksOnClose(boolean cancelTasksOnClose) {
|
||||
this.cancelTasksOnClose = cancelTasksOnClose;
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,279 @@
|
|||
package com.songoda.epicvouchers.libraries;
|
||||
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.*;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A complete {@link ItemStack} builder for FastInv (only works on 1.8+).
|
||||
*
|
||||
* The project is on <a href="https://github.com/MrMicky-FR/FastInv">GitHub</a>
|
||||
*
|
||||
* @author MrMicky
|
||||
*/
|
||||
public class ItemBuilder {
|
||||
|
||||
private final ItemStack item;
|
||||
private ItemMeta meta;
|
||||
|
||||
/*
|
||||
* Constructors:
|
||||
*/
|
||||
public ItemBuilder(Material material) {
|
||||
this(new ItemStack(material));
|
||||
}
|
||||
|
||||
public ItemBuilder(Material material, int amount) {
|
||||
this(new ItemStack(material, amount));
|
||||
}
|
||||
|
||||
public ItemBuilder(Material material, byte data) {
|
||||
this(new ItemStack(material, 1, data));
|
||||
}
|
||||
|
||||
public ItemBuilder(Material material, int amount, byte data) {
|
||||
this(new ItemStack(material, amount, data));
|
||||
}
|
||||
|
||||
public ItemBuilder(ItemStack item) {
|
||||
this.item = item;
|
||||
this.meta = item.getItemMeta();
|
||||
}
|
||||
|
||||
/*
|
||||
* Meta:
|
||||
*/
|
||||
public boolean hasMeta() {
|
||||
return getMeta() != null;
|
||||
}
|
||||
|
||||
public ItemMeta getMeta() {
|
||||
return meta;
|
||||
}
|
||||
|
||||
public ItemBuilder meta(ItemMeta meta) {
|
||||
this.meta = meta;
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Name:
|
||||
*/
|
||||
public boolean hasName() {
|
||||
return meta.hasDisplayName();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return meta.getDisplayName();
|
||||
}
|
||||
|
||||
public ItemBuilder name(String name) {
|
||||
meta.setDisplayName(name);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lore:
|
||||
*/
|
||||
public boolean hasLore() {
|
||||
return meta.hasLore();
|
||||
}
|
||||
|
||||
public List<String> getLore() {
|
||||
return meta.getLore();
|
||||
}
|
||||
|
||||
public ItemBuilder lore(String... lore) {
|
||||
return lore(Arrays.asList(lore));
|
||||
}
|
||||
|
||||
public ItemBuilder lore(List<String> lore) {
|
||||
meta.setLore(lore);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enchantments:
|
||||
*/
|
||||
public boolean hasEnchants() {
|
||||
return meta.hasEnchants();
|
||||
}
|
||||
|
||||
public boolean hasEnchant(Enchantment enchantment) {
|
||||
return meta.hasEnchant(enchantment);
|
||||
}
|
||||
|
||||
public boolean hasConflictingEnchant(Enchantment enchantment) {
|
||||
return meta.hasConflictingEnchant(enchantment);
|
||||
}
|
||||
|
||||
public Map<Enchantment, Integer> getEnchants() {
|
||||
return meta.getEnchants();
|
||||
}
|
||||
|
||||
public ItemBuilder enchant(Enchantment enchantment, int level) {
|
||||
meta.addEnchant(enchantment, level, true);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder removeEnchant(Enchantment enchantment) {
|
||||
meta.removeEnchant(enchantment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Flags:
|
||||
*/
|
||||
public boolean hasFlag(ItemFlag flag) {
|
||||
return meta.hasItemFlag(flag);
|
||||
}
|
||||
|
||||
public Set<ItemFlag> getFlags() {
|
||||
return meta.getItemFlags();
|
||||
}
|
||||
|
||||
public ItemBuilder addFlags(ItemFlag... flags) {
|
||||
meta.addItemFlags(flags);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder removeFlags(ItemFlag... flags) {
|
||||
meta.removeItemFlags(flags);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Unbreakability:
|
||||
*/
|
||||
public boolean isUnbreakable() {
|
||||
return meta.spigot().isUnbreakable();
|
||||
}
|
||||
|
||||
public ItemBuilder unbreakable() {
|
||||
return unbreakable(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemBuilder unbreakable(boolean unbreakable) {
|
||||
meta.spigot().setUnbreakable(unbreakable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* ==========================
|
||||
*
|
||||
* SPECIFIC META
|
||||
*
|
||||
* ==========================
|
||||
*/
|
||||
|
||||
/*
|
||||
* Banners:
|
||||
*/
|
||||
public DyeColor getBannerBaseColor() {
|
||||
return ((BannerMeta) meta).getBaseColor();
|
||||
}
|
||||
|
||||
public List<Pattern> getBannerPatterns() {
|
||||
return ((BannerMeta) meta).getPatterns();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemBuilder bannerBaseColor(DyeColor color) {
|
||||
((BannerMeta) meta).setBaseColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder bannerPatterns(List<Pattern> patterns) {
|
||||
((BannerMeta) meta).setPatterns(patterns);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder bannerPattern(int i, Pattern pattern) {
|
||||
((BannerMeta) meta).setPattern(i, pattern);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder addBannerPatterns(Pattern pattern) {
|
||||
((BannerMeta) meta).addPattern(pattern);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder removeBannerPattern(int i) {
|
||||
((BannerMeta) meta).removePattern(i);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Leather armor:
|
||||
*/
|
||||
public Color getLeatherArmorColor() {
|
||||
return ((LeatherArmorMeta) meta).getColor();
|
||||
}
|
||||
|
||||
public ItemBuilder leatherArmorColor(Color color) {
|
||||
((LeatherArmorMeta) meta).setColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Skulls:
|
||||
*/
|
||||
public boolean hasSkullOwner() {
|
||||
return ((SkullMeta) meta).hasOwner();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public String getSkullOwner() {
|
||||
return ((SkullMeta) meta).getOwner();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemBuilder skullOwner(String owner) {
|
||||
item.setDurability((short) 3);
|
||||
((SkullMeta) meta).setOwner(owner);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder durability(int durability) {
|
||||
item.setDurability((short) durability);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Potions:
|
||||
*/
|
||||
public boolean hasPotionEffect(PotionEffectType type) {
|
||||
return ((PotionMeta) meta).hasCustomEffect(type);
|
||||
}
|
||||
|
||||
public boolean hasPotionEffects() {
|
||||
return ((PotionMeta) meta).hasCustomEffects();
|
||||
}
|
||||
|
||||
public List<PotionEffect> getPotionEffects() {
|
||||
return ((PotionMeta) meta).getCustomEffects();
|
||||
}
|
||||
|
||||
public ItemBuilder addPotionEffect(PotionEffect effect, boolean overwrite) {
|
||||
((PotionMeta) meta).addCustomEffect(effect, overwrite);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build the ItemStack.
|
||||
*/
|
||||
public ItemStack build() {
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package com.songoda.epicvouchers.listeners;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.menus.EditorMenu;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
|
||||
public class ChatListener implements Listener {
|
||||
private final EpicVouchers instance;
|
||||
|
||||
public ChatListener(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
|
||||
if(!EditorMenu.getRename().containsKey(event.getPlayer().getUniqueId())) {
|
||||
return;
|
||||
}
|
||||
|
||||
Voucher voucher = EditorMenu.getRename().remove(event.getPlayer().getUniqueId());
|
||||
voucher.setName(event.getMessage());
|
||||
|
||||
event.getPlayer().sendMessage(Methods.formatText(instance.getLocale().getMessage("interface.editvoucher.renamefinish", event.getMessage())));
|
||||
|
||||
new EditorMenu(instance, voucher).open(event.getPlayer());
|
||||
SoundUtils.playSound(event.getPlayer(), "NOTE_PIANO", 1);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.songoda.epicvouchers.handlers;
|
||||
package com.songoda.epicvouchers.listeners;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
@ -7,9 +7,9 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
|||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PreventHacks implements Listener {
|
||||
public class PlayerCommandListener implements Listener {
|
||||
|
||||
private static HashMap<UUID, String> commands = new HashMap<UUID, String>();
|
||||
private static final HashMap<UUID, String> commands = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
public static void preventCommands(PlayerCommandPreprocessEvent event) {
|
||||
|
@ -27,5 +27,4 @@ public class PreventHacks implements Listener {
|
|||
commands.remove(uuid);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
package com.songoda.epicvouchers.voucher;
|
||||
package com.songoda.epicvouchers.listeners;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.menus.ConfirmMenu;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
@ -11,46 +13,53 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||
|
||||
import java.util.UUID;
|
||||
|
||||
public class ClickListener implements Listener {
|
||||
public class PlayerInteractListener implements Listener {
|
||||
|
||||
private final EpicVouchers instance;
|
||||
|
||||
public ClickListener(EpicVouchers instance) {
|
||||
public PlayerInteractListener(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void voucherListener(PlayerInteractEvent event) {
|
||||
Action action = event.getAction();
|
||||
if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Voucher voucher : instance.getVoucherManager().getVouchers()) {
|
||||
Player player = event.getPlayer();
|
||||
if (!player.hasPermission(voucher.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack item = event.getPlayer().getItemInHand();
|
||||
|
||||
if (item.getType() != voucher.getMaterial() || item.getDurability() != voucher.getData()) {
|
||||
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();
|
||||
if (!instance.getCooldowns().getEntries().containsKey(uuid)) {
|
||||
if (voucher.isConfirm()) {
|
||||
EpicVouchers.getInstance().getConfirmation().confirmVoucher(player, voucher, item);
|
||||
} else {
|
||||
VoucherExecutor.redeemVoucher(player, voucher, item, true);
|
||||
}
|
||||
event.setCancelled(true);
|
||||
} else {
|
||||
String message = instance.getLocale().getMessage("event.general.cooldown", String.valueOf(instance.getCooldowns().getEntries().get(uuid) + 1), voucher.getName(true));
|
||||
player.sendMessage(message);
|
||||
|
||||
if (instance.getCooldowns().isOnCoolDown(uuid)) {
|
||||
player.sendMessage(instance.getLocale().getMessage("event.general.cooldown", instance.getCooldowns().getTime(uuid), voucher.getName(true)));
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
if (voucher.isConfirm()) {
|
||||
new ConfirmMenu(instance, voucher).open(player);
|
||||
return;
|
||||
}
|
||||
|
||||
instance.getVoucherExecutor().redeemVoucher(player, voucher, item, true);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
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.utils.SoundUtils;
|
||||
import com.songoda.epicvouchers.voucher.Voucher;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import static org.bukkit.enchantments.Enchantment.DURABILITY;
|
||||
import static org.bukkit.inventory.ItemFlag.HIDE_ENCHANTS;
|
||||
|
||||
public class ConfirmMenu extends FastInv {
|
||||
public ConfirmMenu(EpicVouchers instance, Voucher voucher) {
|
||||
super(27, instance.getLocale().getMessage("interface.confirmsettings.title"));
|
||||
|
||||
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);
|
||||
event.getPlayer().closeInventory();
|
||||
instance.getVoucherExecutor().redeemVoucher(event.getPlayer(), voucher, event.getPlayer().getItemInHand(), true);
|
||||
});
|
||||
|
||||
addItem(15, new ItemBuilder(Material.REDSTONE_BLOCK)
|
||||
.name(instance.getLocale().getMessage("interface.confirmsettings.cancelitemname"))
|
||||
.lore(instance.getLocale().getMessage("interface.confirmsettings.cancelitemlore"))
|
||||
.enchant(DURABILITY, 1)
|
||||
.addFlags(HIDE_ENCHANTS)
|
||||
.build(), event -> {
|
||||
SoundUtils.playSound(event.getPlayer(), "CLICK", 1);
|
||||
event.getPlayer().closeInventory();
|
||||
});
|
||||
|
||||
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,74 @@
|
|||
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.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 org.bukkit.Material.NAME_TAG;
|
||||
import static org.bukkit.enchantments.Enchantment.DURABILITY;
|
||||
import static org.bukkit.inventory.ItemFlag.HIDE_ENCHANTS;
|
||||
|
||||
public class EditorMenu extends FastInv {
|
||||
|
||||
private static final HashMap<UUID, Voucher> rename = new HashMap<>();
|
||||
|
||||
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().closeInventory();
|
||||
rename.put(event.getPlayer().getUniqueId(), voucher);
|
||||
event.getPlayer().sendMessage(instance.getLocale().getMessage("interface.editvoucher.renamemessage"));
|
||||
});
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static HashMap<UUID, Voucher> getRename() {
|
||||
return rename;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
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.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;
|
||||
|
||||
public class VoucherMenu extends FastInv {
|
||||
|
||||
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]"));
|
||||
|
||||
if (getInventory().firstEmpty() != -1) {
|
||||
addItem(getInventory().firstEmpty(), item.build(), event -> {
|
||||
SoundUtils.playSound(event.getPlayer(), "NOTE_PIANO", 1);
|
||||
new EditorMenu(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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -6,7 +6,11 @@ import com.songoda.epicvouchers.EpicVouchers;
|
|||
* Created by songoda on 3/21/2017.
|
||||
*/
|
||||
public class Debugger {
|
||||
private static EpicVouchers instance;
|
||||
|
||||
public static void init(EpicVouchers plugin) {
|
||||
instance = plugin;
|
||||
}
|
||||
|
||||
public static void runReport(Exception e) {
|
||||
if (isDebug()) {
|
||||
|
@ -24,8 +28,7 @@ public class Debugger {
|
|||
}
|
||||
|
||||
public static boolean isDebug() {
|
||||
EpicVouchers plugin = EpicVouchers.getInstance();
|
||||
return plugin.getConfig().getBoolean("System.Debugger Enabled");
|
||||
return instance.getConfig().getBoolean("System.Debugger Enabled");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.songoda.epicvouchers.utils;
|
||||
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
|
||||
public enum ServerVersion {
|
||||
|
||||
UNKNOWN("unknown_server_version"),
|
||||
|
@ -14,7 +16,7 @@ public enum ServerVersion {
|
|||
|
||||
private final String packagePrefix;
|
||||
|
||||
private ServerVersion(String packagePrefix) {
|
||||
ServerVersion(String packagePrefix) {
|
||||
this.packagePrefix = packagePrefix;
|
||||
}
|
||||
|
||||
|
@ -23,4 +25,16 @@ public enum ServerVersion {
|
|||
if (packageName.startsWith(version.packagePrefix)) return version;
|
||||
return ServerVersion.UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isServerVersion(ServerVersion version) {
|
||||
return this == version;
|
||||
}
|
||||
|
||||
public boolean isServerVersion(ServerVersion... versions) {
|
||||
return ArrayUtils.contains(versions, this);
|
||||
}
|
||||
|
||||
public boolean isServerVersionAtLeast(ServerVersion version) {
|
||||
return this.ordinal() >= version.ordinal();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,8 +35,8 @@ public class SettingsManager implements Listener {
|
|||
|
||||
DEBUGGER_ENABLED("System.Debugger Enabled", false);
|
||||
|
||||
private String setting;
|
||||
private Object option;
|
||||
private final String setting;
|
||||
private final Object option;
|
||||
|
||||
settings(String setting, Object option) {
|
||||
this.setting = setting;
|
||||
|
|
|
@ -200,7 +200,7 @@ public enum SoundUtils {
|
|||
VILLAGER_NO("VILLAGER_NO", "ENTITY_VILLAGER_NO"),
|
||||
VILLAGER_YES("VILLAGER_YES", "ENTITY_VILLAGER_YES");
|
||||
|
||||
private String[] versionname;
|
||||
private final String[] versionname;
|
||||
private Sound cached = null;
|
||||
|
||||
SoundUtils(String... versionname) {
|
||||
|
@ -213,7 +213,7 @@ public enum SoundUtils {
|
|||
for (String name : versionname) {
|
||||
try {
|
||||
return cached = Sound.valueOf(name);
|
||||
} catch (Exception error) {
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
System.out.println(Methods.formatText("&cFailed to find the sound enum called " + cached + "."));
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
package com.songoda.epicvouchers.voucher;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class CoolDownManager {
|
||||
|
||||
private final HashMap<UUID, Long> entries = new HashMap<>();
|
||||
private final EpicVouchers instance;
|
||||
|
||||
public CoolDownManager(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
void addCooldown(final UUID uuid, Voucher voucher) {
|
||||
if (Bukkit.getPlayer(uuid).hasPermission("epicvouchers.bypass")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (voucher.getCooldown() != 0) {
|
||||
entries.put(uuid, System.currentTimeMillis() + voucher.getCooldown() * 1000);
|
||||
} else {
|
||||
entries.put(uuid, System.currentTimeMillis() + instance.getConfig().getInt("Main.Cooldown Delay") * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isOnCoolDown(UUID uuid) {
|
||||
if(!entries.containsKey(uuid)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(entries.get(uuid) >= System.currentTimeMillis()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
entries.remove(uuid);
|
||||
return false;
|
||||
}
|
||||
|
||||
public long getTime(UUID uuid) {
|
||||
if(!entries.containsKey(uuid)) {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
return (entries.get(uuid) - System.currentTimeMillis()) / 1000;
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
package com.songoda.epicvouchers.voucher;
|
||||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Cooldowns {
|
||||
|
||||
private HashMap<UUID, Integer> entries = new HashMap<UUID, Integer>();
|
||||
|
||||
void addCooldown(final UUID uuid, Voucher voucher) {
|
||||
try {
|
||||
if (Bukkit.getPlayer(uuid).hasPermission("epicvouchers.bypass")) {
|
||||
return;
|
||||
}
|
||||
if (voucher.getCooldown() != 0) {
|
||||
entries.put(uuid, voucher.getCooldown());
|
||||
} else {
|
||||
entries.put(uuid, EpicVouchers.getInstance().getConfig().getInt("Main.Cooldown Delay"));
|
||||
}
|
||||
new BukkitRunnable() {
|
||||
public void run() {
|
||||
if (entries.get(uuid) <= 0 && entries.containsKey(uuid)) {
|
||||
entries.remove(uuid);
|
||||
cancel();
|
||||
} else {
|
||||
entries.put(uuid, entries.get(uuid) - 1);
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(EpicVouchers.getInstance(), 0, 20);
|
||||
} catch (Exception error) {
|
||||
System.out.println(Methods.formatText("&cFailed to add cooldown to the UUID " + uuid + "."));
|
||||
Debugger.runReport(error);
|
||||
}
|
||||
}
|
||||
|
||||
HashMap<UUID, Integer> getEntries() {
|
||||
return new HashMap<>(entries);
|
||||
}
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
package com.songoda.epicvouchers.voucher;
|
||||
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
|
@ -12,43 +14,43 @@ import java.util.List;
|
|||
|
||||
public class Voucher {
|
||||
|
||||
private final String key;
|
||||
private String permission;
|
||||
private Material material = Material.COOKIE;
|
||||
private short data = 0;
|
||||
private int cooldown = 0;
|
||||
private String name;
|
||||
private List<String> lore = new ArrayList();
|
||||
private boolean glow = true;
|
||||
private boolean confirm = true;
|
||||
private boolean unbreakable = true;
|
||||
private boolean hideAttributes = false;
|
||||
private boolean removeItem = true;
|
||||
private boolean feedPlayer = true;
|
||||
private boolean healPlayer = true;
|
||||
private boolean smiteEffect = true;
|
||||
@Getter private final String key;
|
||||
@Getter @Setter private String permission;
|
||||
@Getter @Setter private Material material = Material.COOKIE;
|
||||
@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 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;
|
||||
|
||||
private List<String> broadcasts = new ArrayList();
|
||||
private List<String> messages = new ArrayList<>();
|
||||
private List<String> commands = new ArrayList<>();
|
||||
@Setter private List<String> broadcasts = new ArrayList<>();
|
||||
@Setter private List<String> messages = new ArrayList<>();
|
||||
@Setter @Getter private List<String> commands = new ArrayList<>();
|
||||
|
||||
private String actionBar;
|
||||
@Setter private String actionBar;
|
||||
|
||||
private String title = "&6Thank you.";
|
||||
private String subTitle = "&eYou have redeemed the voucher %voucher%.";
|
||||
private int titleFadeIn = 10;
|
||||
private int titleStay = 50;
|
||||
private int titleFadeOut = 10;
|
||||
@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;
|
||||
|
||||
private String sound = "NOTE_PLING";
|
||||
private int soundPitch = 1;
|
||||
@Getter @Setter private String sound = "NOTE_PLING";
|
||||
@Getter @Setter private int soundPitch = 1;
|
||||
|
||||
private String particle = "FLAME";
|
||||
private int particleAmount = 100;
|
||||
@Getter @Setter private String particle = "FLAME";
|
||||
@Getter @Setter private int particleAmount = 100;
|
||||
|
||||
private String effect = "SPEED";
|
||||
private int effectAmplifer = 2;
|
||||
private int effectDuration = 10;
|
||||
@Getter @Setter private String effect = "SPEED";
|
||||
@Getter @Setter private int effectAmplifer = 2;
|
||||
@Getter @Setter private int effectDuration = 10;
|
||||
|
||||
public Voucher(String key) {
|
||||
this.key = key;
|
||||
|
@ -80,43 +82,11 @@ public class Voucher {
|
|||
return item;
|
||||
}
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public String getPermission() {
|
||||
return permission;
|
||||
}
|
||||
|
||||
public void setPermission(String permission) {
|
||||
this.permission = permission;
|
||||
}
|
||||
|
||||
public Material getMaterial() {
|
||||
return material;
|
||||
}
|
||||
|
||||
public void setMaterial(Material material) {
|
||||
this.material = material;
|
||||
}
|
||||
|
||||
public short getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(short data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getName(boolean applyFormatting) {
|
||||
if (!applyFormatting) return name;
|
||||
return Methods.formatText(name);
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<String> getLore(boolean applyFormatting) {
|
||||
if (!applyFormatting) return lore;
|
||||
List<String> itemLore = new ArrayList<>();
|
||||
|
@ -126,74 +96,6 @@ public class Voucher {
|
|||
return itemLore;
|
||||
}
|
||||
|
||||
public void setLore(List<String> lore) {
|
||||
this.lore = lore;
|
||||
}
|
||||
|
||||
public boolean isGlow() {
|
||||
return glow;
|
||||
}
|
||||
|
||||
public void setGlow(boolean glow) {
|
||||
this.glow = glow;
|
||||
}
|
||||
|
||||
public boolean isConfirm() {
|
||||
return confirm;
|
||||
}
|
||||
|
||||
public void setConfirm(boolean confirm) {
|
||||
this.confirm = confirm;
|
||||
}
|
||||
|
||||
public boolean isUnbreakable() {
|
||||
return unbreakable;
|
||||
}
|
||||
|
||||
public void setUnbreakable(boolean unbreakable) {
|
||||
this.unbreakable = unbreakable;
|
||||
}
|
||||
|
||||
public boolean isHideAttributes() {
|
||||
return hideAttributes;
|
||||
}
|
||||
|
||||
public void setHideAttributes(boolean hideAttributes) {
|
||||
this.hideAttributes = hideAttributes;
|
||||
}
|
||||
|
||||
public boolean isRemoveItem() {
|
||||
return removeItem;
|
||||
}
|
||||
|
||||
public void setRemoveItem(boolean removeItem) {
|
||||
this.removeItem = removeItem;
|
||||
}
|
||||
|
||||
public boolean isFeedPlayer() {
|
||||
return feedPlayer;
|
||||
}
|
||||
|
||||
public void setFeedPlayer(boolean feedPlayer) {
|
||||
this.feedPlayer = feedPlayer;
|
||||
}
|
||||
|
||||
public boolean isHealPlayer() {
|
||||
return healPlayer;
|
||||
}
|
||||
|
||||
public void setHealPlayer(boolean healPlayer) {
|
||||
this.healPlayer = healPlayer;
|
||||
}
|
||||
|
||||
public boolean isSmiteEffect() {
|
||||
return smiteEffect;
|
||||
}
|
||||
|
||||
public void setSmiteEffect(boolean smiteEffect) {
|
||||
this.smiteEffect = smiteEffect;
|
||||
}
|
||||
|
||||
public List<String> getBroadcasts(boolean applyFormatting) {
|
||||
if (!applyFormatting) return broadcasts;
|
||||
List<String> itemBroadcasts = new ArrayList<>();
|
||||
|
@ -203,18 +105,6 @@ public class Voucher {
|
|||
return itemBroadcasts;
|
||||
}
|
||||
|
||||
public void setBroadcasts(List<String> broadcasts) {
|
||||
this.broadcasts = broadcasts;
|
||||
}
|
||||
|
||||
public int getCooldown() {
|
||||
return cooldown;
|
||||
}
|
||||
|
||||
public void setCooldown(int cooldown) {
|
||||
this.cooldown = cooldown;
|
||||
}
|
||||
|
||||
public List<String> getMessages(boolean applyFormatting) {
|
||||
if (!applyFormatting) return messages;
|
||||
List<String> itemMessages = new ArrayList<>();
|
||||
|
@ -224,125 +114,21 @@ public class Voucher {
|
|||
return itemMessages;
|
||||
}
|
||||
|
||||
public void setMessages(List<String> messages) {
|
||||
this.messages = messages;
|
||||
}
|
||||
|
||||
public List<String> getCommands() {
|
||||
return commands;
|
||||
}
|
||||
|
||||
public void setCommands(List<String> commands) {
|
||||
this.commands = commands;
|
||||
@Override
|
||||
public String toString() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public String getActionBar() {
|
||||
return Methods.formatText(actionBar);
|
||||
}
|
||||
|
||||
public void setActionBar(String actionBar) {
|
||||
this.actionBar = actionBar;
|
||||
public String getSubTitle() {
|
||||
return Methods.formatText(subTitle);
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return Methods.formatText(title);
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getSubTitle() {
|
||||
return Methods.formatText(subTitle);
|
||||
}
|
||||
|
||||
public void setSubTitle(String subTitle) {
|
||||
this.subTitle = subTitle;
|
||||
}
|
||||
|
||||
public int getTitleFadeIn() {
|
||||
return titleFadeIn;
|
||||
}
|
||||
|
||||
public void setTitleFadeIn(int titleFadeIn) {
|
||||
this.titleFadeIn = titleFadeIn;
|
||||
}
|
||||
|
||||
public int getTitleStay() {
|
||||
return titleStay;
|
||||
}
|
||||
|
||||
public void setTitleStay(int titleStay) {
|
||||
this.titleStay = titleStay;
|
||||
}
|
||||
|
||||
public int getTitleFadeOut() {
|
||||
return titleFadeOut;
|
||||
}
|
||||
|
||||
public void setTitleFadeOut(int titleFadeOut) {
|
||||
this.titleFadeOut = titleFadeOut;
|
||||
}
|
||||
|
||||
public String getSound() {
|
||||
return sound;
|
||||
}
|
||||
|
||||
public void setSound(String sound) {
|
||||
this.sound = sound;
|
||||
}
|
||||
|
||||
public int getSoundPitch() {
|
||||
return soundPitch;
|
||||
}
|
||||
|
||||
public void setSoundPitch(int soundPitch) {
|
||||
this.soundPitch = soundPitch;
|
||||
}
|
||||
|
||||
public String getParticle() {
|
||||
return particle;
|
||||
}
|
||||
|
||||
public void setParticle(String particle) {
|
||||
this.particle = particle;
|
||||
}
|
||||
|
||||
public int getParticleAmount() {
|
||||
return particleAmount;
|
||||
}
|
||||
|
||||
public void setParticleAmount(int particleAmount) {
|
||||
this.particleAmount = particleAmount;
|
||||
}
|
||||
|
||||
public String getEffect() {
|
||||
return effect;
|
||||
}
|
||||
|
||||
public void setEffect(String effect) {
|
||||
this.effect = effect;
|
||||
}
|
||||
|
||||
public int getEffectAmplifer() {
|
||||
return effectAmplifer;
|
||||
}
|
||||
|
||||
public void setEffectAmplifer(int effectAmplifer) {
|
||||
this.effectAmplifer = effectAmplifer;
|
||||
}
|
||||
|
||||
public int getEffectDuration() {
|
||||
return effectDuration;
|
||||
}
|
||||
|
||||
public void setEffectDuration(int effectDuration) {
|
||||
this.effectDuration = effectDuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return key;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,9 +2,8 @@ package com.songoda.epicvouchers.voucher;
|
|||
|
||||
import com.songoda.epicvouchers.EpicVouchers;
|
||||
import com.songoda.epicvouchers.events.VoucherRedeemEvent;
|
||||
import com.songoda.epicvouchers.handlers.PreventHacks;
|
||||
import com.songoda.epicvouchers.liberaries.Bountiful;
|
||||
import com.songoda.epicvouchers.utils.Debugger;
|
||||
import com.songoda.epicvouchers.libraries.Bountiful;
|
||||
import com.songoda.epicvouchers.listeners.PlayerCommandListener;
|
||||
import com.songoda.epicvouchers.utils.Methods;
|
||||
import com.songoda.epicvouchers.utils.SoundUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -15,20 +14,30 @@ import org.bukkit.inventory.ItemStack;
|
|||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
public class VoucherExecutor {
|
||||
import java.util.logging.Level;
|
||||
|
||||
public static void redeemVoucher(Player player, Voucher voucher, ItemStack item, boolean manual) {
|
||||
EpicVouchers instance = EpicVouchers.getInstance();
|
||||
public class VoucherExecutor {
|
||||
private final EpicVouchers instance;
|
||||
|
||||
public VoucherExecutor(EpicVouchers instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public void redeemVoucher(Player player, Voucher voucher, ItemStack item, boolean manual) {
|
||||
try {
|
||||
VoucherRedeemEvent event = new VoucherRedeemEvent(player, voucher.getName(true), item, manual);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean duplication = false;
|
||||
|
||||
if (!player.getItemInHand().isSimilar(item)) {
|
||||
duplication = true;
|
||||
}
|
||||
|
||||
if (!duplication) {
|
||||
if (manual) {
|
||||
instance.getCooldowns().addCooldown(player.getUniqueId(), voucher);
|
||||
|
@ -43,16 +52,21 @@ public class VoucherExecutor {
|
|||
player.updateInventory();
|
||||
}
|
||||
}
|
||||
|
||||
if (voucher.isFeedPlayer()) {
|
||||
player.setFoodLevel(20);
|
||||
}
|
||||
|
||||
if (voucher.isHealPlayer()) {
|
||||
player.setHealth(player.getMaxHealth());
|
||||
}
|
||||
|
||||
if (voucher.isSmiteEffect()) {
|
||||
player.getWorld().strikeLightningEffect(player.getLocation());
|
||||
}
|
||||
|
||||
String name = player.getName();
|
||||
|
||||
for (String broadcast : voucher.getBroadcasts(true)) {
|
||||
broadcast = broadcast.replaceAll("%player%", name);
|
||||
broadcast = broadcast.replaceAll("%voucher%", voucher.getName(true));
|
||||
|
@ -60,74 +74,82 @@ public class VoucherExecutor {
|
|||
everyone.sendMessage(broadcast);
|
||||
}
|
||||
}
|
||||
|
||||
for (String message : voucher.getMessages(true)) {
|
||||
message = message.replaceAll("%player%", name);
|
||||
message = message.replaceAll("%voucher%", voucher.getName(true));
|
||||
player.sendMessage(message);
|
||||
}
|
||||
|
||||
for (String command : voucher.getCommands()) {
|
||||
command = command.replaceAll("%player%", name);
|
||||
command = command.replaceAll("%voucher%", voucher.getName(false));
|
||||
command = command.replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(false));
|
||||
|
||||
if (command.startsWith("[player]")) {
|
||||
command = command.replace("[player]", "");
|
||||
player.performCommand(command);
|
||||
} else if (command.startsWith("[op]")) {
|
||||
command = command.replace("[op]", "");
|
||||
boolean wasop = player.isOp();
|
||||
PreventHacks.addCommand(player.getUniqueId(), command);
|
||||
boolean wasOp = player.isOp();
|
||||
PlayerCommandListener.addCommand(player.getUniqueId(), command);
|
||||
player.setOp(true);
|
||||
player.performCommand(command);
|
||||
if (!wasop) {
|
||||
|
||||
if (!wasOp) {
|
||||
player.setOp(false);
|
||||
}
|
||||
PreventHacks.removeCommand(player.getUniqueId());
|
||||
|
||||
PlayerCommandListener.removeCommand(player.getUniqueId());
|
||||
} else if (command.startsWith("[chat]")) {
|
||||
command = command.replace("[chat]", "");
|
||||
player.chat(command);
|
||||
} else if (command.startsWith("[delay]")) {
|
||||
command = command.replace("[delay]", "");
|
||||
//command = command.replace("[delay]", "");
|
||||
throw new UnsupportedOperationException("delay is not supported yet");
|
||||
} else {
|
||||
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command);
|
||||
}
|
||||
}
|
||||
String actionbar = voucher.getActionBar();
|
||||
actionbar = actionbar.replaceAll("%player%", name);
|
||||
actionbar = actionbar.replaceAll("%voucher%", voucher.getName(true));
|
||||
|
||||
String actionbar = voucher.getActionBar().replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(true));
|
||||
Bountiful.sendActionBar(player, actionbar);
|
||||
String title = voucher.getTitle();
|
||||
title = title.replaceAll("%player%", name);
|
||||
title = title.replaceAll("%voucher%", voucher.getName(true));
|
||||
String subtitle = voucher.getSubTitle();
|
||||
subtitle = subtitle.replaceAll("%player%", name);
|
||||
subtitle = subtitle.replaceAll("%voucher%", voucher.getName(true));
|
||||
|
||||
String title = voucher.getTitle().replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(true));
|
||||
String subtitle = voucher.getSubTitle().replaceAll("%player%", name).replaceAll("%voucher%", voucher.getName(true));
|
||||
|
||||
int fadein = voucher.getTitleFadeIn();
|
||||
int stay = voucher.getTitleStay();
|
||||
int fadeout = voucher.getTitleFadeOut();
|
||||
|
||||
Bountiful.sendTitle(player, fadein, stay, fadeout, title, subtitle);
|
||||
|
||||
String sound = voucher.getSound();
|
||||
int pitch = voucher.getSoundPitch();
|
||||
SoundUtils.playSound(player, sound, pitch);
|
||||
|
||||
String particle = voucher.getParticle();
|
||||
|
||||
if (particle != null && !particle.isEmpty()) {
|
||||
int amount = voucher.getParticleAmount();
|
||||
player.getWorld().playEffect(player.getLocation(), Effect.valueOf(particle), amount);
|
||||
}
|
||||
|
||||
String effect = voucher.getEffect();
|
||||
|
||||
if (!effect.isEmpty()) {
|
||||
int amplifier = voucher.getEffectAmplifer();
|
||||
int duration = voucher.getEffectDuration() * 20;
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.getByName(effect), duration, amplifier));
|
||||
}
|
||||
System.out.println(Methods.formatText("&f" + player.getName() + " has successfully redeemed the voucher " + voucher.getKey() + "."));
|
||||
|
||||
instance.getLogger().log(Level.INFO, Methods.formatText("&f" + player.getName() + " has successfully redeemed the voucher " + voucher.getKey() + "."));
|
||||
instance.getConnections().saveRedeem(player, voucher.getName(true));
|
||||
} else {
|
||||
System.out.println(Methods.formatText("&c" + player.getName() + " has failed to duplicate the voucher " + voucher.getKey() + "."));
|
||||
instance.getLogger().log(Level.WARNING, Methods.formatText("&c" + player.getName() + " has failed to duplicate the voucher " + voucher.getKey() + "."));
|
||||
}
|
||||
} catch (Exception error) {
|
||||
System.out.println(Methods.formatText("&cFailed to redeem the voucher " + voucher.getKey() + " for the player " + player.getName() + "."));
|
||||
Debugger.runReport(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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,13 @@
|
|||
package com.songoda.epicvouchers.voucher;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
public class VoucherManager {
|
||||
|
||||
private final Map<String, Voucher> registeredVouchers = new HashMap<>();
|
||||
|
||||
public Voucher addVoucher(String name, Voucher voucher) {
|
||||
return registeredVouchers.put(name, voucher);
|
||||
}
|
||||
|
||||
public Voucher removeVoucher(Voucher voucher) {
|
||||
return registeredVouchers.remove(voucher);
|
||||
public void addVoucher(String name, Voucher voucher) {
|
||||
registeredVouchers.put(name, voucher);
|
||||
}
|
||||
|
||||
public Voucher getVoucher(String name) {
|
||||
|
|
|
@ -1,39 +1,39 @@
|
|||
#General Messages
|
||||
|
||||
general.nametag.prefix = "&8[&6EpicVouchers&8]"
|
||||
general.nametag.prefix= "&8[&6EpicVouchers&8]"
|
||||
|
||||
#Interface Messages
|
||||
|
||||
interface.confirmsettings.title = "&6Confirmation"
|
||||
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.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.confirmsettings.title= "&6Confirmation"
|
||||
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.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."
|
||||
|
||||
#Command Messages
|
||||
|
||||
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.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).";
|
||||
command.list.list = "&7List of all vouchers: &6%list%&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.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).";
|
||||
command.list.list= "&7List of all vouchers: &6%list%&7."
|
||||
|
||||
#Event Messages
|
||||
|
||||
event.general.nopermission = "&cYou do not have permission to do that."
|
||||
event.general.cooldown = "&7Please wait &6%time%&7 seconds before redeeming a new voucher."
|
||||
event.general.nopermission= "&cYou do not have permission to do that."
|
||||
event.general.cooldown= "&7Please wait &6%time%&7 seconds before redeeming a new voucher."
|
Loading…
Reference in New Issue