diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/Commands.java b/ShopChest/src/main/java/de/epiceric/shopchest/Commands.java index a7df01a..3b823ec 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/Commands.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/Commands.java @@ -1,6 +1,5 @@ package de.epiceric.shopchest; -import de.epiceric.shopchest.config.Config; import de.epiceric.shopchest.config.Regex; import de.epiceric.shopchest.event.ShopPreCreateEvent; import de.epiceric.shopchest.event.ShopPreInfoEvent; @@ -126,6 +125,36 @@ public class Commands extends BukkitCommand { } else { p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_LIMITS)); } + } else if (args[0].equalsIgnoreCase("config")) { + if (perm.has(p, "shopchest.config")) { + if (args.length >= 4) { + String property = args[2]; + String value = args[3]; + + if (args[1].equalsIgnoreCase("set")) { + plugin.getShopChestConfig().set(property, value); + p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHANGED_CONFIG_SET, new LocalizedMessage.ReplacedRegex(Regex.PROPERTY, property), new LocalizedMessage.ReplacedRegex(Regex.VALUE, value))); + return true; + } else if (args[1].equalsIgnoreCase("add")) { + plugin.getShopChestConfig().add(property, value); + p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHANGED_CONFIG_ADDED, new LocalizedMessage.ReplacedRegex(Regex.PROPERTY, property), new LocalizedMessage.ReplacedRegex(Regex.VALUE, value))); + return true; + } else if (args[1].equalsIgnoreCase("remove")) { + plugin.getShopChestConfig().remove(property, value); + p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHANGED_CONFIG_REMOVED, new LocalizedMessage.ReplacedRegex(Regex.PROPERTY, property), new LocalizedMessage.ReplacedRegex(Regex.VALUE, value))); + return true; + } else { + sendBasicHelpMessage(p); + return true; + } + } else { + sendBasicHelpMessage(p); + return true; + } + } else { + p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_CONFIG)); + return true; + } } else { sendBasicHelpMessage(p); return true; @@ -220,7 +249,7 @@ public class Commands extends BukkitCommand { if (limit != -1) { if (ShopUtils.getShopAmount(p) >= limit) { - if (shopType != ShopType.ADMIN || !Config.exclude_admin_shops) { + if (shopType != ShopType.ADMIN || !plugin.getShopChestConfig().exclude_admin_shops) { p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_LIMIT_REACHED, new LocalizedMessage.ReplacedRegex(Regex.LIMIT, String.valueOf(limit)))); return; } @@ -248,7 +277,7 @@ public class Commands extends BukkitCommand { return; } - for (String item : Config.blacklist) { + for (String item : plugin.getShopChestConfig().blacklist) { ItemStack itemStack; @@ -264,7 +293,7 @@ public class Commands extends BukkitCommand { } } - for (String key : Config.minimum_prices) { + for (String key : plugin.getShopChestConfig().minimum_prices) { ItemStack itemStack; double price = plugin.getConfig().getDouble("minimum-prices." + key); @@ -293,7 +322,7 @@ public class Commands extends BukkitCommand { } if (sellEnabled && buyEnabled) { - if (Config.buy_greater_or_equal_sell) { + if (plugin.getShopChestConfig().buy_greater_or_equal_sell) { if (buyPrice < sellPrice) { p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.BUY_PRICE_TOO_LOW, new LocalizedMessage.ReplacedRegex(Regex.MIN_PRICE, String.valueOf(sellPrice)))); return; @@ -311,7 +340,7 @@ public class Commands extends BukkitCommand { } } - double creationPrice = (shopType == ShopType.NORMAL) ? Config.shop_creation_price_normal : Config.shop_creation_price_admin; + double creationPrice = (shopType == ShopType.NORMAL) ? plugin.getShopChestConfig().shop_creation_price_normal : plugin.getShopChestConfig().shop_creation_price_admin; if (creationPrice > 0) { if (plugin.getEconomy().getBalance(p) < creationPrice) { p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_CREATE_NOT_ENOUGH_MONEY, new LocalizedMessage.ReplacedRegex(Regex.CREATION_PRICE, String.valueOf(creationPrice)))); @@ -359,12 +388,13 @@ public class Commands extends BukkitCommand { * @param player Player who will receive the message */ private void sendBasicHelpMessage(Player player) { - player.sendMessage(ChatColor.GREEN + "/" + Config.main_command_name + " create [normal|admin] - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_CREATE)); - player.sendMessage(ChatColor.GREEN + "/" + Config.main_command_name + " remove - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_REMOVE)); - player.sendMessage(ChatColor.GREEN + "/" + Config.main_command_name + " info - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_INFO)); - player.sendMessage(ChatColor.GREEN + "/" + Config.main_command_name + " reload - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_RELOAD)); - player.sendMessage(ChatColor.GREEN + "/" + Config.main_command_name + " update - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_UPDATE)); - player.sendMessage(ChatColor.GREEN + "/" + Config.main_command_name + " limits - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_LIMITS)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " create [normal|admin] - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_CREATE)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " remove - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_REMOVE)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " info - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_INFO)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " reload - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_RELOAD)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " update - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_UPDATE)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " limits - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_LIMITS)); + player.sendMessage(ChatColor.GREEN + "/" + plugin.getShopChestConfig().main_command_name + " config - " + LanguageUtils.getMessage(LocalizedMessage.Message.COMMAND_DESC_CONFIG)); } } diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/ShopChest.java b/ShopChest/src/main/java/de/epiceric/shopchest/ShopChest.java index 1501e17..c237418 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/ShopChest.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/ShopChest.java @@ -1,7 +1,6 @@ package de.epiceric.shopchest; import de.epiceric.shopchest.config.Config; -import de.epiceric.shopchest.config.LanguageConfiguration; import de.epiceric.shopchest.config.Regex; import de.epiceric.shopchest.language.LanguageUtils; import de.epiceric.shopchest.language.LocalizedMessage; @@ -23,14 +22,11 @@ import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; -import java.io.BufferedReader; -import java.io.File; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; @@ -38,6 +34,8 @@ import java.util.ArrayList; public class ShopChest extends JavaPlugin { private static ShopChest instance; + + private Config config = null; private Economy econ = null; private Permission perm = null; private boolean lockette = false; @@ -46,7 +44,6 @@ public class ShopChest extends JavaPlugin { private boolean isUpdateNeeded = false; private String latestVersion = ""; private String downloadLink = ""; - private LanguageConfiguration langConfig; /** * @return An instance of ShopChest @@ -78,69 +75,6 @@ public class ShopChest extends JavaPlugin { return perm != null; } - /** - * Initializes the language configuration - */ - private void initLanguageConfig() { - langConfig = new LanguageConfiguration(this); - File langFolder = new File(getDataFolder(), "lang"); - - if (!(new File(langFolder, "en_US.lang")).exists()) - saveResource("lang/en_US.lang", false); - - if (!(new File(langFolder, "de_DE.lang")).exists()) - saveResource("lang/de_DE.lang", false); - - File langConfigFile = new File(langFolder, Config.language_file + ".lang"); - File langDefaultFile = new File(langFolder, "en_US.lang"); - - if (!langConfigFile.exists()) { - if (!langDefaultFile.exists()) { - try { - Reader r = getTextResource("lang/" + langConfigFile.getName()); - - if (r == null) { - r = getTextResource("lang/en_US.lang"); - getLogger().info("Using locale \"en_US\" (Streamed from jar file)"); - } else { - getLogger().info("Using locale \"" + langConfigFile.getName().substring(0, langConfigFile.getName().length() - 5) + "\" (Streamed from jar file)"); - } - - BufferedReader br = new BufferedReader(r); - - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append("\n"); - line = br.readLine(); - } - - langConfig.loadFromString(sb.toString()); - } catch (IOException | InvalidConfigurationException ex) { - ex.printStackTrace(); - getLogger().warning("Using default language values"); - } - } else { - try { - langConfig.load(langDefaultFile); - getLogger().info("Using locale \"en_US\""); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); - getLogger().warning("Using default language values"); - } - } - } else { - try { - getLogger().info("Using locale \"" + langConfigFile.getName().substring(0, langConfigFile.getName().length() - 5) + "\""); - langConfig.load(langConfigFile); - } catch (IOException | InvalidConfigurationException ex) { - ex.printStackTrace(); - getLogger().warning("Using default language values"); - } - } - } @Override public void onEnable() { @@ -178,11 +112,9 @@ public class ShopChest extends JavaPlugin { return; } - initLanguageConfig(); + config = new Config(this); LanguageUtils.load(); saveResource("item_names.txt", true); - reloadConfig(); - saveDefaultConfig(); try { Metrics metrics = new Metrics(this); @@ -222,7 +154,7 @@ public class ShopChest extends JavaPlugin { @Override public int getValue() { - if (Config.database_type == Database.DatabaseType.SQLite) + if (config.database_type == Database.DatabaseType.SQLite) return 1; return 0; @@ -234,7 +166,7 @@ public class ShopChest extends JavaPlugin { @Override public int getValue() { - if (Config.database_type == Database.DatabaseType.MySQL) + if (config.database_type == Database.DatabaseType.MySQL) return 1; return 0; @@ -247,7 +179,7 @@ public class ShopChest extends JavaPlugin { getLogger().severe("Could not submit stats."); } - if (Config.database_type == Database.DatabaseType.SQLite) { + if (config.database_type == Database.DatabaseType.SQLite) { getLogger().info("Using SQLite"); database = new SQLite(this); } else { @@ -258,70 +190,75 @@ public class ShopChest extends JavaPlugin { lockette = getServer().getPluginManager().getPlugin("Lockette") != null; lwc = getServer().getPluginManager().getPlugin("LWC") != null; - UpdateChecker uc = new UpdateChecker(this); - UpdateCheckerResult result = uc.check(); + Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { + @Override + public void run() { + UpdateChecker uc = new UpdateChecker(ShopChest.this); + UpdateCheckerResult result = uc.check(); - Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CHECKING)); - if (result == UpdateCheckerResult.TRUE) { - latestVersion = uc.getVersion(); - downloadLink = uc.getLink(); - isUpdateNeeded = true; - Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion))); + Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CHECKING)); + if (result == UpdateCheckerResult.TRUE) { + latestVersion = uc.getVersion(); + downloadLink = uc.getLink(); + isUpdateNeeded = true; + Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion))); - for (Player p : getServer().getOnlinePlayers()) { - if (p.isOp() || perm.has(p, "shopchest.notification.update")) { - IJsonBuilder jb; - switch (Utils.getServerVersion()) { - case "v1_8_R1": - jb = new de.epiceric.shopchest.nms.v1_8_R1.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); - break; - case "v1_8_R2": - jb = new de.epiceric.shopchest.nms.v1_8_R2.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); - break; - case "v1_8_R3": - jb = new de.epiceric.shopchest.nms.v1_8_R3.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); - break; - case "v1_9_R1": - jb = new de.epiceric.shopchest.nms.v1_9_R1.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); - break; - case "v1_9_R2": - jb = new de.epiceric.shopchest.nms.v1_9_R2.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); - break; - case "v1_10_R1": - jb = new de.epiceric.shopchest.nms.v1_10_R1.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); - break; - default: - return; + for (Player p : getServer().getOnlinePlayers()) { + if (p.isOp() || perm.has(p, "shopchest.notification.update")) { + IJsonBuilder jb; + switch (Utils.getServerVersion()) { + case "v1_8_R1": + jb = new de.epiceric.shopchest.nms.v1_8_R1.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); + break; + case "v1_8_R2": + jb = new de.epiceric.shopchest.nms.v1_8_R2.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); + break; + case "v1_8_R3": + jb = new de.epiceric.shopchest.nms.v1_8_R3.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); + break; + case "v1_9_R1": + jb = new de.epiceric.shopchest.nms.v1_9_R1.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); + break; + case "v1_9_R2": + jb = new de.epiceric.shopchest.nms.v1_9_R2.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); + break; + case "v1_10_R1": + jb = new de.epiceric.shopchest.nms.v1_10_R1.JsonBuilder(LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_AVAILABLE, new LocalizedMessage.ReplacedRegex(Regex.VERSION, latestVersion)), LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_CLICK_TO_DOWNLOAD), downloadLink); + break; + default: + return; + } + jb.sendJson(p); + } } - jb.sendJson(p); + + } else if (result == UpdateCheckerResult.FALSE) { + latestVersion = ""; + downloadLink = ""; + isUpdateNeeded = false; + Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_NO_UPDATE)); + } else { + latestVersion = ""; + downloadLink = ""; + isUpdateNeeded = false; + Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_ERROR)); } } - - } else if (result == UpdateCheckerResult.FALSE) { - latestVersion = ""; - downloadLink = ""; - isUpdateNeeded = false; - Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_NO_UPDATE)); - } else { - latestVersion = ""; - downloadLink = ""; - isUpdateNeeded = false; - Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_ERROR)); - } + }); try { - Commands.registerCommand(new Commands(this, Config.main_command_name, "Manage Shops.", "", new ArrayList()), this); + Commands.registerCommand(new Commands(this, config.main_command_name, "Manage Shops.", "", new ArrayList()), this); } catch (Exception e) { e.printStackTrace(); } initializeShops(); - getServer().getPluginManager().registerEvents(new HologramUpdateListener(), this); + getServer().getPluginManager().registerEvents(new HologramUpdateListener(this), this); getServer().getPluginManager().registerEvents(new ItemProtectListener(), this); getServer().getPluginManager().registerEvents(new ShopInteractListener(this), this); getServer().getPluginManager().registerEvents(new NotifyUpdateOnJoinListener(this), this); - getServer().getPluginManager().registerEvents(new ChestProtectListener(), this); + getServer().getPluginManager().registerEvents(new ChestProtectListener(this), this); getServer().getPluginManager().registerEvents(new ItemCustomNameListener(), this); if (getServer().getPluginManager().getPlugin("ClearLag") != null) @@ -354,13 +291,6 @@ public class ShopChest extends JavaPlugin { getLogger().info("Initialized " + String.valueOf(count) + " Shops"); } - /** - * @return ShopChest's {@link LanguageConfiguration} - */ - public LanguageConfiguration getLanguageConfig() { - return langConfig; - } - /** * @return Registered Economy of Vault */ @@ -441,4 +371,21 @@ public class ShopChest extends JavaPlugin { this.downloadLink = downloadLink; } + /** + * @return The {@link Config} of ShopChset + */ + public Config getShopChestConfig() { + return config; + } + + /** + * Provides a reader for a text file located inside the jar. + * The returned reader will read text with the UTF-8 charset. + * @param file - the filename of the resource to load + * @return null if getResource(String) returns null + * @throws IllegalArgumentException - if file is null + */ + public Reader getTextResourceP(String file) throws IllegalArgumentException { + return getTextResource(file); + } } diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/config/Config.java b/ShopChest/src/main/java/de/epiceric/shopchest/config/Config.java index 9998a10..5846c2f 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/config/Config.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/config/Config.java @@ -1,8 +1,14 @@ package de.epiceric.shopchest.config; import de.epiceric.shopchest.ShopChest; +import de.epiceric.shopchest.language.LanguageUtils; import de.epiceric.shopchest.sql.Database; +import org.bukkit.configuration.InvalidConfigurationException; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.Reader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -10,88 +16,324 @@ import java.util.Set; public class Config { - private static ShopChest plugin = ShopChest.getInstance(); + private ShopChest plugin; + + private LanguageConfiguration langConfig; /** * The hostname used in ShopChest's MySQL database **/ - public static String database_mysql_host = plugin.getConfig().getString("database.mysql.hostname"); + public String database_mysql_host; /** The port used for ShopChest's MySQL database **/ - public static int database_mysql_port = plugin.getConfig().getInt("database.mysql.port"); + public int database_mysql_port; /** The database used for ShopChest's MySQL database **/ - public static String database_mysql_database = plugin.getConfig().getString("database.mysql.database"); + public String database_mysql_database; /** The username used in ShopChest's MySQL database **/ - public static String database_mysql_username = plugin.getConfig().getString("database.mysql.username"); + public String database_mysql_username; /** The password used in ShopChest's MySQL database **/ - public static String database_mysql_password = plugin.getConfig().getString("database.mysql.password"); + public String database_mysql_password; /** The database type used for ShopChest. **/ - public static Database.DatabaseType database_type = Database.DatabaseType.valueOf(plugin.getConfig().getString("database.type")); + public Database.DatabaseType database_type; /** * The amount of attempts, ShopChest tries to reconnect to the database, when the connection is lost, until giving up **/ - public static int database_reconnect_attempts = plugin.getConfig().getInt("database.reconnect-attempts"); + public int database_reconnect_attempts; /** *

The minimum prices for certain items

* This returns a key set, which contains e.g "STONE", "STONE:1", of the minimum-prices section in ShopChest's config. * To actually retrieve the price for an item, you have to get the Double minimum-prices.key. **/ - public static Set minimum_prices = (plugin.getConfig().getConfigurationSection("minimum-prices") == null) ? new HashSet() : plugin.getConfig().getConfigurationSection("minimum-prices").getKeys(true); + public Set minimum_prices; /** *

The shop limits of certain groups

* This returns a key set, which contains the group names, of the shop-limits.group section in ShopChest's config. * To actually retrieve the limits for a group, you have to get the Integer shop-limits.group.key. **/ - public static Set shopLimits_group = (plugin.getConfig().getConfigurationSection("shop-limits.group") == null) ? new HashSet() : plugin.getConfig().getConfigurationSection("shop-limits.group").getKeys(true); + public Set shopLimits_group; /** *

The shop limits of certain players

* This returns a key set, which contains the player names, of the shop-limits.player section in ShopChest's config. * To actually retrieve the limits for a player, you have to get the Integer shop-limits.player.key. **/ - public static Set shopLimits_player = (plugin.getConfig().getConfigurationSection("shop-limits.player") == null) ? new HashSet() : plugin.getConfig().getConfigurationSection("shop-limits.player").getKeys(true); + public Set shopLimits_player; /** *

List containing items, of which players can't create a shop

* If this list contains an item (e.g "STONE", "STONE:1"), it's in the blacklist. **/ - public static List blacklist = (plugin.getConfig().getStringList("blacklist") == null) ? new ArrayList() : plugin.getConfig().getStringList("blacklist"); + public List blacklist; /** Whether the buy price of a shop must be greater than or equal the sell price **/ - public static boolean buy_greater_or_equal_sell = plugin.getConfig().getBoolean("buy-greater-or-equal-sell"); + public boolean buy_greater_or_equal_sell; /** Whether shops should be protected by hoppers **/ - public static boolean hopper_protection = plugin.getConfig().getBoolean("hopper-protection"); + public boolean hopper_protection; /** Whether shops should be protected by explosions **/ - public static boolean explosion_protection = plugin.getConfig().getBoolean("explosion-protection"); + public boolean explosion_protection; /** Whether admin shops should be excluded of the shop limits **/ - public static boolean exclude_admin_shops = plugin.getConfig().getBoolean("shop-limits.exclude-admin-shops"); + public boolean exclude_admin_shops; /** The maximum distance between a player and a shop to see the hologram **/ - public static double maximal_distance = plugin.getConfig().getDouble("maximal-distance"); + public double maximal_distance; /** The price a player has to pay in order to create a normal shop **/ - public static double shop_creation_price_normal = plugin.getConfig().getDouble("shop-creation-price.normal"); + public double shop_creation_price_normal; /** The price a player has to pay in order to create an admin shop **/ - public static double shop_creation_price_admin = plugin.getConfig().getDouble("shop-creation-price.admin"); + public double shop_creation_price_admin; /** The default shop limit for players and groups that are not listed in {@link #shopLimits_player} or in {@link #shopLimits_group} **/ - public static int default_limit = plugin.getConfig().getInt("shop-limits.default"); + public int default_limit; /** The main command of ShopChest (default: shop) **/ - public static String main_command_name = plugin.getConfig().getString("main-command-name"); + public String main_command_name; /** The language file to use (e.g en_US, de_DE) **/ - public static String language_file = plugin.getConfig().getString("language-file"); + public String language_file; + + + public Config(ShopChest plugin) { + this.plugin = plugin; + + plugin.saveDefaultConfig(); + plugin.reloadConfig(); + + reload(true, true); + } + + /** + *

Set a configuration value

+ * Config is automatically reloaded + * + * @param property Property to change + * @param value Value to set + */ + public void set(String property, String value) { + boolean langChange = (property.equalsIgnoreCase("language-file")); + try { + int intValue = Integer.parseInt(value); + plugin.getConfig().set(property, intValue); + + plugin.saveConfig(); + plugin.reloadConfig(); + reload(false, langChange); + + return; + } catch (NumberFormatException e) { /* Value not an integer */ } + + try { + double doubleValue = Double.parseDouble(value); + plugin.getConfig().set(property, doubleValue); + + plugin.saveConfig(); + plugin.reloadConfig(); + reload(false, langChange); + + return; + } catch (NumberFormatException e) { /* Value not a double */ } + + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("false")) { + boolean boolValue = Boolean.parseBoolean(value); + plugin.getConfig().set(property, boolValue); + } else { + plugin.getConfig().set(property, value); + } + + plugin.saveConfig(); + plugin.reloadConfig(); + + reload(false, langChange); + } + + /** + * Add a value to a list in the config.yml. + * If the list does not exist, a new list with the given value will be created + * @param property Location of the list + * @param value Value to add + */ + public void add(String property, String value) { + List list = (plugin.getConfig().getList(property) == null) ? new ArrayList<>() : plugin.getConfig().getList(property); + + try { + int intValue = Integer.parseInt(value); + list.add(intValue); + + plugin.saveConfig(); + plugin.reloadConfig(); + reload(false, false); + + return; + } catch (NumberFormatException e) { /* Value not an integer */ } + + try { + double doubleValue = Double.parseDouble(value); + list.add(doubleValue); + + plugin.saveConfig(); + plugin.reloadConfig(); + reload(false, false); + + return; + } catch (NumberFormatException e) { /* Value not a double */ } + + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("false")) { + boolean boolValue = Boolean.parseBoolean(value); + list.add(boolValue); + } else { + list.add(value); + } + + plugin.saveConfig(); + plugin.reloadConfig(); + + reload(false, false); + } + + public void remove(String property, String value) { + List list = (plugin.getConfig().getList(property) == null) ? new ArrayList<>() : plugin.getConfig().getList(property); + + try { + int intValue = Integer.parseInt(value); + list.remove(intValue); + + plugin.saveConfig(); + plugin.reloadConfig(); + reload(false, false); + + return; + } catch (NumberFormatException e) { /* Value not an integer */ } + + try { + double doubleValue = Double.parseDouble(value); + list.remove(doubleValue); + + plugin.saveConfig(); + plugin.reloadConfig(); + reload(false, false); + + return; + } catch (NumberFormatException e) { /* Value not a double */ } + + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("false")) { + boolean boolValue = Boolean.parseBoolean(value); + list.remove(boolValue); + } else { + list.remove(value); + } + + plugin.saveConfig(); + plugin.reloadConfig(); + + reload(false, false); + } + + /** + * Reload the configuration values from config.yml + */ + public void reload(boolean firstLoad, boolean langReload) { + database_mysql_host = plugin.getConfig().getString("database.mysql.hostname"); + database_mysql_port = plugin.getConfig().getInt("database.mysql.port"); + database_mysql_database = plugin.getConfig().getString("database.mysql.database"); + database_mysql_username = plugin.getConfig().getString("database.mysql.username"); + database_mysql_password = plugin.getConfig().getString("database.mysql.password"); + database_type = Database.DatabaseType.valueOf(plugin.getConfig().getString("database.type")); + database_reconnect_attempts = plugin.getConfig().getInt("database.reconnect-attempts"); + minimum_prices = (plugin.getConfig().getConfigurationSection("minimum-prices") == null) ? new HashSet() : plugin.getConfig().getConfigurationSection("minimum-prices").getKeys(true); + shopLimits_group = (plugin.getConfig().getConfigurationSection("shop-limits.group") == null) ? new HashSet() : plugin.getConfig().getConfigurationSection("shop-limits.group").getKeys(true); + shopLimits_player = (plugin.getConfig().getConfigurationSection("shop-limits.player") == null) ? new HashSet() : plugin.getConfig().getConfigurationSection("shop-limits.player").getKeys(true); + blacklist = (plugin.getConfig().getStringList("blacklist") == null) ? new ArrayList() : plugin.getConfig().getStringList("blacklist"); + buy_greater_or_equal_sell = plugin.getConfig().getBoolean("buy-greater-or-equal-sell"); + hopper_protection = plugin.getConfig().getBoolean("hopper-protection"); + explosion_protection = plugin.getConfig().getBoolean("explosion-protection"); + exclude_admin_shops = plugin.getConfig().getBoolean("shop-limits.exclude-admin-shops"); + maximal_distance = plugin.getConfig().getDouble("maximal-distance"); + shop_creation_price_normal = plugin.getConfig().getDouble("shop-creation-price.normal"); + shop_creation_price_admin = plugin.getConfig().getDouble("shop-creation-price.admin"); + default_limit = plugin.getConfig().getInt("shop-limits.default"); + main_command_name = plugin.getConfig().getString("main-command-name"); + language_file = plugin.getConfig().getString("language-file"); + + if (firstLoad || langReload) loadLanguageConfig(); + if (!firstLoad && langReload) LanguageUtils.load(); + } + + /** + * @return ShopChest's {@link LanguageConfiguration} + */ + public LanguageConfiguration getLanguageConfig() { + return langConfig; + } + + private void loadLanguageConfig() { + langConfig = new LanguageConfiguration(plugin); + File langFolder = new File(plugin.getDataFolder(), "lang"); + + if (!(new File(langFolder, "en_US.lang")).exists()) + plugin.saveResource("lang/en_US.lang", false); + + if (!(new File(langFolder, "de_DE.lang")).exists()) + plugin.saveResource("lang/de_DE.lang", false); + + File langConfigFile = new File(langFolder, language_file + ".lang"); + File langDefaultFile = new File(langFolder, "en_US.lang"); + + if (!langConfigFile.exists()) { + if (!langDefaultFile.exists()) { + try { + Reader r = plugin.getTextResourceP("lang/" + langConfigFile.getName()); + + if (r == null) { + r = plugin.getTextResourceP("lang/en_US.lang"); + plugin.getLogger().info("Using locale \"en_US\" (Streamed from jar file)"); + } else { + plugin.getLogger().info("Using locale \"" + langConfigFile.getName().substring(0, langConfigFile.getName().length() - 5) + "\" (Streamed from jar file)"); + } + + BufferedReader br = new BufferedReader(r); + + StringBuilder sb = new StringBuilder(); + String line = br.readLine(); + + while (line != null) { + sb.append(line); + sb.append("\n"); + line = br.readLine(); + } + + langConfig.loadFromString(sb.toString()); + } catch (IOException | InvalidConfigurationException ex) { + ex.printStackTrace(); + plugin.getLogger().warning("Using default language values"); + } + } else { + try { + langConfig.load(langDefaultFile); + plugin.getLogger().info("Using locale \"en_US\""); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + plugin.getLogger().warning("Using default language values"); + } + } + } else { + try { + plugin.getLogger().info("Using locale \"" + langConfigFile.getName().substring(0, langConfigFile.getName().length() - 5) + "\""); + langConfig.load(langConfigFile); + } catch (IOException | InvalidConfigurationException ex) { + ex.printStackTrace(); + plugin.getLogger().warning("Using default language values"); + } + } + } } diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/config/LanguageConfiguration.java b/ShopChest/src/main/java/de/epiceric/shopchest/config/LanguageConfiguration.java index 6221387..5914b5e 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/config/LanguageConfiguration.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/config/LanguageConfiguration.java @@ -5,6 +5,7 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.regex.Matcher; @@ -47,7 +48,7 @@ public class LanguageConfiguration extends FileConfiguration { @Override public void load(File file) throws IOException, InvalidConfigurationException { FileInputStream fis = new FileInputStream(file); - InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); + InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/config/Regex.java b/ShopChest/src/main/java/de/epiceric/shopchest/config/Regex.java index 497542c..3d5abfd 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/config/Regex.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/config/Regex.java @@ -15,7 +15,9 @@ public enum Regex { LIMIT("%LIMIT%"), PLAYER("%PLAYER%"), POTION_EFFECT("%POTION-EFFECT%"), - MUSIC_TITLE("%MUSIC-TITLE%"); + MUSIC_TITLE("%MUSIC-TITLE%"), + PROPERTY("%PROPERTY%"), + VALUE("%VALUE%"); private String name; diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java b/ShopChest/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java index 2bdbacc..6cd58d0 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java @@ -21,7 +21,7 @@ import java.util.ArrayList; public class LanguageUtils { private static ShopChest plugin = ShopChest.getInstance(); - private static LanguageConfiguration langConfig = plugin.getLanguageConfig(); + private static LanguageConfiguration langConfig; private static ArrayList itemNames = new ArrayList<>(); private static ArrayList enchantmentNames = new ArrayList<>(); @@ -34,6 +34,17 @@ public class LanguageUtils { public static void load() { + langConfig = plugin.getShopChestConfig().getLanguageConfig(); + + itemNames.clear(); + enchantmentNames.clear(); + enchantmentLevelNames.clear(); + potionEffectNames.clear(); + entityNames.clear(); + potionNames.clear(); + musicDiscNames.clear(); + messages.clear(); + // Add Block Names itemNames.add(new ItemName(Material.STONE, langConfig.getString("tile.stone.stone.name", "Stone"))); itemNames.add(new ItemName(Material.STONE, 1, langConfig.getString("tile.stone.granite.name", "Granite"))); @@ -899,12 +910,17 @@ public class LanguageUtils { messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_RELOAD, langConfig.getString("message.noPermission.reload", "&cYou don't have permission to reload the shops."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_UPDATE, langConfig.getString("message.noPermission.update", "&cYou don't have permission to check for updates."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_LIMITS, langConfig.getString("message.noPermission.limits", "&cYou don't have permission to view the shop limits."))); + messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_CONFIG, langConfig.getString("message.noPermission.config", "&cYou don't have permission to change configuration values."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_CREATE, langConfig.getString("message.commandDescription.create", "Create a shop."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_REMOVE, langConfig.getString("message.commandDescription.remove", "Remove a shop."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_INFO, langConfig.getString("message.commandDescription.info", "Retrieve shop information."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_RELOAD, langConfig.getString("message.commandDescription.reload", "Reload shops."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_UPDATE, langConfig.getString("message.commandDescription.update", "Check for Updates."))); messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_LIMITS, langConfig.getString("message.commandDescription.limits", "View shop limits."))); + messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_CONFIG, langConfig.getString("message.commandDescription.config", "Change configuration values."))); + messages.add(new LocalizedMessage(LocalizedMessage.Message.CHANGED_CONFIG_SET, langConfig.getString("message.config.set", "&6Changed &a%PROPERTY% &6to &a%VALUE%&6."), Regex.PROPERTY, Regex.VALUE)); + messages.add(new LocalizedMessage(LocalizedMessage.Message.CHANGED_CONFIG_REMOVED, langConfig.getString("message.config.removed", "&6Removed &a%VALUE% &6from &a%PROPERTY%&6."), Regex.PROPERTY, Regex.VALUE)); + messages.add(new LocalizedMessage(LocalizedMessage.Message.CHANGED_CONFIG_ADDED, langConfig.getString("message.config.added", "&6Added &a%VALUE% &6to &a%PROPERTY%&6."), Regex.PROPERTY, Regex.VALUE)); } /** diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java b/ShopChest/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java index 7a75d4f..ff4a96f 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java @@ -108,12 +108,17 @@ public class LocalizedMessage { NO_PERMISSION_RELOAD, NO_PERMISSION_UPDATE, NO_PERMISSION_LIMITS, + NO_PERMISSION_CONFIG, COMMAND_DESC_CREATE, COMMAND_DESC_REMOVE, COMMAND_DESC_INFO, COMMAND_DESC_RELOAD, COMMAND_DESC_UPDATE, - COMMAND_DESC_LIMITS + COMMAND_DESC_LIMITS, + COMMAND_DESC_CONFIG, + CHANGED_CONFIG_SET, + CHANGED_CONFIG_REMOVED, + CHANGED_CONFIG_ADDED } public static class ReplacedRegex { diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java b/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java index a7e423c..426ecf4 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java @@ -1,7 +1,6 @@ package de.epiceric.shopchest.listeners; import de.epiceric.shopchest.ShopChest; -import de.epiceric.shopchest.config.Config; import de.epiceric.shopchest.language.LanguageUtils; import de.epiceric.shopchest.language.LocalizedMessage; import de.epiceric.shopchest.shop.Shop; @@ -26,6 +25,12 @@ import java.util.ArrayList; public class ChestProtectListener implements Listener { + private ShopChest plugin; + + public ChestProtectListener(ShopChest plugin) { + this.plugin = plugin; + } + @EventHandler public void onBlockBreak(BlockBreakEvent e) { if (ShopUtils.isShop(e.getBlock().getLocation())) { @@ -36,7 +41,7 @@ public class ChestProtectListener implements Listener { @EventHandler public void onBlockExplode(BlockExplodeEvent e) { - if (Config.explosion_protection) { + if (plugin.getShopChestConfig().explosion_protection) { ArrayList bl = new ArrayList<>(e.blockList()); for (Block b : bl) { if (b.getType().equals(Material.CHEST) || b.getType().equals(Material.TRAPPED_CHEST)) { @@ -48,7 +53,7 @@ public class ChestProtectListener implements Listener { @EventHandler public void onEntityExplode(EntityExplodeEvent e) { - if (Config.explosion_protection) { + if (plugin.getShopChestConfig().explosion_protection) { ArrayList bl = new ArrayList<>(e.blockList()); for (Block b : bl) { if (b.getType().equals(Material.CHEST) || b.getType().equals(Material.TRAPPED_CHEST)) { @@ -100,7 +105,7 @@ public class ChestProtectListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void onItemMove(InventoryMoveItemEvent e) { - if (Config.hopper_protection) { + if (plugin.getShopChestConfig().hopper_protection) { if ((e.getSource().getType().equals(InventoryType.CHEST)) && (!e.getInitiator().getType().equals(InventoryType.PLAYER))) { if (e.getSource().getHolder() instanceof DoubleChest) { diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/listeners/HologramUpdateListener.java b/ShopChest/src/main/java/de/epiceric/shopchest/listeners/HologramUpdateListener.java index 09c57e9..4e60788 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/listeners/HologramUpdateListener.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/listeners/HologramUpdateListener.java @@ -1,6 +1,6 @@ package de.epiceric.shopchest.listeners; -import de.epiceric.shopchest.config.Config; +import de.epiceric.shopchest.ShopChest; import de.epiceric.shopchest.shop.Shop; import de.epiceric.shopchest.utils.ShopUtils; import org.bukkit.Location; @@ -11,6 +11,12 @@ import org.bukkit.event.player.PlayerMoveEvent; public class HologramUpdateListener implements Listener { + private ShopChest plugin; + + public HologramUpdateListener(ShopChest plugin) { + this.plugin = plugin; + } + @EventHandler public void onPlayerMove(PlayerMoveEvent e) { @@ -25,7 +31,7 @@ public class HologramUpdateListener implements Listener { if (playerLocation.getWorld().equals(shopLocation.getWorld())) { - if (playerLocation.distance(shop.getHologram().getLocation()) <= Config.maximal_distance) { + if (playerLocation.distance(shop.getHologram().getLocation()) <= plugin.getShopChestConfig().maximal_distance) { if (!shop.getHologram().isVisible(p)) { shop.getHologram().showPlayer(p); diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java b/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java index 1557a34..14b6119 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java @@ -3,7 +3,6 @@ package de.epiceric.shopchest.listeners; import com.griefcraft.lwc.LWC; import com.griefcraft.model.Protection; import de.epiceric.shopchest.ShopChest; -import de.epiceric.shopchest.config.Config; import de.epiceric.shopchest.config.Regex; import de.epiceric.shopchest.event.ShopBuySellEvent; import de.epiceric.shopchest.event.ShopCreateEvent; @@ -244,14 +243,14 @@ public class ShopInteractListener implements Listener { * @param shopType Type of the shop */ private void create(Player executor, Location location, ItemStack product, double buyPrice, double sellPrice, ShopType shopType) { - int id = database.getNextFreeID(Config.database_reconnect_attempts); + int id = database.getNextFreeID(plugin.getShopChestConfig().database_reconnect_attempts); if (id == 0) { executor.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.ERROR_OCCURRED, new LocalizedMessage.ReplacedRegex(Regex.ERROR, "Could not connect to database"))); return; } - double creationPrice = (shopType == ShopType.NORMAL) ? Config.shop_creation_price_normal : Config.shop_creation_price_admin; + double creationPrice = (shopType == ShopType.NORMAL) ? plugin.getShopChestConfig().shop_creation_price_normal : plugin.getShopChestConfig().shop_creation_price_admin; ShopCreateEvent event = new ShopCreateEvent(executor, Shop.createImaginaryShop(executor, product, buyPrice, sellPrice,shopType), creationPrice); Bukkit.getPluginManager().callEvent(event); diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/sql/Database.java b/ShopChest/src/main/java/de/epiceric/shopchest/sql/Database.java index 24af74e..567762f 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/sql/Database.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/sql/Database.java @@ -1,7 +1,6 @@ package de.epiceric.shopchest.sql; import de.epiceric.shopchest.ShopChest; -import de.epiceric.shopchest.config.Config; import de.epiceric.shopchest.shop.Shop; import de.epiceric.shopchest.shop.Shop.ShopType; import de.epiceric.shopchest.utils.ShopUtils; @@ -20,10 +19,12 @@ public abstract class Database { public ShopChest plugin; public Connection connection; - private int attempts = Config.database_reconnect_attempts; + private int attempts; public Database(ShopChest plugin) { this.plugin = plugin; + this.attempts = plugin.getShopChestConfig().database_reconnect_attempts; + initialize(); } diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/sql/MySQL.java b/ShopChest/src/main/java/de/epiceric/shopchest/sql/MySQL.java index 1f49300..ab3b992 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/sql/MySQL.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/sql/MySQL.java @@ -1,7 +1,6 @@ package de.epiceric.shopchest.sql; import de.epiceric.shopchest.ShopChest; -import de.epiceric.shopchest.config.Config; import java.sql.Connection; import java.sql.DriverManager; @@ -21,10 +20,10 @@ public class MySQL extends Database { Class.forName("com.mysql.jdbc.Driver"); - String connectUrl = "jdbc:mysql://" + Config.database_mysql_host + ":" + Config.database_mysql_port + "/" + Config.database_mysql_database; - plugin.getLogger().info("Connecting to MySQL Server \"" + connectUrl + "\" as user \"" + Config.database_mysql_username + "\""); + String connectUrl = "jdbc:mysql://" + plugin.getShopChestConfig().database_mysql_host + ":" + plugin.getShopChestConfig().database_mysql_port + "/" + plugin.getShopChestConfig().database_mysql_database; + plugin.getLogger().info("Connecting to MySQL Server \"" + connectUrl + "\" as user \"" + plugin.getShopChestConfig().database_mysql_username + "\""); - connection = DriverManager.getConnection(connectUrl, Config.database_mysql_username, Config.database_mysql_password); + connection = DriverManager.getConnection(connectUrl, plugin.getShopChestConfig().database_mysql_username, plugin.getShopChestConfig().database_mysql_password); return connection; } catch (Exception ex) { diff --git a/ShopChest/src/main/java/de/epiceric/shopchest/utils/ShopUtils.java b/ShopChest/src/main/java/de/epiceric/shopchest/utils/ShopUtils.java index 9719cc2..586bf80 100644 --- a/ShopChest/src/main/java/de/epiceric/shopchest/utils/ShopUtils.java +++ b/ShopChest/src/main/java/de/epiceric/shopchest/utils/ShopUtils.java @@ -81,7 +81,7 @@ public class ShopUtils { } if (addToDatabase) - plugin.getShopDatabase().addShop(shop, Config.database_reconnect_attempts); + plugin.getShopDatabase().addShop(shop, plugin.getShopChestConfig().database_reconnect_attempts); } @@ -108,7 +108,7 @@ public class ShopUtils { shop.removeHologram(); if (removeFromDatabase) - plugin.getShopDatabase().removeShop(shop, Config.database_reconnect_attempts); + plugin.getShopDatabase().removeShop(shop, plugin.getShopChestConfig().database_reconnect_attempts); } /** @@ -117,12 +117,12 @@ public class ShopUtils { * @return The shop limits of the given player */ public static int getShopLimit(Player p) { - int limit = Config.default_limit; + int limit = plugin.getShopChestConfig().default_limit; if (plugin.getPermission().hasGroupSupport()) { List groups = new ArrayList(); - for (String key : Config.shopLimits_group) { + for (String key : plugin.getShopChestConfig().shopLimits_group) { for (int i = 0; i < plugin.getPermission().getGroups().length; i++) { if (plugin.getPermission().getGroups()[i].equals(key)) { if (plugin.getPermission().playerInGroup(p, key)) { @@ -153,7 +153,7 @@ public class ShopUtils { } } - for (String key : Config.shopLimits_player) { + for (String key : plugin.getShopChestConfig().shopLimits_player) { int pLimit = ShopChest.getInstance().getConfig().getInt("shop-limits.player." + key); if (Utils.isUUID(key)) { if (p.getUniqueId().equals(UUID.fromString(key))) { @@ -179,7 +179,7 @@ public class ShopUtils { for (Shop shop : ShopUtils.getShops()) { if (shop.getVendor().equals(p)) { - if (shop.getShopType() != Shop.ShopType.ADMIN || !Config.exclude_admin_shops) { + if (shop.getShopType() != Shop.ShopType.ADMIN || !plugin.getShopChestConfig().exclude_admin_shops) { shopCount++; if (shop.getChest().getInventory().getHolder() instanceof DoubleChest) @@ -196,6 +196,8 @@ public class ShopUtils { * @return Amount of shops, which were reloaded */ public static int reloadShops() { + plugin.getShopChestConfig().reload(false, true); + for (Shop shop : ShopUtils.getShops()) { ShopUtils.removeShop(shop, false); } @@ -212,10 +214,10 @@ public class ShopUtils { } int count = 0; - for (int id = 1; id < plugin.getShopDatabase().getHighestID(Config.database_reconnect_attempts) + 1; id++) { + for (int id = 1; id < plugin.getShopDatabase().getHighestID(plugin.getShopChestConfig().database_reconnect_attempts) + 1; id++) { try { - Shop shop = (Shop) plugin.getShopDatabase().get(id, Database.ShopInfo.SHOP, Config.database_reconnect_attempts); + Shop shop = (Shop) plugin.getShopDatabase().get(id, Database.ShopInfo.SHOP, plugin.getShopChestConfig().database_reconnect_attempts); ShopUtils.addShop(shop, false); } catch (NullPointerException e) { continue; diff --git a/ShopChest/src/main/resources/lang/de_DE.lang b/ShopChest/src/main/resources/lang/de_DE.lang index 2e28a45..31a5253 100644 --- a/ShopChest/src/main/resources/lang/de_DE.lang +++ b/ShopChest/src/main/resources/lang/de_DE.lang @@ -63,13 +63,18 @@ message.noPermission.sell=&cDu hast keine Berechtigung etwas zu verkaufen. message.noPermission.remove-others=&cDu hast keine Berechtigung diesen Shop zu entfernen. message.noPermission.reload=&cDu hast keine Berechtigung die Shops neu zu laden. message.noPermission.update=&cDu hast keine Berechtigung nach Aktualisierungen zu suchen. -message.noPermission.limits=&cDu hast keine Berechtigung die Shop Limits zu sehen +message.noPermission.limits=&cDu hast keine Berechtigung die Shop Limits zu sehen. +message.noPermission.config=&cDu hast keine Berechtigung Konfigurationswerte zu verändern. message.commandDescription.create=Erstelle einen Shop. message.commandDescription.remove=Entferne einen Shop. message.commandDescription.info=Rufe Informationen über den Shop ab. message.commandDescription.reload=Lade die Shops neu. message.commandDescription.update=Suche nach Aktualisierungen. message.commandDescription.limits=Betrachte die Shop Limits. +message.commandDescription.config=Verändere Konfigurationswerte. +message.config.set=&6Eigenschaft &a%PROPERTY% &6wurde auf &a%VALUE% &6gesetzt. +message.config.added=&6Wert &a%VALUE% &6wurde zu &a%PROPERTY% &6hinzugefügt. +message.config.removed=&6Wert &a%VALUE% &6wurde aus &a%PROPERTY% &6entfernt. effect.absorption=Absorption effect.blindness=Blindheit diff --git a/ShopChest/src/main/resources/lang/en_US.lang b/ShopChest/src/main/resources/lang/en_US.lang index 9f5c63e..8ae4e32 100644 --- a/ShopChest/src/main/resources/lang/en_US.lang +++ b/ShopChest/src/main/resources/lang/en_US.lang @@ -224,6 +224,9 @@ message.noPermission.update=&cYou don't have permission to check for updates. # Set the message when a not permitted player tries to view the shop limits. message.noPermission.limits=&cYou don't have permission to view the shop limits. +# Set the message when a not permitted player tries to change configuration values. +message.noPermission.config=&cYou don't have permission to change configuration values. + # Set the command description message for '/shop create' when you type '/shop'. message.commandDescription.create=Create a shop. @@ -242,6 +245,21 @@ message.commandDescription.update=Check for Updates. # Set the command description message for '/shop limits' when you type '/shop'. message.commandDescription.limits=View shop limits. +# Set the command description message for '/shop config' when you type '/shop'. +message.commandDescription.config=Change configuration values. + +# Set the message a player gets after setting a configuration value per command +# Usable regex: %PROPERTY%, %VALUE% +message.config.set=&6Changed &a%PROPERTY% &6to &a%VALUE%&6. + +# Set the message a player gets after adding a value to a list in the configuration per command +# Usable regex: %PROPERTY%, %VALUE% +message.config.added=&6Added &a%VALUE% &6to &a%PROPERTY%&6. + +# Set the message a player gets after removing a value from a list in the configuration per command +# Usable regex: %PROPERTY%, %VALUE% +message.config.removed=&6Removed &a%VALUE% &6from &a%PROPERTY%&6. + # Effect names that will be displayed in the place of %POTION-EFFECT% effect.none=No Effects effect.moveSpeed=Speed diff --git a/ShopChest/src/main/resources/plugin.yml b/ShopChest/src/main/resources/plugin.yml index 60ae7ab..320a74b 100644 --- a/ShopChest/src/main/resources/plugin.yml +++ b/ShopChest/src/main/resources/plugin.yml @@ -57,4 +57,7 @@ permissions: default: op shopchest.limits: description: Allows you to view shop limits. - default: true \ No newline at end of file + default: true + shopchest.config: + description: Allows you to change configuration values per command. + default: op \ No newline at end of file