Added new settings manager and removed the debugger.

This commit is contained in:
Brianna 2019-07-20 22:45:10 -04:00
parent 5304738629
commit 729040556c
16 changed files with 714 additions and 633 deletions

View File

@ -17,6 +17,7 @@ import com.songoda.ultimatekits.listeners.EntityListeners;
import com.songoda.ultimatekits.listeners.InteractListeners;
import com.songoda.ultimatekits.utils.*;
import com.songoda.ultimatekits.utils.locale.Locale;
import com.songoda.ultimatekits.utils.settings.SettingsManager;
import com.songoda.ultimatekits.utils.updateModules.LocaleModule;
import com.songoda.update.Plugin;
import com.songoda.update.SongodaUpdate;
@ -88,8 +89,7 @@ public class UltimateKits extends JavaPlugin {
new ParticleHandler(this);
this.displayItemHandler = new DisplayItemHandler(this);
settingsManager = new SettingsManager(this);
settingsManager.updateSettings();
this.commandManager = new CommandManager(this);
setupConfig();
new Locale(this, "en_US");
@ -155,28 +155,23 @@ public class UltimateKits extends JavaPlugin {
* Register kit into KitManager from Configuration.
*/
for (String kitName : kitFile.getConfig().getConfigurationSection("Kits").getKeys(false)) {
try {
int delay = kitFile.getConfig().getInt("Kits." + kitName + ".delay");
String title = kitFile.getConfig().getString("Kits." + kitName + ".title");
String link = kitFile.getConfig().getString("Kits." + kitName + ".link");
Material material = kitFile.getConfig().contains("Kits." + kitName + ".displayItem") ? Material.valueOf(kitFile.getConfig().getString("Kits." + kitName + ".displayItem")) : null;
boolean hidden = kitFile.getConfig().getBoolean("Kits." + kitName + ".hidden");
double price = kitFile.getConfig().getDouble("Kits." + kitName + ".price");
List<String> strContents = kitFile.getConfig().getStringList("Kits." + kitName + ".items");
String kitAnimation = kitFile.getConfig().getString("Kits." + kitName + ".animation", KitAnimation.NONE.name());
int delay = kitFile.getConfig().getInt("Kits." + kitName + ".delay");
String title = kitFile.getConfig().getString("Kits." + kitName + ".title");
String link = kitFile.getConfig().getString("Kits." + kitName + ".link");
Material material = kitFile.getConfig().contains("Kits." + kitName + ".displayItem") ? Material.valueOf(kitFile.getConfig().getString("Kits." + kitName + ".displayItem")) : null;
boolean hidden = kitFile.getConfig().getBoolean("Kits." + kitName + ".hidden");
double price = kitFile.getConfig().getDouble("Kits." + kitName + ".price");
List<String> strContents = kitFile.getConfig().getStringList("Kits." + kitName + ".items");
String kitAnimation = kitFile.getConfig().getString("Kits." + kitName + ".animation", KitAnimation.NONE.name());
List<KitItem> contents = new ArrayList<>();
List<KitItem> contents = new ArrayList<>();
for (String string : strContents) {
contents.add(new KitItem(string));
}
Kit kit = new Kit(kitName, title, link, price, material, delay, hidden, contents, KitAnimation.valueOf(kitAnimation));
kitManager.addKit(kit);
} catch (Exception ex) {
console.sendMessage(Methods.formatText("&cYour kit &4" + kitName + " &cis setup incorrectly."));
Debugger.runReport(ex);
for (String string : strContents) {
contents.add(new KitItem(string));
}
Kit kit = new Kit(kitName, title, link, price, material, delay, hidden, contents, KitAnimation.valueOf(kitAnimation));
kitManager.addKit(kit);
}
/*
@ -306,7 +301,7 @@ public class UltimateKits extends JavaPlugin {
}
private void setupConfig() {
settingsManager.updateSettings();
settingsManager.reloadConfig();
getConfig().options().copyDefaults(true);
saveConfig();
}
@ -315,17 +310,13 @@ public class UltimateKits extends JavaPlugin {
* Reload plugin yaml files.
*/
public void reload() {
try {
reloadConfig();
kitFile.reloadConfig();
reloadConfig();
kitFile.reloadConfig();
this.locale = Locale.getLocale(getConfig().getString("System.Language Mode"));
this.locale.reloadMessages();
this.setupConfig();
loadFromFile();
} catch (Exception ex) {
Debugger.runReport(ex);
}
this.locale = Locale.getLocale(getConfig().getString("System.Language Mode"));
this.locale.reloadMessages();
this.setupConfig();
loadFromFile();
}
/**

View File

@ -5,7 +5,6 @@ import com.earth2me.essentials.Kit;
import com.earth2me.essentials.MetaItemStack;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.conversion.Hook;
import com.songoda.ultimatekits.utils.Debugger;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
@ -39,7 +38,7 @@ public class EssentialsHook implements Hook {
stacks.add(metaStack.getItemStack());
}
} catch (Exception e) {
Debugger.runReport(e);
e.printStackTrace();
}
return stacks;
}

View File

@ -3,7 +3,6 @@ package com.songoda.ultimatekits.handlers;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.kit.Kit;
import com.songoda.ultimatekits.kit.KitBlockData;
import com.songoda.ultimatekits.utils.Debugger;
import com.songoda.ultimatekits.utils.Methods;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -31,13 +30,8 @@ public class DisplayItemHandler {
}
private void displayItems() {
try {
for (KitBlockData kitBlockData : instance.getKitManager().getKitLocations().values()) {
displayItem(kitBlockData);
}
} catch (Exception ex) {
Debugger.runReport(ex);
}
for (KitBlockData kitBlockData : instance.getKitManager().getKitLocations().values())
displayItem(kitBlockData);
}
public void displayItem(KitBlockData kitBlockData) {

View File

@ -2,7 +2,6 @@ package com.songoda.ultimatekits.handlers;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.kit.KitBlockData;
import com.songoda.ultimatekits.utils.Debugger;
import com.songoda.ultimatekits.utils.ServerVersion;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -23,39 +22,30 @@ public class ParticleHandler {
}
private void applyParticles() {
try {
int amt = plugin.getConfig().getInt("data.particlesettings.ammount");
String type = plugin.getConfig().getString("data.particlesettings.type");
int amt = plugin.getConfig().getInt("data.particlesettings.ammount");
String type = plugin.getConfig().getString("data.particlesettings.type");
Map<Location, KitBlockData> kitBlocks = plugin.getKitManager().getKitLocations();
for (KitBlockData kitBlockData : kitBlocks.values()) {
if (kitBlockData.getLocation().getWorld() == null || !kitBlockData.hasParticles()) continue;
Map<Location, KitBlockData> kitBlocks = plugin.getKitManager().getKitLocations();
for (KitBlockData kitBlockData : kitBlocks.values()) {
if (kitBlockData.getLocation().getWorld() == null || !kitBlockData.hasParticles()) continue;
Location location = kitBlockData.getLocation();
location.add(.5, 0, .5);
Location location = kitBlockData.getLocation();
location.add(.5, 0, .5);
if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
location.getWorld().spawnParticle(org.bukkit.Particle.valueOf(type), location, amt, 0.25, 0.25, 0.25);
if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
location.getWorld().spawnParticle(org.bukkit.Particle.valueOf(type), location, amt, 0.25, 0.25, 0.25);
}
} catch (Exception ex) {
Debugger.runReport(ex);
}
}
private void checkDefaults() {
try {
if (plugin.getConfig().getInt("data.particlesettings.ammount") == 0) {
plugin.getConfig().set("data.particlesettings.ammount", 25);
plugin.saveConfig();
}
if (plugin.getConfig().getString("data.particlesettings.type") != null) return;
plugin.getConfig().set("data.particlesettings.type", "SPELL_WITCH");
if (plugin.getConfig().getInt("data.particlesettings.ammount") == 0) {
plugin.getConfig().set("data.particlesettings.ammount", 25);
plugin.saveConfig();
} catch (Exception ex) {
Debugger.runReport(ex);
}
if (plugin.getConfig().getString("data.particlesettings.type") != null) return;
plugin.getConfig().set("data.particlesettings.type", "SPELL_WITCH");
plugin.saveConfig();
}
}

View File

@ -2,7 +2,6 @@ package com.songoda.ultimatekits.key;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.kit.Kit;
import com.songoda.ultimatekits.utils.Debugger;
import com.songoda.ultimatekits.utils.Methods;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
@ -32,46 +31,41 @@ public class Key {
public ItemStack getKeyItem(Kit kit, int amt) {
UltimateKits plugin = UltimateKits.getInstance();
ItemStack is = null;
try {
is = new ItemStack(Material.TRIPWIRE_HOOK, amt);
ItemStack is = new ItemStack(Material.TRIPWIRE_HOOK, amt);
String kitName;
if (kit != null)
kitName = Methods.formatText(kit.getShowableName(), true);
else
kitName = "Any";
String kitName;
if (kit != null)
kitName = Methods.formatText(kit.getShowableName(), true);
else
kitName = "Any";
ItemMeta meta = is.getItemMeta();
meta.setDisplayName(plugin.getLocale().getMessage("interface.key.title")
.processPlaceholder("kit", kitName).getMessage());
ItemMeta meta = is.getItemMeta();
meta.setDisplayName(plugin.getLocale().getMessage("interface.key.title")
.processPlaceholder("kit", kitName).getMessage());
meta.addEnchant(Enchantment.DURABILITY, 1, true);
List<String> lore = new ArrayList<>();
lore.add(Methods.formatText("&e" + name + " &fKey"));
meta.addEnchant(Enchantment.DURABILITY, 1, true);
List<String> lore = new ArrayList<>();
lore.add(Methods.formatText("&e" + name + " &fKey"));
String desc1 = plugin.getLocale().getMessage("interface.key.description1")
.processPlaceholder("kit", kitName).getMessage();
String desc1 = plugin.getLocale().getMessage("interface.key.description1")
.processPlaceholder("kit", kitName).getMessage();
if (kitName.equals("Any"))
desc1 = desc1.replaceAll("\\[.*?\\]", "");
else
desc1 = desc1.replace("[", "").replace("]", "");
if (kitName.equals("Any"))
desc1 = desc1.replaceAll("\\[.*?\\]", "");
else
desc1 = desc1.replace("[", "").replace("]", "");
lore.add(Methods.formatText(desc1));
if (this.amt == -1)
lore.add(plugin.getLocale().getMessage("interface.key.description2").getMessage());
else
lore.add(plugin.getLocale().getMessage("interface.key.description3").getMessage());
if (kitAmount > 1)
lore.add(plugin.getLocale().getMessage("interface.key.description4")
.processPlaceholder("amt", this.kitAmount).getMessage());
meta.setLore(lore);
lore.add(Methods.formatText(desc1));
if (this.amt == -1)
lore.add(plugin.getLocale().getMessage("interface.key.description2").getMessage());
else
lore.add(plugin.getLocale().getMessage("interface.key.description3").getMessage());
if (kitAmount > 1)
lore.add(plugin.getLocale().getMessage("interface.key.description4")
.processPlaceholder("amt", this.kitAmount).getMessage());
meta.setLore(lore);
is.setItemMeta(meta);
} catch (Exception ex) {
Debugger.runReport(ex);
}
is.setItemMeta(meta);
return is;
}

View File

@ -8,7 +8,6 @@ import com.songoda.ultimatekits.kit.type.KitContentCommand;
import com.songoda.ultimatekits.kit.type.KitContentEconomy;
import com.songoda.ultimatekits.kit.type.KitContentItem;
import com.songoda.ultimatekits.tasks.CrateAnimateTask;
import com.songoda.ultimatekits.utils.Debugger;
import com.songoda.ultimatekits.utils.Methods;
import com.songoda.ultimatekits.utils.ServerVersion;
import com.songoda.ultimatekits.utils.gui.AbstractGUI;
@ -58,31 +57,27 @@ public class Kit {
}
public void buy(Player player) {
try {
if (hasPermission(player) && plugin.getConfig().getBoolean("Main.Allow Players To Receive Kits For Free If They Have Permission")) {
processGenericUse(player, false);
return;
}
if (hasPermission(player) && plugin.getConfig().getBoolean("Main.Allow Players To Receive Kits For Free If They Have Permission")) {
processGenericUse(player, false);
return;
}
if (!player.hasPermission("ultimatekits.buy." + name)) {
UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")
.sendPrefixedMessage(player);
return;
}
if (!player.hasPermission("ultimatekits.buy." + name)) {
UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")
.sendPrefixedMessage(player);
return;
}
if (link != null) {
player.sendMessage("");
plugin.getLocale().newMessage("&a" + link).sendPrefixedMessage(player);
player.sendMessage("");
player.closeInventory();
} else if (price != 0) {
new GUIConfirmBuy(plugin, player, this);
} else {
UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")
.sendPrefixedMessage(player);
}
} catch (Exception ex) {
Debugger.runReport(ex);
if (link != null) {
player.sendMessage("");
plugin.getLocale().newMessage("&a" + link).sendPrefixedMessage(player);
player.sendMessage("");
player.closeInventory();
} else if (price != 0) {
new GUIConfirmBuy(plugin, player, this);
} else {
UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")
.sendPrefixedMessage(player);
}
}
@ -192,91 +187,78 @@ public class Kit {
@SuppressWarnings("Duplicates")
public void display(Player player, AbstractGUI back) {
try {
if (!player.hasPermission("previewkit.use")
&& !player.hasPermission("previewkit." + name)
&& !player.hasPermission("ultimatekits.use")
&& !player.hasPermission("ultimatekits." + name)) {
UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")
.sendPrefixedMessage(player);
return;
}
if (name == null) {
plugin.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player);
return;
}
plugin.getLocale().getMessage("event.preview.kit")
.processPlaceholder("kit", showableName).sendPrefixedMessage(player);
new GUIDisplayKit(plugin, back, player, this);
} catch (Exception ex) {
Debugger.runReport(ex);
if (!player.hasPermission("previewkit.use")
&& !player.hasPermission("previewkit." + name)
&& !player.hasPermission("ultimatekits.use")
&& !player.hasPermission("ultimatekits." + name)) {
UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")
.sendPrefixedMessage(player);
return;
}
if (name == null) {
plugin.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player);
return;
}
plugin.getLocale().getMessage("event.preview.kit")
.processPlaceholder("kit", showableName).sendPrefixedMessage(player);
new GUIDisplayKit(plugin, back, player, this);
}
public void saveKit(List<ItemStack> items) {
try {
List<KitItem> list = new ArrayList<>();
for (ItemStack is : items) {
if (is != null && is.getType() != Material.AIR) {
List<KitItem> list = new ArrayList<>();
for (ItemStack is : items) {
if (is != null && is.getType() != Material.AIR) {
if (is.getItemMeta().hasLore()) {
ItemMeta meta = is.getItemMeta();
List<String> newLore = new ArrayList<>();
for (String line : meta.getLore()) {
if (line.equals(Methods.convertToInvisibleString("----"))) break;
newLore.add(line);
}
meta.setLore(newLore);
is.setItemMeta(meta);
if (is.getItemMeta().hasLore()) {
ItemMeta meta = is.getItemMeta();
List<String> newLore = new ArrayList<>();
for (String line : meta.getLore()) {
if (line.equals(Methods.convertToInvisibleString("----"))) break;
newLore.add(line);
}
meta.setLore(newLore);
is.setItemMeta(meta);
}
if (is.getType() == Material.PAPER && ChatColor.stripColor(is.getItemMeta().getDisplayName()).endsWith("Command")) {
StringBuilder command = new StringBuilder();
for (String line : is.getItemMeta().getLore()) {
command.append(line);
}
list.add(new KitItem(is, ChatColor.stripColor(command.toString())));
} else if (is.getType() == Material.PAPER && ChatColor.stripColor(is.getItemMeta().getDisplayName()).endsWith("Money")) {
String money = is.getItemMeta().getLore().get(0);
list.add(new KitItem(is, ChatColor.stripColor(money)));
} else {
list.add(new KitItem(is));
if (is.getType() == Material.PAPER && ChatColor.stripColor(is.getItemMeta().getDisplayName()).endsWith("Command")) {
StringBuilder command = new StringBuilder();
for (String line : is.getItemMeta().getLore()) {
command.append(line);
}
list.add(new KitItem(is, ChatColor.stripColor(command.toString())));
} else if (is.getType() == Material.PAPER && ChatColor.stripColor(is.getItemMeta().getDisplayName()).endsWith("Money")) {
String money = is.getItemMeta().getLore().get(0);
list.add(new KitItem(is, ChatColor.stripColor(money)));
} else {
list.add(new KitItem(is));
}
}
contents = list;
} catch (Exception e) {
Debugger.runReport(e);
}
contents = list;
}
public List<ItemStack> getReadableContents(Player player, boolean preview, boolean commands, boolean moveable) {
List<ItemStack> stacks = new ArrayList<>();
try {
for (KitItem item : getContents()) {
if ((!item.getSerialized().startsWith("/") && !item.getSerialized().startsWith(plugin.getConfig().getString("Main.Currency Symbol"))) || commands) { //ToDO: I doubt this is correct.
ItemStack stack = moveable ? item.getMoveableItem() : item.getItem();
if (preview) stack = item.getItemForDisplay();
for (KitItem item : getContents()) {
if ((!item.getSerialized().startsWith("/") && !item.getSerialized().startsWith(plugin.getConfig().getString("Main.Currency Symbol"))) || commands) { //ToDO: I doubt this is correct.
ItemStack stack = moveable ? item.getMoveableItem() : item.getItem();
if (preview) stack = item.getItemForDisplay();
ItemStack fin = stack;
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI") && stack.getItemMeta().getLore() != null) {
ArrayList<String> lore2 = new ArrayList<>();
ItemMeta meta2 = stack.getItemMeta();
for (String lor : stack.getItemMeta().getLore()) {
lor = PlaceholderAPI.setPlaceholders(player, lor.replace(" ", "_")).replace("_", " ");
lore2.add(lor);
}
meta2.setLore(lore2);
fin.setItemMeta(meta2);
ItemStack fin = stack;
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI") && stack.getItemMeta().getLore() != null) {
ArrayList<String> lore2 = new ArrayList<>();
ItemMeta meta2 = stack.getItemMeta();
for (String lor : stack.getItemMeta().getLore()) {
lor = PlaceholderAPI.setPlaceholders(player, lor.replace(" ", "_")).replace("_", " ");
lore2.add(lor);
}
stacks.add(fin);
meta2.setLore(lore2);
fin.setItemMeta(meta2);
}
stacks.add(fin);
}
} catch (Exception e) {
Debugger.runReport(e);
}
return stacks;
}
@ -286,82 +268,77 @@ public class Kit {
}
private boolean giveKit(Player player, Key key) {
try {
if (plugin.getConfig().getBoolean("Main.Prevent The Redeeming of a Kit When Inventory Is Full") && !hasRoom(player)) {
plugin.getLocale().getMessage("event.claim.full").sendPrefixedMessage(player);
return false;
}
if (plugin.getConfig().getBoolean("Main.Sounds Enabled")
&& kitAnimation == KitAnimation.NONE
&& UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_12))
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F);
if (plugin.getConfig().getBoolean("Main.Prevent The Redeeming of a Kit When Inventory Is Full") && !hasRoom(player)) {
plugin.getLocale().getMessage("event.claim.full").sendPrefixedMessage(player);
return false;
}
if (plugin.getConfig().getBoolean("Main.Sounds Enabled")
&& kitAnimation == KitAnimation.NONE
&& UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_12))
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F);
List<KitItem> innerContents = new ArrayList<>(getContents());
int amt = innerContents.size();
int amtToGive = key == null ? amt : key.getAmt();
List<KitItem> innerContents = new ArrayList<>(getContents());
int amt = innerContents.size();
int amtToGive = key == null ? amt : key.getAmt();
if (amt != amtToGive || kitAnimation != KitAnimation.NONE)
Collections.shuffle(innerContents);
if (amt != amtToGive || kitAnimation != KitAnimation.NONE)
Collections.shuffle(innerContents);
for (KitItem item : innerContents) {
if (amtToGive == 0) continue;
int ch = item.getChance() == 0 ? 100 : item.getChance();
double rand = Math.random() * 100;
if (rand - ch < 0 || ch == 100) {
if (item.getContent() instanceof KitContentEconomy) {
try {
Methods.pay(player, ((KitContentEconomy) item.getContent()).getAmount());
plugin.getLocale().getMessage("event.claim.eco")
.processPlaceholder("amt", Methods.formatEconomy(((KitContentEconomy) item.getContent()).getAmount()))
.sendPrefixedMessage(player);
} catch (NumberFormatException ex) {
Debugger.runReport(ex);
}
amtToGive--;
continue;
} else if (item.getContent() instanceof KitContentCommand) {
String parsed = ((KitContentCommand) item.getContent()).getCommand();
parsed = parsed.replace("{player}", player.getName());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), parsed);
amtToGive--;
continue;
for (KitItem item : innerContents) {
if (amtToGive == 0) continue;
int ch = item.getChance() == 0 ? 100 : item.getChance();
double rand = Math.random() * 100;
if (rand - ch < 0 || ch == 100) {
if (item.getContent() instanceof KitContentEconomy) {
try {
Methods.pay(player, ((KitContentEconomy) item.getContent()).getAmount());
plugin.getLocale().getMessage("event.claim.eco")
.processPlaceholder("amt", Methods.formatEconomy(((KitContentEconomy) item.getContent()).getAmount()))
.sendPrefixedMessage(player);
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
ItemStack parseStack = ((KitContentItem) item.getContent()).getItemStack();
if (parseStack.hasItemMeta() && parseStack.getItemMeta().hasLore()) {
ItemMeta meta = parseStack.getItemMeta();
List<String> newLore = new ArrayList<>();
for (String str : parseStack.getItemMeta().getLore()) {
str = str.replace("{PLAYER}", player.getName()).replace("<PLAYER>", player.getName());
newLore.add(str);
}
meta.setLore(newLore);
parseStack.setItemMeta(meta);
}
if (parseStack.getType() == Material.AIR) continue;
amtToGive--;
continue;
} else if (item.getContent() instanceof KitContentCommand) {
String parsed = ((KitContentCommand) item.getContent()).getCommand();
parsed = parsed.replace("{player}", player.getName());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), parsed);
amtToGive--;
continue;
}
if (kitAnimation != KitAnimation.NONE) {
new CrateAnimateTask(plugin, player, this, item.getItem());
return true;
} else {
Map<Integer, ItemStack> overfilled = player.getInventory().addItem(item.getItem());
for (ItemStack item2 : overfilled.values()) {
player.getWorld().dropItemNaturally(player.getLocation(), item2);
}
ItemStack parseStack = ((KitContentItem) item.getContent()).getItemStack();
if (parseStack.hasItemMeta() && parseStack.getItemMeta().hasLore()) {
ItemMeta meta = parseStack.getItemMeta();
List<String> newLore = new ArrayList<>();
for (String str : parseStack.getItemMeta().getLore()) {
str = str.replace("{PLAYER}", player.getName()).replace("<PLAYER>", player.getName());
newLore.add(str);
}
meta.setLore(newLore);
parseStack.setItemMeta(meta);
}
if (parseStack.getType() == Material.AIR) continue;
amtToGive--;
if (kitAnimation != KitAnimation.NONE) {
new CrateAnimateTask(plugin, player, this, item.getItem());
return true;
} else {
Map<Integer, ItemStack> overfilled = player.getInventory().addItem(item.getItem());
for (ItemStack item2 : overfilled.values()) {
player.getWorld().dropItemNaturally(player.getLocation(), item2);
}
}
}
player.updateInventory();
return true;
} catch (Exception e) {
Debugger.runReport(e);
}
return false;
player.updateInventory();
return true;
}
public void updateDelay(Player player) {
@ -384,13 +361,9 @@ public class Kit {
}
public boolean hasPermission(Player player) {
try {
if (player.hasPermission("uc.kit." + name.toLowerCase())) return true;
if (player.hasPermission("essentials.kit." + name.toLowerCase())) return true;
if (player.hasPermission("ultimatekits.kit." + name.toLowerCase())) return true;
} catch (Exception e) {
Debugger.runReport(e);
}
if (player.hasPermission("uc.kit." + name.toLowerCase())) return true;
if (player.hasPermission("essentials.kit." + name.toLowerCase())) return true;
if (player.hasPermission("ultimatekits.kit." + name.toLowerCase())) return true;
return false;
}

View File

@ -3,8 +3,6 @@ package com.songoda.ultimatekits.listeners;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.kit.Kit;
import com.songoda.ultimatekits.kit.KitBlockData;
import com.songoda.ultimatekits.utils.Debugger;
import com.songoda.ultimatekits.utils.Methods;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -25,35 +23,26 @@ public class BlockListeners implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
try {
Block block = event.getBlock();
KitBlockData kitBlockData = instance.getKitManager().getKit(block.getLocation());
if (kitBlockData == null) return;
Kit kit = kitBlockData.getKit();
Block block = event.getBlock();
KitBlockData kitBlockData = instance.getKitManager().getKit(block.getLocation());
if (kitBlockData == null) return;
Kit kit = kitBlockData.getKit();
if (instance.getHologram() != null)
instance.getHologram().remove(kitBlockData);
if (instance.getHologram() != null)
instance.getHologram().remove(kitBlockData);
instance.getKitManager().removeKitFromLocation(block.getLocation());
instance.getKitManager().removeKitFromLocation(block.getLocation());
instance.getLocale().newMessage("&8Kit &9" + kit.getName() + " &8unassigned from: &a" + block.getType() + "&8.")
.sendPrefixedMessage(event.getPlayer());
} catch (Exception e) {
Debugger.runReport(e);
}
instance.getLocale().newMessage("&8Kit &9" + kit.getName() + " &8unassigned from: &a" + block.getType() + "&8.")
.sendPrefixedMessage(event.getPlayer());
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent e) {
try {
Block b = e.getBlockAgainst();
KitBlockData kitBlockData = instance.getKitManager().getKit(b.getLocation());
if (kitBlockData != null) {
e.setCancelled(true);
}
} catch (Exception ee) {
Debugger.runReport(ee);
Block block = e.getBlockAgainst();
KitBlockData kitBlockData = instance.getKitManager().getKit(block.getLocation());
if (kitBlockData != null) {
e.setCancelled(true);
}
}
}

View File

@ -1,7 +1,6 @@
package com.songoda.ultimatekits.listeners;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.utils.Debugger;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
@ -19,12 +18,8 @@ public class ChatListeners implements Listener {
@EventHandler
public void onCommandPreprocess(AsyncPlayerChatEvent event) {
try {
if (event.getMessage().equalsIgnoreCase("/kit") || event.getMessage().equalsIgnoreCase("/kit")) {
event.setCancelled(true);
}
} catch (Exception e) {
Debugger.runReport(e);
if (event.getMessage().equalsIgnoreCase("/kit") || event.getMessage().equalsIgnoreCase("/kit")) {
event.setCancelled(true);
}
}
}

View File

@ -1,7 +1,6 @@
package com.songoda.ultimatekits.listeners;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.utils.Debugger;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
@ -21,9 +20,8 @@ public class EntityListeners implements Listener {
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerEntityInteract(EntityDamageEvent e) {
try {
if (e.getEntity().getType() != EntityType.ARMOR_STAND || instance.getConfig().getString("data.hologramHandler") == null) {
public void onPlayerEntityInteract(EntityDamageEvent event) {
if (event.getEntity().getType() != EntityType.ARMOR_STAND || instance.getConfig().getString("data.hologramHandler") == null) {
return;
}
ConfigurationSection section = instance.getConfig().getConfigurationSection("data.hologramHandler");
@ -32,19 +30,15 @@ public class EntityListeners implements Listener {
World world = Bukkit.getServer().getWorld(str[1].substring(0, str[1].length() - 1));
double x = Double.parseDouble(str[2].substring(0, str[2].length() - 1)) + .5;
double z = Double.parseDouble(str[4]) + .5;
if (world == e.getEntity().getLocation().getWorld() && x == e.getEntity().getLocation().getX() && z == e.getEntity().getLocation().getZ()) {
e.setCancelled(true);
if (world == event.getEntity().getLocation().getWorld() && x == event.getEntity().getLocation().getX() && z == event.getEntity().getLocation().getZ()) {
event.setCancelled(true);
}
}
} catch (Exception ex) {
Debugger.runReport(ex);
}
}
@EventHandler
public void onPlayerEntityInteract(PlayerInteractAtEntityEvent e) {
try {
if (e.getRightClicked().getType() != EntityType.ARMOR_STAND || instance.getConfig().getString("data.hologramHandler") == null) {
public void onPlayerEntityInteract(PlayerInteractAtEntityEvent event) {
if (event.getRightClicked().getType() != EntityType.ARMOR_STAND || instance.getConfig().getString("data.hologramHandler") == null) {
return;
}
ConfigurationSection section = instance.getConfig().getConfigurationSection("data.hologramHandler");
@ -53,12 +47,9 @@ public class EntityListeners implements Listener {
World w = Bukkit.getServer().getWorld(str[1].substring(0, str[1].length() - 1));
double x = Double.parseDouble(str[2].substring(0, str[2].length() - 1)) + .5;
double z = Double.parseDouble(str[4]) + .5;
if (w == e.getRightClicked().getLocation().getWorld() && x == e.getRightClicked().getLocation().getX() && z == e.getRightClicked().getLocation().getZ()) {
e.setCancelled(true);
if (w == event.getRightClicked().getLocation().getWorld() && x == event.getRightClicked().getLocation().getX() && z == event.getRightClicked().getLocation().getZ()) {
event.setCancelled(true);
}
}
} catch (Exception ex) {
Debugger.runReport(ex);
}
}
}

View File

@ -5,7 +5,6 @@ import com.songoda.ultimatekits.gui.GUIBlockEditor;
import com.songoda.ultimatekits.kit.Kit;
import com.songoda.ultimatekits.kit.KitBlockData;
import com.songoda.ultimatekits.kit.KitType;
import com.songoda.ultimatekits.utils.Debugger;
import com.songoda.ultimatekits.utils.Methods;
import com.songoda.ultimatekits.utils.ServerVersion;
import org.bukkit.Material;
@ -28,69 +27,64 @@ public class InteractListeners implements Listener {
@EventHandler
public void onBlockInteract(PlayerInteractEvent event) {
try {
if (plugin.isServerVersionAtLeast(ServerVersion.V1_9)) {
if (event.getHand() == EquipmentSlot.OFF_HAND) return;
}
if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
if (event.getHand() == EquipmentSlot.OFF_HAND) return;
Block block = event.getClickedBlock();
Block block = event.getClickedBlock();
if (event.getClickedBlock() == null) return;
if (event.getClickedBlock() == null) return;
KitBlockData kitBlockData = plugin.getKitManager().getKit(block.getLocation());
KitBlockData kitBlockData = plugin.getKitManager().getKit(block.getLocation());
if (kitBlockData == null) return;
if (kitBlockData == null) return;
Kit kit = kitBlockData.getKit();
Kit kit = kitBlockData.getKit();
Player player = event.getPlayer();
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
Player player = event.getPlayer();
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
if (player.isSneaking()) return;
if (player.isSneaking()) return;
event.setCancelled(true);
if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) {
event.setCancelled(true);
if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) {
event.setCancelled(true);
kit.processKeyUse(player);
return;
}
if (kitBlockData.getType() != KitType.PREVIEW) {
if (!kit.hasPermission(player)) {
plugin.getLocale().getMessage("command.general.noperms").sendPrefixedMessage(player);
return;
}
if (kit.getNextUse(player) <= 0) {
kit.processGenericUse(player, false);
kit.updateDelay(player);
} else {
long time = kit.getNextUse(player);
plugin.getLocale().getMessage("event.crate.notyet").processPlaceholder("time",
Methods.makeReadable(time)).sendPrefixedMessage(player);
}
} else if (kit.getLink() != null || kit.getPrice() != 0) {
kit.buy(player);
} else {
kit.display(player, null);
}
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (block.getState() instanceof InventoryHolder || block.getType() == Material.ENDER_CHEST) {
event.setCancelled(true);
}
if (player.isSneaking() && player.hasPermission("ultimatekits.admin")) {
new GUIBlockEditor(plugin, player, block.getLocation());
return;
}
if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) {
event.setCancelled(true);
kit.processKeyUse(player);
return;
}
kit.display(player, null);
kit.processKeyUse(player);
return;
}
} catch (Exception x) {
Debugger.runReport(x);
if (kitBlockData.getType() != KitType.PREVIEW) {
if (!kit.hasPermission(player)) {
plugin.getLocale().getMessage("command.general.noperms").sendPrefixedMessage(player);
return;
}
if (kit.getNextUse(player) <= 0) {
kit.processGenericUse(player, false);
kit.updateDelay(player);
} else {
long time = kit.getNextUse(player);
plugin.getLocale().getMessage("event.crate.notyet").processPlaceholder("time",
Methods.makeReadable(time)).sendPrefixedMessage(player);
}
} else if (kit.getLink() != null || kit.getPrice() != 0) {
kit.buy(player);
} else {
kit.display(player, null);
}
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (block.getState() instanceof InventoryHolder || block.getType() == Material.ENDER_CHEST) {
event.setCancelled(true);
}
if (player.isSneaking() && player.hasPermission("ultimatekits.admin")) {
new GUIBlockEditor(plugin, player, block.getLocation());
return;
}
if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) {
event.setCancelled(true);
kit.processKeyUse(player);
return;
}
kit.display(player, null);
}
}
}

View File

@ -1,31 +0,0 @@
package com.songoda.ultimatekits.utils;
import com.songoda.ultimatekits.UltimateKits;
/**
* Created by songoda on 3/21/2017.
*/
public class Debugger {
public static void runReport(Exception e) {
if (isDebug()) {
System.out.println("==============================================================");
System.out.println("The following is an error encountered in UltimateKits.");
System.out.println("--------------------------------------------------------------");
e.printStackTrace();
System.out.println("==============================================================");
}
sendReport(e);
}
public static void sendReport(Exception e) {
}
public static boolean isDebug() {
UltimateKits plugin = UltimateKits.getInstance();
return plugin.getConfig().getBoolean("System.Debugger Enabled");
}
}

View File

@ -49,10 +49,10 @@ public class Methods {
ItemStack glass;
if (rainbow) {
glass = new ItemStack(UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ?
Material.LEGACY_STAINED_GLASS_PANE : Material.valueOf("STAINED_GLASS_PANE"), 1, (short) randomNum);
Material.LEGACY_STAINED_GLASS_PANE : Material.valueOf("STAINED_GLASS_PANE"), 1, (short) randomNum);
} else {
glass = new ItemStack(UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ?
Material.LEGACY_STAINED_GLASS_PANE : Material.valueOf("STAINED_GLASS_PANE"), 1, (short) type);
Material.LEGACY_STAINED_GLASS_PANE : Material.valueOf("STAINED_GLASS_PANE"), 1, (short) type);
}
ItemMeta glassmeta = glass.getItemMeta();
glassmeta.setDisplayName("§l");
@ -61,13 +61,9 @@ public class Methods {
}
public static boolean canGiveKit(Player player) {
try {
if (player.hasPermission("ultimatekits.cangive")) return true;
if (player.hasPermission("ultimatekits.cangive")) return true;
if (player.hasPermission("essentials.kit.others")) return true;
} catch (Exception e) {
Debugger.runReport(e);
}
if (player.hasPermission("essentials.kit.others")) return true;
return false;
}
@ -87,17 +83,16 @@ public class Methods {
}
/**
* Serializes the location of the block specified.
*
* @param b The block whose location is to be saved.
* @param block The block whose location is to be saved.
* @return The serialized data.
*/
public static String serializeLocation(Block b) {
if (b == null)
public static String serializeLocation(Block block) {
if (block == null)
return "";
return serializeLocation(b.getLocation());
return serializeLocation(block.getLocation());
}
/**
@ -265,11 +260,10 @@ public class Methods {
}
/**
* Fills the provided inventory with glass panes of the specified color type.
*
* @param i The inventory to fill.
* @param i The inventory to fill.
*/
public static void fillGlass(Inventory i) {
ItemStack glass = getGlass();

View File

@ -1,223 +0,0 @@
package com.songoda.ultimatekits.utils;
import com.songoda.ultimatekits.UltimateKits;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
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.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by songo on 6/4/2017.
*/
public class SettingsManager implements Listener {
private static final Pattern SETTINGS_PATTERN = Pattern.compile("(.{1,28}(?:\\s|$))|(.{0,28})", Pattern.DOTALL);
private final UltimateKits instance;
private String pluginName = "UltimateKits";
private Map<Player, String> cat = new HashMap<>();
private Map<Player, String> current = new HashMap<>();
public SettingsManager(UltimateKits plugin) {
this.instance = plugin;
Bukkit.getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
ItemStack clickedItem = event.getCurrentItem();
if (event.getInventory() != event.getWhoClicked().getOpenInventory().getTopInventory()
|| clickedItem == null || !clickedItem.hasItemMeta()
|| !clickedItem.getItemMeta().hasDisplayName()) {
return;
}
if (event.getView().getTitle().equals(pluginName + " Settings Manager")) {
event.setCancelled(true);
if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
String type = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
this.cat.put((Player) event.getWhoClicked(), type);
this.openEditor((Player) event.getWhoClicked());
} else if (event.getView().getTitle().equals(pluginName + " Settings Editor")) {
event.setCancelled(true);
if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
Player player = (Player) event.getWhoClicked();
String key = cat.get(player) + "." + ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
if (instance.getConfig().get(key).getClass().getName().equals("java.lang.Boolean")) {
this.instance.getConfig().set(key, !instance.getConfig().getBoolean(key));
this.finishEditing(player);
} else {
this.editObject(player, key);
}
}
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
if (!current.containsKey(player)) return;
String value = current.get(player);
FileConfiguration config = instance.getConfig();
if (config.isInt(value)) {
config.set(value, Integer.parseInt(event.getMessage()));
} else if (config.isDouble(value)) {
config.set(value, Double.parseDouble(event.getMessage()));
} else if (config.isString(value)) {
config.set(value, event.getMessage());
}
Bukkit.getScheduler().scheduleSyncDelayedTask(UltimateKits.getInstance(), () ->
this.finishEditing(player), 0L);
event.setCancelled(true);
}
private void finishEditing(Player player) {
this.current.remove(player);
this.instance.saveConfig();
this.openEditor(player);
}
private void editObject(Player player, String current) {
this.current.put(player, ChatColor.stripColor(current));
player.closeInventory();
player.sendMessage("");
player.sendMessage(Methods.formatText("&7Please enter a value for &6" + current + "&7."));
if (instance.getConfig().isInt(current) || instance.getConfig().isDouble(current)) {
player.sendMessage(Methods.formatText("&cUse only numbers."));
}
player.sendMessage("");
}
public void openSettingsManager(Player player) {
Inventory inventory = Bukkit.createInventory(null, 27, pluginName + " Settings Manager");
ItemStack glass = Methods.getGlass();
for (int i = 0; i < inventory.getSize(); i++) {
inventory.setItem(i, glass);
}
int slot = 10;
for (String key : instance.getConfig().getDefaultSection().getKeys(false)) {
ItemStack item = new ItemStack(instance.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.WHITE_WOOL : Material.valueOf("WOOL"), 1, (byte) (slot - 9)); //ToDo: Make this function as it was meant to.
ItemMeta meta = item.getItemMeta();
meta.setLore(Collections.singletonList(Methods.formatText("&6Click To Edit This Category.")));
meta.setDisplayName(Methods.formatText("&f&l" + key));
item.setItemMeta(meta);
inventory.setItem(slot, item);
slot++;
}
player.openInventory(inventory);
}
private void openEditor(Player player) {
Inventory inventory = Bukkit.createInventory(null, 54, pluginName + " Settings Editor");
FileConfiguration config = instance.getConfig();
int slot = 0;
for (String key : config.getConfigurationSection(cat.get(player)).getKeys(true)) {
String fKey = cat.get(player) + "." + key;
ItemStack item = new ItemStack(Material.DIAMOND_HELMET);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(Methods.formatText("&6" + key));
List<String> lore = new ArrayList<>();
if (config.isBoolean(fKey)) {
item.setType(Material.LEVER);
lore.add(Methods.formatText(config.getBoolean(fKey) ? "&atrue" : "&cfalse"));
} else if (config.isString(fKey)) {
item.setType(Material.PAPER);
lore.add(Methods.formatText("&9" + config.getString(fKey)));
} else if (config.isInt(fKey)) {
item.setType(instance.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
lore.add(Methods.formatText("&5" + config.getInt(fKey)));
}
meta.setLore(lore);
item.setItemMeta(meta);
inventory.setItem(slot, item);
slot++;
}
player.openInventory(inventory);
}
public void updateSettings() {
FileConfiguration config = instance.getConfig();
for (Setting setting : Setting.values()) {
config.addDefault(setting.setting, setting.option);
}
}
public enum Setting {
o3("Main.Only Show Players Kits They Have Permission To Use", false),
o4("Main.Allow Players To Receive Kits For Free If They Have Permission", true),
o5("Main.Dont Preview Commands In Kits", false),
o6("Main.Hologram Layout", Arrays.asList("{TITLE}", "{LEFT-CLICK}", "{RIGHT-CLICK}")),
o7("Main.Sounds Enabled", true),
o8("Main.Sound Played While Clicking In Inventories", UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? "ENTITY_ENDERMAN_TELEPORT" : "ENTITY_ENDERMEN_TELEPORT"),
o85("Main.Prevent The Redeeming of a Kit When Inventory Is Full", true),
o342("Main.Display Chance In Preview", true),
CURRENCY_SYMBOL("Main.Currency Symbol", "$"),
EXIT_ICON("Interfaces.Exit Icon", UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? "OAK_DOOR" : "WOOD_DOOR"),
BUY_ICON("Interfaces.Buy Icon", "EMERALD"),
GLASS_TYPE_1("Interfaces.Glass Type 1", 7),
GLASS_TYPE_2("Interfaces.Glass Type 2", 11),
GLASS_TYPE_3("Interfaces.Glass Type 3", 3),
o14( "Interfaces.Replace Glass Type 1 With Rainbow Glass", false),
o15("Interfaces.Do Not Use Glass Borders", false),
LANGUGE_MODE("System.Language Mode", "en_US"),
o16("System.Debugger Enabled", false);
private String setting;
private Object option;
Setting(String setting, Object option) {
this.setting = setting;
this.option = option;
}
public List<String> getStringList() {
return UltimateKits.getInstance().getConfig().getStringList(setting);
}
public boolean getBoolean() {
return UltimateKits.getInstance().getConfig().getBoolean(setting);
}
public int getInt() {
return UltimateKits.getInstance().getConfig().getInt(setting);
}
public String getString() {
return UltimateKits.getInstance().getConfig().getString(setting);
}
public char getChar() { return UltimateKits.getInstance().getConfig().getString(setting).charAt(0); }
}
}

View File

@ -0,0 +1,23 @@
package com.songoda.ultimatekits.utils.settings;
public enum Category {
MAIN("General settings and options."),
INTERFACES("These settings allow you to alter the way interfaces look.",
"They are used in GUI's to make patterns, change them up then open up a",
"GUI to see how it works."),
SYSTEM("System related settings.");
private String[] comments;
Category(String... comments) {
this.comments = comments;
}
public String[] getComments() {
return comments;
}
}

View File

@ -0,0 +1,99 @@
package com.songoda.ultimatekits.utils.settings;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.utils.ServerVersion;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public enum Setting {
ONLY_SHOW_KITS_WITH_PERMS("Main.Only Show Players Kits They Have Permission To Use", false),
KITS_FREE_WITH_PERMS("Main.Allow Players To Receive Kits For Free If They Have Permission", true),
DONT_PREVIEW_COMMANDS("Main.Dont Preview Commands In Kits", false),
HOLOGRAM_LAYOUT("Main.Hologram Layout", Arrays.asList("{TITLE}", "{LEFT-CLICK}", "{RIGHT-CLICK}")),
SOUNDS_ENABLED("Main.Sounds Enabled", true),
NO_REDEEM_WHEN_FULL("Main.Prevent The Redeeming of a Kit When Inventory Is Full", true),
CHANCE_IN_PREVIEW("Main.Display Chance In Preview", true),
CURRENCY_SYMBOL("Main.Currency Symbol", "$"),
EXIT_ICON("Interfaces.Exit Icon", UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? "OAK_DOOR" : "WOOD_DOOR"),
BUY_ICON("Interfaces.Buy Icon", "EMERALD"),
GLASS_TYPE_1("Interfaces.Glass Type 1", 7),
GLASS_TYPE_2("Interfaces.Glass Type 2", 11),
GLASS_TYPE_3("Interfaces.Glass Type 3", 3),
RAINBOW("Interfaces.Replace Glass Type 1 With Rainbow Glass", false),
DO_NOT_USE_GLASS_BORDERS("Interfaces.Do Not Use Glass Borders", false),
LANGUGE_MODE("System.Language Mode", "en_US",
"The enabled language file.",
"More language files (if available) can be found in the plugins data folder.");
private String setting;
private Object option;
private String[] comments;
Setting(String setting, Object option, String... comments) {
this.setting = setting;
this.option = option;
this.comments = comments;
}
Setting(String setting, Object option) {
this.setting = setting;
this.option = option;
this.comments = null;
}
public static Setting getSetting(String setting) {
List<Setting> settings = Arrays.stream(values()).filter(setting1 -> setting1.setting.equals(setting)).collect(Collectors.toList());
if (settings.isEmpty()) return null;
return settings.get(0);
}
public String getSetting() {
return setting;
}
public Object getOption() {
return option;
}
public String[] getComments() {
return comments;
}
public List<Integer> getIntegerList() {
return UltimateKits.getInstance().getConfig().getIntegerList(setting);
}
public List<String> getStringList() {
return UltimateKits.getInstance().getConfig().getStringList(setting);
}
public boolean getBoolean() {
return UltimateKits.getInstance().getConfig().getBoolean(setting);
}
public int getInt() {
return UltimateKits.getInstance().getConfig().getInt(setting);
}
public long getLong() {
return UltimateKits.getInstance().getConfig().getLong(setting);
}
public String getString() {
return UltimateKits.getInstance().getConfig().getString(setting);
}
public char getChar() {
return UltimateKits.getInstance().getConfig().getString(setting).charAt(0);
}
public double getDouble() {
return UltimateKits.getInstance().getConfig().getDouble(setting);
}
}

View File

@ -0,0 +1,309 @@
package com.songoda.ultimatekits.utils.settings;
import com.songoda.ultimatekits.UltimateKits;
import com.songoda.ultimatekits.utils.Methods;
import com.songoda.ultimatekits.utils.ServerVersion;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
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.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.io.*;
import java.util.*;
/**
* Created by songoda on 6/4/2017.
*/
public class SettingsManager implements Listener {
private final UltimateKits plugin;
private Map<Player, String> cat = new HashMap<>();
private Map<Player, String> current = new HashMap<>();
public SettingsManager(UltimateKits plugin) {
this.plugin = plugin;
Bukkit.getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
ItemStack clickedItem = event.getCurrentItem();
if (event.getInventory() != event.getWhoClicked().getOpenInventory().getTopInventory()
|| clickedItem == null || !clickedItem.hasItemMeta()
|| !clickedItem.getItemMeta().hasDisplayName()) {
return;
}
if (event.getView().getTitle().equals(plugin.getName() + " Settings Manager")) {
event.setCancelled(true);
if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
String type = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
this.cat.put((Player) event.getWhoClicked(), type);
this.openEditor((Player) event.getWhoClicked());
} else if (event.getView().getTitle().equals(plugin.getName() + " Settings Editor")) {
event.setCancelled(true);
if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
Player player = (Player) event.getWhoClicked();
String key = cat.get(player) + "." + ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
if (plugin.getConfig().get(key).getClass().getName().equals("java.lang.Boolean")) {
this.plugin.getConfig().set(key, !plugin.getConfig().getBoolean(key));
this.finishEditing(player);
} else {
this.editObject(player, key);
}
}
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
if (!current.containsKey(player)) return;
String value = current.get(player);
FileConfiguration config = plugin.getConfig();
if (config.isLong(value)) {
config.set(value, Long.parseLong(event.getMessage()));
} else if (config.isInt(value)) {
config.set(value, Integer.parseInt(event.getMessage()));
} else if (config.isDouble(value)) {
config.set(value, Double.parseDouble(event.getMessage()));
} else if (config.isString(value)) {
config.set(value, event.getMessage());
}
Bukkit.getScheduler().scheduleSyncDelayedTask(UltimateKits.getInstance(), () ->
this.finishEditing(player), 0L);
event.setCancelled(true);
}
private void finishEditing(Player player) {
this.current.remove(player);
this.saveConfig();
this.openEditor(player);
}
private void editObject(Player player, String current) {
this.current.put(player, ChatColor.stripColor(current));
player.closeInventory();
player.sendMessage("");
player.sendMessage(Methods.formatText("&7Please enter a value for &6" + current + "&7."));
if (plugin.getConfig().isInt(current) || plugin.getConfig().isDouble(current)) {
player.sendMessage(Methods.formatText("&cUse only numbers."));
}
player.sendMessage("");
}
public void openSettingsManager(Player player) {
Inventory inventory = Bukkit.createInventory(null, 27, plugin.getName() + " Settings Manager");
ItemStack glass = Methods.getGlass();
for (int i = 0; i < inventory.getSize(); i++) {
inventory.setItem(i, glass);
}
int slot = 10;
for (String key : plugin.getConfig().getDefaultSection().getKeys(false)) {
ItemStack item = new ItemStack(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.LEGACY_WOOL : Material.valueOf("WOOL"), 1, (byte) (slot - 9));
ItemMeta meta = item.getItemMeta();
meta.setLore(Collections.singletonList(Methods.formatText("&6Click To Edit This Category.")));
meta.setDisplayName(Methods.formatText("&f&l" + key));
item.setItemMeta(meta);
inventory.setItem(slot, item);
slot++;
}
player.openInventory(inventory);
}
private void openEditor(Player player) {
Inventory inventory = Bukkit.createInventory(null, 54, plugin.getName() + " Settings Editor");
FileConfiguration config = plugin.getConfig();
int slot = 0;
for (String key : config.getConfigurationSection(cat.get(player)).getKeys(true)) {
String fKey = cat.get(player) + "." + key;
ItemStack item = new ItemStack(Material.DIAMOND_HELMET);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(Methods.formatText("&6" + key));
List<String> lore = new ArrayList<>();
if (config.isBoolean(fKey)) {
item.setType(Material.LEVER);
lore.add(Methods.formatText(config.getBoolean(fKey) ? "&atrue" : "&cfalse"));
} else if (config.isString(fKey)) {
item.setType(Material.PAPER);
lore.add(Methods.formatText("&7" + config.getString(fKey)));
} else if (config.isInt(fKey)) {
item.setType(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
lore.add(Methods.formatText("&7" + config.getInt(fKey)));
} else if (config.isLong(fKey)) {
item.setType(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
lore.add(Methods.formatText("&7" + config.getLong(fKey)));
} else if (config.isDouble(fKey)) {
item.setType(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.CLOCK : Material.valueOf("WATCH"));
lore.add(Methods.formatText("&7" + config.getDouble(fKey)));
}
Setting setting = Setting.getSetting(fKey);
if (setting != null && setting.getComments() != null) {
lore.add("");
String comment = String.join(" ", setting.getComments());
int lastIndex = 0;
for (int n = 0; n < comment.length(); n++) {
if (n - lastIndex < 30)
continue;
if (comment.charAt(n) == ' ') {
lore.add(Methods.formatText("&8" + comment.substring(lastIndex, n).trim()));
lastIndex = n;
}
}
if (lastIndex - comment.length() < 30)
lore.add(Methods.formatText("&8" + comment.substring(lastIndex).trim()));
}
meta.setLore(lore);
item.setItemMeta(meta);
inventory.setItem(slot, item);
slot++;
}
player.openInventory(inventory);
}
public void reloadConfig() {
plugin.reloadConfig();
this.setupConfig();
}
public void setupConfig() {
FileConfiguration config = plugin.getConfig();
for (Setting setting : Setting.values()) {
config.addDefault(setting.getSetting(), setting.getOption());
}
plugin.getConfig().options().copyDefaults(true);
saveConfig();
}
private void saveConfig() {
String dump = plugin.getConfig().saveToString();
StringBuilder config = new StringBuilder();
BufferedReader bufReader = new BufferedReader(new StringReader(dump));
try {
boolean first = true;
String line;
int currentTab = 0;
String category = "";
while ((line = bufReader.readLine()) != null) {
if (line.trim().startsWith("#")) continue;
int tabChange = line.length() - line.trim().length();
if (currentTab != tabChange) {
category = category.contains(".") && tabChange != 0 ? category.substring(0, category.indexOf(".")) : "";
currentTab = tabChange;
}
if (line.endsWith(":")) {
bufReader.mark(1000);
String found = bufReader.readLine();
bufReader.reset();
if (!found.trim().startsWith("-")) {
String newCategory = line.substring(0, line.length() - 1).trim();
if (category.equals(""))
category = newCategory;
else
category += "." + newCategory;
currentTab = tabChange + 2;
if (!first) {
config.append("\n\n");
} else {
first = false;
}
if (!category.contains("."))
config.append("#").append("\n");
try {
Category categoryObj = Category.valueOf(category.toUpperCase()
.replace(" ", "_")
.replace(".", "_"));
config.append(new String(new char[tabChange]).replace('\0', ' '));
for (String l : categoryObj.getComments())
config.append("# ").append(l).append("\n");
} catch (IllegalArgumentException e) {
config.append("# ").append(category).append("\n");
}
if (!category.contains("."))
config.append("#").append("\n");
config.append(line).append("\n");
continue;
}
}
if (line.trim().startsWith("-")) {
config.append(line).append("\n");
continue;
}
String key = category + "." + (line.split(":")[0].trim());
for (Setting setting : Setting.values()) {
if (!setting.getSetting().equals(key) || setting.getComments() == null) continue;
config.append(" ").append("\n");
for (String l : setting.getComments()) {
config.append(new String(new char[currentTab]).replace('\0', ' '));
config.append("# ").append(l).append("\n");
}
}
config.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (!plugin.getDataFolder().exists())
plugin.getDataFolder().mkdir();
BufferedWriter writer =
new BufferedWriter(new FileWriter(new File(plugin.getDataFolder() + File.separator + "config.yml")));
writer.write(config.toString());
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}