From dfd40d0eef27082fa07db1c08c592d420a28e67e Mon Sep 17 00:00:00 2001 From: Daniel V Date: Wed, 8 Aug 2018 17:10:58 -0400 Subject: [PATCH] Beta 1.1.2 (#235) * [Enhance] Simplify Currency Configurations. * [Patch] Remove deprecated methods. * [Fix] Fix for strange issue on 1.13. * [Minor] Upgrade items.yml to 1.13. Adds 8k lines. * [Release] TNE Beta 1.1.1. * [MISC] Start work on item signs. * [Feat] Add command to download modules. * [Feat] Auto download missing H2/MySQL Modules. * [Fix] Fix for ender chest balances. * [Fix] Fix module download command. --- TNE/src/net/tnemc/core/TNE.java | 12 +++ .../core/commands/module/ModuleCommand.java | 1 + .../module/ModuleDownloadCommand.java | 75 +++++++++++++++++++ .../core/commands/money/MoneyNoteCommand.java | 7 +- .../tnemc/core/common/CurrencyManager.java | 2 +- .../tnemc/core/common/account/TNEAccount.java | 15 ++++ .../configurations/MessageConfigurations.java | 3 +- .../net/tnemc/core/common/module/Module.java | 4 + .../core/common/module/ModuleLoader.java | 62 +++++++++++++-- .../transaction/type/TNETransactionType.java | 11 +-- .../tnemc/core/listeners/PlayerListener.java | 14 ---- TNE/src/net/tnemc/resources/config.yml | 3 - TNE/src/net/tnemc/resources/mobs.yml | 9 ++- TNE/src/net/tnemc/resources/plugin.yml | 2 +- .../src/net/tnemc/mobs/MobConfiguration.java | 8 ++ TNEMobs/src/net/tnemc/mobs/MobsListener.java | 6 +- TNEMobs/src/net/tnemc/mobs/MobsModule.java | 15 ++++ 17 files changed, 213 insertions(+), 36 deletions(-) create mode 100644 TNE/src/net/tnemc/core/commands/module/ModuleDownloadCommand.java diff --git a/TNE/src/net/tnemc/core/TNE.java b/TNE/src/net/tnemc/core/TNE.java index 7ba9e40c..da8d9887 100644 --- a/TNE/src/net/tnemc/core/TNE.java +++ b/TNE/src/net/tnemc/core/TNE.java @@ -71,6 +71,7 @@ import java.util.Map; import java.util.TreeMap; import java.util.UUID; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -188,6 +189,12 @@ public void onEnable() { loader = new ModuleLoader(); loader.load(); + if(!loader.hasModule("MySQL") && !loader.hasModule("H2")) { + new File(getDataFolder(), "modules").mkdir(); + ModuleLoader.downloadModule("h2"); + loader.load("H2"); + } + //Load modules loader.getModules().forEach((key, value)->{ TNEModuleLoadEvent event = new TNEModuleLoadEvent(key, value.getInfo().version()); @@ -291,6 +298,11 @@ public void onEnable() { consoleName = (configurations().getString("Core.Server.Account.Name").length() <= 100)? configurations().getString("Core.Server.Account.Name") : "Server_Account"; useUUID = configurations().getBoolean("Core.UUID"); + + if(!loader.hasModuleWithoutCase(configurations().getString("Core.Database.Type"))) { + getLogger().log(Level.SEVERE, "Unable to locate module with specified database type."); + } + TNESaveManager sManager = new TNESaveManager(new TNEDataManager( configurations().getString("Core.Database.Type").toLowerCase(), configurations().getString("Core.Database.MySQL.Host"), diff --git a/TNE/src/net/tnemc/core/commands/module/ModuleCommand.java b/TNE/src/net/tnemc/core/commands/module/ModuleCommand.java index 37b17ec7..cab0f7c2 100644 --- a/TNE/src/net/tnemc/core/commands/module/ModuleCommand.java +++ b/TNE/src/net/tnemc/core/commands/module/ModuleCommand.java @@ -15,6 +15,7 @@ public class ModuleCommand extends TNECommand { public ModuleCommand(TNE plugin) { super(plugin); + subCommands.add(new ModuleDownloadCommand(plugin)); subCommands.add(new ModuleInfoCommand(plugin)); subCommands.add(new ModuleListCommand(plugin)); subCommands.add(new ModuleLoadCommand(plugin)); diff --git a/TNE/src/net/tnemc/core/commands/module/ModuleDownloadCommand.java b/TNE/src/net/tnemc/core/commands/module/ModuleDownloadCommand.java new file mode 100644 index 00000000..0d76803b --- /dev/null +++ b/TNE/src/net/tnemc/core/commands/module/ModuleDownloadCommand.java @@ -0,0 +1,75 @@ +package net.tnemc.core.commands.module; + +import net.tnemc.core.TNE; +import net.tnemc.core.commands.TNECommand; +import net.tnemc.core.common.Message; +import net.tnemc.core.common.WorldVariant; +import net.tnemc.core.common.account.WorldFinder; +import net.tnemc.core.common.module.ModuleLoader; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; + +/** + * The New Economy Minecraft Server Plugin + *

+ * Created by Daniel on 8/8/2018. + *

+ * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. + * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to + * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + * Created by creatorfromhell on 06/30/2017. + */ +public class ModuleDownloadCommand extends TNECommand { + + public ModuleDownloadCommand(TNE plugin) { + super(plugin); + } + + @Override + public String getName() { + return "download"; + } + + @Override + public String[] getAliases() { + return new String[] { + "dl" + }; + } + + @Override + public String getNode() { + return "tne.module.download"; + } + + @Override + public boolean console() { + return true; + } + + @Override + public String getHelp() { + return "Messages.Commands.Module.Download"; + } + + @Override + public boolean execute(CommandSender sender, String command, String[] arguments) { + if(arguments.length >= 1) { + final String moduleName = arguments[0].toLowerCase().trim(); + final String world = WorldFinder.getWorld(sender, WorldVariant.ACTUAL); + if(!ModuleLoader.modulePaths.containsKey(moduleName)) { + Message message = new Message("Messages.Module.Invalid"); + message.addVariable("$module", moduleName); + message.translate(world, sender); + return false; + } + Bukkit.getScheduler().runTaskAsynchronously(TNE.instance(), ()->ModuleLoader.downloadModule(moduleName)); + Message message = new Message("Messages.Module.Downloaded"); + message.addVariable("$module", moduleName); + message.translate(world, sender); + return true; + } + help(sender); + return false; + } +} \ No newline at end of file diff --git a/TNE/src/net/tnemc/core/commands/money/MoneyNoteCommand.java b/TNE/src/net/tnemc/core/commands/money/MoneyNoteCommand.java index d1528b78..4fbddec3 100644 --- a/TNE/src/net/tnemc/core/commands/money/MoneyNoteCommand.java +++ b/TNE/src/net/tnemc/core/commands/money/MoneyNoteCommand.java @@ -72,6 +72,11 @@ public boolean execute(CommandSender sender, String command, String[] arguments) return false; } + if(!currency.isNotable()) { + new Message("Messages.Money.NoteFailed").translate(world, sender); + return false; + } + String parsed = CurrencyFormatter.parseAmount(currency, world, arguments[0]); if(parsed.contains("Messages")) { Message max = new Message(parsed); @@ -96,7 +101,7 @@ public boolean execute(CommandSender sender, String command, String[] arguments) if(result.proceed()) { - ItemStack stack = TNE.manager().currencyManager().createNote(id, currency.name(), world, value); + ItemStack stack = TNE.manager().currencyManager().createNote(currency.name(), world, value); getPlayer(sender).getInventory().addItem(stack); Message message = new Message(result.recipientMessage()); message.addVariable("$player", arguments[0]); diff --git a/TNE/src/net/tnemc/core/common/CurrencyManager.java b/TNE/src/net/tnemc/core/common/CurrencyManager.java index 89f73cac..f782ec2d 100644 --- a/TNE/src/net/tnemc/core/common/CurrencyManager.java +++ b/TNE/src/net/tnemc/core/common/CurrencyManager.java @@ -306,7 +306,7 @@ public void register(net.tnemc.core.economy.currency.Currency currency) { addCurrency(TNE.instance().defaultWorld, TNECurrency.fromReserve(currency)); } - public ItemStack createNote(UUID id, String currency, String world, BigDecimal amount) { + public ItemStack createNote(String currency, String world, BigDecimal amount) { ItemStack stack = new ItemStack(Material.PAPER, 1); ItemMeta meta = stack.getItemMeta(); diff --git a/TNE/src/net/tnemc/core/common/account/TNEAccount.java b/TNE/src/net/tnemc/core/common/account/TNEAccount.java index 18cefa33..3b42192b 100644 --- a/TNE/src/net/tnemc/core/common/account/TNEAccount.java +++ b/TNE/src/net/tnemc/core/common/account/TNEAccount.java @@ -180,6 +180,21 @@ public BigDecimal getHoldings(String world, String currency, boolean core, boole return holdings; } + public BigDecimal getNonCoreHoldings(String world, String currency, boolean database) { + BigDecimal holdings = BigDecimal.ZERO; + for (Map.Entry> entry : TNE.manager().getHoldingsHandlers().descendingMap().entrySet()) { + for (HoldingsHandler handler : entry.getValue()) { + if (!handler.coreHandler()) { + if (handler.userContains().equalsIgnoreCase("") || + displayName().contains(handler.userContains())) { + holdings = holdings.add(handler.getHoldings(identifier(), world, TNE.manager().currencyManager().get(world, currency), database)); + } + } + } + } + return holdings; + } + public void saveItemCurrency(String world) { saveItemCurrency(world, true); } diff --git a/TNE/src/net/tnemc/core/common/configurations/MessageConfigurations.java b/TNE/src/net/tnemc/core/common/configurations/MessageConfigurations.java index 768bc9d3..bc46c828 100644 --- a/TNE/src/net/tnemc/core/common/configurations/MessageConfigurations.java +++ b/TNE/src/net/tnemc/core/common/configurations/MessageConfigurations.java @@ -88,6 +88,7 @@ public void load(FileConfiguration configurationFile) { configurations.put("Messages.Language.Reload", "Successfully reloaded all language files."); configurations.put("Messages.Language.Set", "Successfully set your language to $language."); + configurations.put("Messages.Module.Downloaded", "$module has been downloaded successfully."); configurations.put("Messages.Module.Info", "==== Module Info for $module ====Author: $authorVersion: $version"); configurations.put("Messages.Module.Invalid", "Unable to find a module with the name of \"$module\"."); configurations.put("Messages.Module.List", "This server is currently uses these TNE Modules: $modules."); @@ -114,7 +115,6 @@ public void load(FileConfiguration configurationFile) { configurations.put("Messages.Money.Converted", "Successfully exchanged \"$from_amount\" to \"$amount\"."); configurations.put("Messages.Money.Noted", "A note has been given to you in the amount of $amount for currency $currency."); configurations.put("Messages.Money.NoteClaimed", "Successfully claimed note for currency $currency in the amount of $amount.Your new balance is $balance."); - configurations.put("Messages.Money.NoteFailed", "I'm sorry, but your attempt to claim that currency note failed!."); configurations.put("Messages.Money.NoteMinimum", "The minimum note amount of $amount was not met."); configurations.put("Messages.Money.NoteFailed", "I'm sorry, but your attempt to claim that currency note failed!."); configurations.put("Messages.Money.Top", "=========[Economy Top]========= Page: $page/$page_top"); @@ -168,6 +168,7 @@ public void load(FileConfiguration configurationFile) { configurations.put("Messages.Commands.Language.Reload", "/language reload - Reloads all language files."); configurations.put("Messages.Commands.Language.Set", "/language set - Sets your current language to the one specified."); + configurations.put("Messages.Commands.Module.Download", "/tnem dl - Attempts to download the specified module."); configurations.put("Messages.Commands.Module.Info", "/tnem info - Displays some information about a module.- Module ~ The module to look up."); configurations.put("Messages.Commands.Module.List", "/tnem list - Lists all loaded TNE modules."); configurations.put("Messages.Commands.Module.Load", "/tnem load - Load a module from the modules directory.- Module ~ The module to load."); diff --git a/TNE/src/net/tnemc/core/common/module/Module.java b/TNE/src/net/tnemc/core/common/module/Module.java index 2ac51b03..9d41d656 100644 --- a/TNE/src/net/tnemc/core/common/module/Module.java +++ b/TNE/src/net/tnemc/core/common/module/Module.java @@ -39,6 +39,10 @@ public abstract class Module { public Module() { } + public String updateURL() { + return ""; + } + /** * @return a list of the classes that contain {@link net.tnemc.core.common.module.injectors.ModuleInjector module injectors} for this module. */ diff --git a/TNE/src/net/tnemc/core/common/module/ModuleLoader.java b/TNE/src/net/tnemc/core/common/module/ModuleLoader.java index a9373c84..751a00d8 100644 --- a/TNE/src/net/tnemc/core/common/module/ModuleLoader.java +++ b/TNE/src/net/tnemc/core/common/module/ModuleLoader.java @@ -8,8 +8,14 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.lang.reflect.Method; +import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -32,6 +38,15 @@ **/ public class ModuleLoader { + public static Map modulePaths = new HashMap<>(); + + static { + modulePaths.put("conversion", "https://github.com/TheNewEconomy/TNE-Bukkit/releases/download/Conversion/Conversion.jar"); + modulePaths.put("h2", "https://github.com/TheNewEconomy/TNE-Bukkit/releases/download/H2/H2.jar"); + modulePaths.put("mobs", "https://github.com/TheNewEconomy/TNE-Bukkit/releases/download/Mobs/Mobs.jar"); + modulePaths.put("mysql", "https://github.com/TheNewEconomy/TNE-Bukkit/releases/download/mysql/MySQL.jar"); + } + private File modulesYAML; private FileConfiguration moduleConfigurations; private Map modules = new HashMap<>(); @@ -79,6 +94,13 @@ public boolean hasModule(String moduleName) { return modules.containsKey(moduleName); } + public boolean hasModuleWithoutCase(String moduleName) { + for (String key : modules.keySet()) { + if(key.equalsIgnoreCase(moduleName)) return true; + } + return false; + } + public ModuleEntry getModule(String moduleName) { return modules.get(moduleName); } @@ -100,7 +122,7 @@ public String findPath(String moduleName) { public void unload(String moduleName) { if(hasModule(moduleName)) { ModuleEntry entry = getModule(moduleName); - entry.getModule().getListeners(TNE.instance()).forEach(value->value.unregister()); + entry.getModule().getListeners(TNE.instance()).forEach(ModuleListener::unregister); entry.getModule().unload(TNE.instance()); entry.unload(); @@ -178,12 +200,8 @@ private Module getModuleClass(String modulePath) { mainClass = urlClassLoader.loadClass(moduleMain); moduleClass = mainClass.asSubclass(Module.class); module = moduleClass.newInstance(); - module.moduleInjectors().forEach(value->registerInjectors(value)); - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InstantiationException e) { + module.moduleInjectors().forEach(this::registerInjectors); + } catch (MalformedURLException | IllegalAccessException | InstantiationException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { TNE.logger().info("Unable to locate module main class for file " + file.getName()); @@ -247,4 +265,32 @@ public Map getModules() { public String getLastVersion(String name) { return moduleConfigurations.getString("Modules.DONTMODIFY." + name, modules.get(name).getInfo().version()); } + + public static void downloadModule(String module) { + if(modulePaths.containsKey(module)) { + try { + final String fileURL = modulePaths.get(module); + final URL url = new URL(fileURL); + HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); + int responseCode = httpConn.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + String fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1, fileURL.length()); + + InputStream in = httpConn.getInputStream(); + FileOutputStream out = new FileOutputStream(TNE.instance().getDataFolder() + File.separator + "modules" + File.separator + fileName); + + int bytesRead = -1; + byte[] buffer = new byte[4096]; + while ((bytesRead = in.read(buffer)) != -1) { + out.write(buffer, 0, bytesRead); + } + + out.close(); + in.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } } \ No newline at end of file diff --git a/TNE/src/net/tnemc/core/common/transaction/type/TNETransactionType.java b/TNE/src/net/tnemc/core/common/transaction/type/TNETransactionType.java index 1f3a9803..a8e3b3a1 100644 --- a/TNE/src/net/tnemc/core/common/transaction/type/TNETransactionType.java +++ b/TNE/src/net/tnemc/core/common/transaction/type/TNETransactionType.java @@ -64,12 +64,12 @@ default TransactionResult perform(Transaction transaction) { TNE.debug("Account null: " + (tneTransaction.getInitiator() == null)); TNE.debug("Transaction.initiator null: " + (tneTransaction == null)); TNE.debug("Transaction.initiatorCharge null: " + (tneTransaction.initiatorCharge() == null)); - proceed = canCharge(tneTransaction.getInitiator(), tneTransaction.initiatorBalance().getAmount(), tneTransaction.initiatorCharge().getAmount(), tneTransaction.initiatorCharge()); + proceed = canCharge(tneTransaction.initiatorBalance().getAmount(), tneTransaction.initiatorCharge().getAmount(), tneTransaction.initiatorCharge()); } if(affected().equals(TransactionAffected.BOTH) || affected().equals(TransactionAffected.RECIPIENT)) { TNE.debug("second if"); if(affected().equals(TransactionAffected.BOTH) && proceed || affected().equals(TransactionAffected.RECIPIENT)) { - proceed = canCharge(tneTransaction.getRecipient(), tneTransaction.recipientBalance().getAmount(), tneTransaction.recipientCharge().getAmount(), tneTransaction.recipientCharge()); + proceed = canCharge(tneTransaction.recipientBalance().getAmount(), tneTransaction.recipientCharge().getAmount(), tneTransaction.recipientCharge()); } } @@ -93,15 +93,16 @@ default TransactionResult perform(Transaction transaction) { } default boolean handleCharge(TNEAccount account, BigDecimal balance, BigDecimal amount, TransactionCharge charge) { + if(amount.compareTo(BigDecimal.ZERO) == 0) return true; if(charge.getType().equals(TransactionChargeType.LOSE)) { - account.setHoldings(charge.getWorld(), charge.getCurrency().name(), balance.subtract(amount), false, false); + account.removeHoldings(amount, charge.getCurrency(), charge.getWorld()); return true; } - account.setHoldings(charge.getWorld(), charge.getCurrency().name(), balance.add(amount), false, false); + account.setHoldings(charge.getWorld(), charge.getCurrency().name(), balance.subtract(account.getNonCoreHoldings(charge.getWorld(), charge.getCurrency().name(), false)).add(amount)); return true; } - default boolean canCharge(TNEAccount account, BigDecimal balance, BigDecimal amount, TransactionCharge charge) { + default boolean canCharge(BigDecimal balance, BigDecimal amount, TransactionCharge charge) { if(charge.getType().equals(TransactionChargeType.LOSE)) { return balance.compareTo(amount) >= 0; } diff --git a/TNE/src/net/tnemc/core/listeners/PlayerListener.java b/TNE/src/net/tnemc/core/listeners/PlayerListener.java index 7960c657..97be7ac0 100644 --- a/TNE/src/net/tnemc/core/listeners/PlayerListener.java +++ b/TNE/src/net/tnemc/core/listeners/PlayerListener.java @@ -24,7 +24,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.AsyncPlayerChatEvent; @@ -240,19 +239,6 @@ public void onChat(AsyncPlayerChatEvent event) { } } - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onCraftEvent(CraftItemEvent event) { - if(!TNE.configurations().getBoolean("Core.Server.CurrencyCrafting")) { - final String world = WorldFinder.getWorld(event.getWhoClicked(), WorldVariant.BALANCE); - for (ItemStack item : event.getInventory().getMatrix()) { - if (item != null && TNE.manager().currencyManager().currencyFromItem(world, item).isPresent()) { - event.setCancelled(true); - break; - } - } - } - } - @EventHandler(priority = EventPriority.HIGHEST) public void onLevelChange(final PlayerLevelChangeEvent event) { if(TNE.manager().isXPGain(IDFinder.getID(event.getPlayer()))) { diff --git a/TNE/src/net/tnemc/resources/config.yml b/TNE/src/net/tnemc/resources/config.yml index 522234a0..d8eb916e 100644 --- a/TNE/src/net/tnemc/resources/config.yml +++ b/TNE/src/net/tnemc/resources/config.yml @@ -28,9 +28,6 @@ Core: #Whether or not experience gains should be disabled. This will help for servers that use Experience as currency. ExperienceGain: false - #Whether or not players are able to use their currency for crafting. - CurrencyCrafting: true - #Whether or not players are able to use currency in villager trades. CurrencyTrading: true diff --git a/TNE/src/net/tnemc/resources/mobs.yml b/TNE/src/net/tnemc/resources/mobs.yml index 6423f73d..41d5c307 100644 --- a/TNE/src/net/tnemc/resources/mobs.yml +++ b/TNE/src/net/tnemc/resources/mobs.yml @@ -20,13 +20,20 @@ Mobs: #Settings relating to item multipliers. #Here you may specify multipliers for killing entities with certain items. Multipliers: - DIAMOND_SWORD: + EXAMPLE_ITEM: #The chance to get this multiplier. Value must be between 0 and 100 Chance: 10 #The multiplier that is applied when killing an entity with this item. Multiplier: 10.00 + FIST: + #The chance to get this multiplier. Value must be between 0 and 100 + Chance: 100 + + #The multiplier that is applied when killing an entity with this item. + Multiplier: 1 + #Reward configurations for individual mobs #The configurations used for mobs that are not in vanilla MC or in your version of Bukkit Default: diff --git a/TNE/src/net/tnemc/resources/plugin.yml b/TNE/src/net/tnemc/resources/plugin.yml index 85dbc634..17db06d9 100644 --- a/TNE/src/net/tnemc/resources/plugin.yml +++ b/TNE/src/net/tnemc/resources/plugin.yml @@ -1,6 +1,6 @@ #General Data name: TheNewEconomy -version: 0.1.1.1 +version: 0.1.1.2 description: A modular feature-packed Bukkit Economy Plugin. author: creatorfromhell api-version: 1.13 diff --git a/TNEMobs/src/net/tnemc/mobs/MobConfiguration.java b/TNEMobs/src/net/tnemc/mobs/MobConfiguration.java index 1fb582c8..90951ca7 100644 --- a/TNEMobs/src/net/tnemc/mobs/MobConfiguration.java +++ b/TNEMobs/src/net/tnemc/mobs/MobConfiguration.java @@ -45,6 +45,14 @@ public void load(FileConfiguration configurationFile) { configurations.put("Mobs.Messages.KilledVowel", "You received $reward for killing an $mob."); configurations.put("Mobs.Messages.NPCTag", "I'm sorry, but you cannot use a name tag on a villager"); + if(configurationFile.contains("Mobs.Multipliers")) { + Set keys = configurationFile.getConfigurationSection("Mobs.Multipliers").getKeys(false); + for(String material : keys) { + configurations.put("Mobs.Multipliers." + material + ".Chance", 100); + configurations.put("Mobs.Multipliers." + material + ".Multiplier", 1); + } + } + for(EntityType type : EntityType.values()) { configurations.put("Mobs." + type.name() + ".Enabled", true); configurations.put("Mobs." + type.name() + ".RewardCurrency", "Default"); diff --git a/TNEMobs/src/net/tnemc/mobs/MobsListener.java b/TNEMobs/src/net/tnemc/mobs/MobsListener.java index 46201182..64991398 100644 --- a/TNEMobs/src/net/tnemc/mobs/MobsListener.java +++ b/TNEMobs/src/net/tnemc/mobs/MobsListener.java @@ -12,6 +12,7 @@ import net.tnemc.core.economy.transaction.charge.TransactionCharge; import net.tnemc.core.economy.transaction.charge.TransactionChargeType; import net.tnemc.core.economy.transaction.result.TransactionResult; +import org.bukkit.Material; import org.bukkit.entity.Ageable; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -25,6 +26,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.inventory.ItemStack; import java.math.BigDecimal; import java.util.UUID; @@ -165,6 +167,8 @@ public void onEntityDeath(final EntityDeathEvent event) { } //System.out.println("Mob Name1: " + mob); + final ItemStack tool = event.getEntity().getKiller().getInventory().getItemInMainHand(); + final String material = (tool != null && tool.getType() != null && !tool.getType().equals(Material.AIR))? tool.getType().name() : "FIST"; if (!MobsModule.instance().fileConfiguration.contains("Mobs." + mob)) mob = "Default"; //System.out.println("Mob Name2: " + mob); @@ -172,7 +176,7 @@ public void onEntityDeath(final EntityDeathEvent event) { mob = "Custom.Entries." + entity.getCustomName(); String currency = MobsModule.instance().mobCurrency(mob, world, id.toString()); reward = (player) ? MobsModule.instance().playerReward(mob, world, id.toString()) : MobsModule.instance().mobReward(mob, world, id.toString()); - //reward = CurrencyFormatter.round(world, currency, reward.multiply(MobsModule.instance().getRewardMultiplier(mob, world, id.toString()))); + reward = CurrencyFormatter.round(world, currency, reward.multiply(MobsModule.instance().multiplier(material, world, id.toString()))); String formatted = (mob.equalsIgnoreCase("Default") && event.getEntityType().toString() != null) ? event.getEntityType().toString() : mob; //System.out.println("Mob Name3: " + mob); if (entity.getCustomName() != null && MobsModule.instance().fileConfiguration.contains("Mobs.Custom.Entries." + entity.getCustomName())) diff --git a/TNEMobs/src/net/tnemc/mobs/MobsModule.java b/TNEMobs/src/net/tnemc/mobs/MobsModule.java index 14d742f1..2afd59a1 100644 --- a/TNEMobs/src/net/tnemc/mobs/MobsModule.java +++ b/TNEMobs/src/net/tnemc/mobs/MobsModule.java @@ -12,6 +12,7 @@ import java.io.Reader; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; +import java.util.Random; import java.util.UUID; /** @@ -113,6 +114,20 @@ public Boolean mobAge(String world, String player) { return TNE.instance().api().getBoolean("Mobs.EnableAge", world, player); } + public BigDecimal multiplier(String material, String world, String player) { + if(TNE.instance().api().getConfiguration("Mobs.Multipliers." + material + ".Chance", world, player) == null + || TNE.instance().api().getConfiguration("Mobs.Multipliers." + material + ".Multiplier", world, player) == null) { + return BigDecimal.ONE; + } + final int chance = TNE.instance().api().getInteger("Mobs.Multipliers." + material + ".Chance", world, player); + if(chance > 0) { + if(new Random().nextFloat() <= (chance/100)) { + return TNE.instance().api().getBigDecimal("Mobs.Multipliers." + material + ".Multiplier", world, player); + } + } + return BigDecimal.ONE; + } + public Boolean mobEnabled(String mob, String world, String player) { //System.out.println("ConfigurationManager.mobEnabled(" + mob + ", " + world + "," + player + ")"); TNE.debug(TNE.instance().api().getConfiguration("Mobs." + mob + ".Enabled", world, player) + "");