From c490e34fc68dd1c99afd13d5051297ea724659e5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Jan 2017 13:28:59 +0200 Subject: [PATCH] Allow to set bossbar bar colors by jobs --- .../jobs/config/BossBarManager.java | 310 ++++++------- com/gamingmesh/jobs/config/ConfigManager.java | 14 +- com/gamingmesh/jobs/container/Job.java | 12 +- .../jobs/economy/BufferedEconomy.java | 416 +++++++++--------- com/gamingmesh/jobs/stuff/ActionBar.java | 2 + 5 files changed, 396 insertions(+), 358 deletions(-) diff --git a/com/gamingmesh/jobs/config/BossBarManager.java b/com/gamingmesh/jobs/config/BossBarManager.java index 16f223fe..c903dbb9 100644 --- a/com/gamingmesh/jobs/config/BossBarManager.java +++ b/com/gamingmesh/jobs/config/BossBarManager.java @@ -1,147 +1,163 @@ - -package com.gamingmesh.jobs.config; - -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.Player; - -import com.gamingmesh.jobs.Jobs; -import com.gamingmesh.jobs.container.BossBarInfo; -import com.gamingmesh.jobs.container.JobProgression; -import com.gamingmesh.jobs.container.JobsPlayer; - -public class BossBarManager { - - Jobs plugin; - - public BossBarManager(Jobs plugin) { - this.plugin = plugin; - } - - public synchronized void ShowJobProgression(final JobsPlayer player) { - if (Jobs.getActionBar().getVersion() < 1900) - return; - - if (player == null) - return; - - List temp = new ArrayList(); - - temp.addAll(player.getUpdateBossBarFor()); - - for (String one : temp) { - for (JobProgression oneJob : player.getJobProgression()) { - if (one.equalsIgnoreCase(oneJob.getJob().getName())) - ShowJobProgression(player, oneJob); - } - } - player.clearUpdateBossBarFor(); - } - - public synchronized void ShowJobProgression(final JobsPlayer player, final JobProgression jobProg) { - if (Jobs.getActionBar().getVersion() < 1900) - return; - String playername = player.getUserName(); - if (!Jobs.getBossBarToggleList().containsKey(playername) && Jobs.getGCManager().BossBarsMessageByDefault) - Jobs.getBossBarToggleList().put(playername, true); - - if (!Jobs.getBossBarToggleList().containsKey(playername)) - return; - - Boolean show = Jobs.getBossBarToggleList().get(playername); - - if (!show) - return; - - BossBar bar = null; - BossBarInfo OldOne = null; - for (BossBarInfo one : player.getBossBarInfo()) { - if (!one.getJobName().equalsIgnoreCase(jobProg.getJob().getName())) - continue; - - one.cancel(); - bar = one.getBar(); - OldOne = one; - break; - } - NumberFormat formatter = new DecimalFormat("#0.00"); - - String message = Jobs.getLanguage().getMessage("command.stats.output", - "%joblevel%", Integer.valueOf(jobProg.getLevel()).toString(), - "%jobname%", jobProg.getJob().getChatColor() + jobProg.getJob().getName() + ChatColor.WHITE, - "%jobxp%", formatter.format(Math.round(jobProg.getExperience() * 100.0) / 100.0), - "%jobmaxxp%", jobProg.getMaxExperience()); - - if (bar == null) { - BarColor color = BarColor.BLUE; - switch (player.getBossBarInfo().size()) { - case 1: - color = BarColor.GREEN; - break; - case 2: - color = BarColor.RED; - break; - case 3: - color = BarColor.WHITE; - break; - case 4: - color = BarColor.YELLOW; - break; - case 5: - color = BarColor.PINK; - break; - case 6: - color = BarColor.PURPLE; - break; - } - bar = Bukkit.createBossBar(message, color, BarStyle.SEGMENTED_20); - } else - bar.setTitle(message); - - double percentage = jobProg.getExperience() / jobProg.getMaxExperience(); - try { - bar.setProgress(percentage); - if (OldOne == null) { - Player target = Bukkit.getPlayer(player.getPlayer().getUniqueId()); - if (target == null) - return; - bar.addPlayer(target); - OldOne = new BossBarInfo(player.getUserName(), jobProg.getJob().getName(), bar); - player.getBossBarInfo().add(OldOne); - } - bar.setVisible(true); - } catch (NoSuchMethodError e) { - } - - if (OldOne == null) - return; - - OldOne.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - - for (BossBarInfo one : player.getBossBarInfo()) { - if (!one.getPlayerName().equalsIgnoreCase(player.getUserName())) - continue; - - if (!one.getJobName().equalsIgnoreCase(jobProg.getJob().getName())) - continue; - - BossBar tempBar = one.getBar(); - tempBar.setVisible(false); - break; - } - return; - } - }, Jobs.getGCManager().BossBarTimer * 20L)); - - } -} + +package com.gamingmesh.jobs.config; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; + +import com.gamingmesh.jobs.Jobs; +import com.gamingmesh.jobs.container.BossBarInfo; +import com.gamingmesh.jobs.container.Job; +import com.gamingmesh.jobs.container.JobProgression; +import com.gamingmesh.jobs.container.JobsPlayer; + +public class BossBarManager { + + Jobs plugin; + + public BossBarManager(Jobs plugin) { + this.plugin = plugin; + } + + public synchronized void ShowJobProgression(final JobsPlayer player) { + if (Jobs.getActionBar().getVersion() < 1900) + return; + + if (player == null) + return; + + List temp = new ArrayList(); + + temp.addAll(player.getUpdateBossBarFor()); + + for (String one : temp) { + for (JobProgression oneJob : player.getJobProgression()) { + if (one.equalsIgnoreCase(oneJob.getJob().getName())) + ShowJobProgression(player, oneJob); + } + } + player.clearUpdateBossBarFor(); + } + + public synchronized void ShowJobProgression(final JobsPlayer player, final JobProgression jobProg) { + if (Jobs.getActionBar().getVersion() < 1900) + return; + String playername = player.getUserName(); + if (!Jobs.getBossBarToggleList().containsKey(playername) && Jobs.getGCManager().BossBarsMessageByDefault) + Jobs.getBossBarToggleList().put(playername, true); + + if (!Jobs.getBossBarToggleList().containsKey(playername)) + return; + + Boolean show = Jobs.getBossBarToggleList().get(playername); + + if (!show) + return; + + BossBar bar = null; + BossBarInfo OldOne = null; + for (BossBarInfo one : player.getBossBarInfo()) { + if (!one.getJobName().equalsIgnoreCase(jobProg.getJob().getName())) + continue; + + one.cancel(); + bar = one.getBar(); + OldOne = one; + break; + } + NumberFormat formatter = new DecimalFormat("#0.00"); + + String message = Jobs.getLanguage().getMessage("command.stats.output", + "%joblevel%", Integer.valueOf(jobProg.getLevel()).toString(), + "%jobname%", jobProg.getJob().getChatColor() + jobProg.getJob().getName() + ChatColor.WHITE, + "%jobxp%", formatter.format(Math.round(jobProg.getExperience() * 100.0) / 100.0), + "%jobmaxxp%", jobProg.getMaxExperience()); + + if (bar == null) { + BarColor color = getColor(jobProg.getJob()); + if (color == null) { + switch (player.getBossBarInfo().size()) { + case 1: + color = BarColor.GREEN; + break; + case 2: + color = BarColor.RED; + break; + case 3: + color = BarColor.WHITE; + break; + case 4: + color = BarColor.YELLOW; + break; + case 5: + color = BarColor.PINK; + break; + case 6: + color = BarColor.PURPLE; + break; + default: + color = BarColor.BLUE; + break; + } + } + bar = Bukkit.createBossBar(message, color, BarStyle.SEGMENTED_20); + } else + bar.setTitle(message); + + double percentage = jobProg.getExperience() / jobProg.getMaxExperience(); + try { + bar.setProgress(percentage); + if (OldOne == null) { + Player target = Bukkit.getPlayer(player.getPlayer().getUniqueId()); + if (target == null) + return; + bar.addPlayer(target); + OldOne = new BossBarInfo(player.getUserName(), jobProg.getJob().getName(), bar); + player.getBossBarInfo().add(OldOne); + } + bar.setVisible(true); + } catch (NoSuchMethodError e) { + } + + if (OldOne == null) + return; + + OldOne.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + + for (BossBarInfo one : player.getBossBarInfo()) { + if (!one.getPlayerName().equalsIgnoreCase(player.getUserName())) + continue; + + if (!one.getJobName().equalsIgnoreCase(jobProg.getJob().getName())) + continue; + + BossBar tempBar = one.getBar(); + tempBar.setVisible(false); + break; + } + return; + } + }, Jobs.getGCManager().BossBarTimer * 20L)); + + } + + private BarColor getColor(Job job) { + if (job.getBossbar() == null) + return null; + for (BarColor color : BarColor.values()) { + if (job.getBossbar().equalsIgnoreCase(color.name())) + return color; + } + return null; + } +} diff --git a/com/gamingmesh/jobs/config/ConfigManager.java b/com/gamingmesh/jobs/config/ConfigManager.java index 068fe23b..75dda584 100644 --- a/com/gamingmesh/jobs/config/ConfigManager.java +++ b/com/gamingmesh/jobs/config/ConfigManager.java @@ -29,6 +29,7 @@ import java.util.List; import org.apache.commons.lang.StringEscapeUtils; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.boss.BarColor; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.enchantments.Enchantment; @@ -49,7 +50,6 @@ import com.gamingmesh.jobs.container.JobLimitedItems; import com.gamingmesh.jobs.container.JobPermission; import com.gamingmesh.jobs.resources.jfep.Parser; import com.gamingmesh.jobs.stuff.ChatColor; -import com.gamingmesh.jobs.stuff.Debug; public class ConfigManager { private Jobs plugin; @@ -154,6 +154,16 @@ public class ConfigManager { Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid ChatColour property. Defaulting to WHITE!"); } } + + String bossbar = null; + if (jobSection.contains("BossBarColour")) { + bossbar = jobSection.getString("BossBarColour", ""); + if (bossbar == null) { + color = ChatColor.WHITE; + Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid BossBarColour property."); + } + } + DisplayMethod displayMethod = DisplayMethod.matchMethod(jobSection.getString("chat-display", "")); if (displayMethod == null) { Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid chat-display property. Defaulting to None!"); @@ -406,7 +416,7 @@ public class ConfigManager { } Job job = new Job(jobName, jobShortName, description, color, maxExpEquation, displayMethod, maxLevel, vipmaxLevel, maxSlots, jobPermissions, jobCommand, - jobConditions, jobItems, jobLimitedItems, JobsCommandOnJoin, JobsCommandOnLeave, GUIitem); + jobConditions, jobItems, jobLimitedItems, JobsCommandOnJoin, JobsCommandOnLeave, GUIitem, bossbar); for (ActionType actionType : ActionType.values()) { ConfigurationSection typeSection = jobSection.getConfigurationSection(actionType.getName()); diff --git a/com/gamingmesh/jobs/container/Job.java b/com/gamingmesh/jobs/container/Job.java index a6157e56..ae4a8fcd 100644 --- a/com/gamingmesh/jobs/container/Job.java +++ b/com/gamingmesh/jobs/container/Job.java @@ -71,6 +71,7 @@ public class Job { private Double bonus = null; private BoostMultiplier boost = new BoostMultiplier(); + private String bossbar; /** * Constructor @@ -93,7 +94,7 @@ public class Job { */ public Job(String jobName, String jobShortName, String description, ChatColor jobColour, Parser maxExpEquation, DisplayMethod displayMethod, int maxLevel, int vipmaxLevel, Integer maxSlots, List jobPermissions, List jobCommands, List jobConditions, List jobItems, - List jobLimitedItems, List CmdOnJoin, List CmdOnLeave, ItemStack GUIitem) { + List jobLimitedItems, List CmdOnJoin, List CmdOnLeave, ItemStack GUIitem, String bossbar) { this.jobName = jobName; this.jobShortName = jobShortName; this.description = description; @@ -111,6 +112,7 @@ public class Job { this.CmdOnJoin = CmdOnJoin; this.CmdOnLeave = CmdOnLeave; this.GUIitem = GUIitem; + this.bossbar = bossbar; } public void addBoost(CurrencyType type, double Point) { @@ -342,4 +344,12 @@ public class Job { public List getLimitedItems() { return Collections.unmodifiableList(jobLimitedItems); } + + public String getBossbar() { + return bossbar; + } + + public void setBossbar(String bossbar) { + this.bossbar = bossbar; + } } diff --git a/com/gamingmesh/jobs/economy/BufferedEconomy.java b/com/gamingmesh/jobs/economy/BufferedEconomy.java index d6eb7811..71c9fa64 100644 --- a/com/gamingmesh/jobs/economy/BufferedEconomy.java +++ b/com/gamingmesh/jobs/economy/BufferedEconomy.java @@ -1,208 +1,208 @@ -/** - * Jobs Plugin for Bukkit - * Copyright (C) 2011 Zak Ford - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.gamingmesh.jobs.economy; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.LinkedBlockingQueue; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import com.gamingmesh.jobs.Jobs; -import com.gamingmesh.jobs.api.JobsPaymentEvent; -import com.gamingmesh.jobs.container.JobsPlayer; -import com.gamingmesh.jobs.stuff.ChatColor; -import com.gamingmesh.jobs.tasks.BufferedPaymentTask; - -public class BufferedEconomy { - private Jobs plugin; - private Economy economy; - private LinkedBlockingQueue payments = new LinkedBlockingQueue(); - private final Map paymentCache = Collections.synchronizedMap(new HashMap()); - - private OfflinePlayer ServerAccount = null; - private OfflinePlayer ServerTaxesAccount = null; - - PaymentData PaymentData = new PaymentData(); - - public BufferedEconomy(Jobs plugin, Economy economy) { - this.plugin = plugin; - this.economy = economy; - } - - /** - * Add payment to player's payment buffer - * @param player - player to be paid - * @param amount - amount to be paid - */ - public void pay(JobsPlayer player, double amount, double points, double exp) { - pay(new BufferedPayment(player.getPlayer(), amount, points, exp)); - } - - /** - * Add payment to player's payment buffer - * @param payment - payment to be paid - */ - public void pay(BufferedPayment payment) { - payments.add(payment); - } - - public String format(double money) { - return economy.format(money); - } - - /** - * Payout all players the amount they are going to be paid - */ - @SuppressWarnings("deprecation") - public void payAll() { - if (payments.isEmpty()) - return; - - synchronized (paymentCache) { - - Double TotalAmount = 0.0; - Double TotalPoints = 0.0; - Double TaxesAmount = 0.0; - Double TaxesPoints = 0.0; - - // combine all payments using paymentCache - while (!payments.isEmpty()) { - BufferedPayment payment = payments.remove(); - TotalAmount += payment.getAmount(); - TotalPoints += payment.getPoints(); - - if (Jobs.getGCManager().UseTaxes) { - TaxesAmount += payment.getAmount() * (Jobs.getGCManager().TaxesAmount / 100.0); - TaxesPoints += payment.getPoints() * (Jobs.getGCManager().TaxesAmount / 100.0); - } - - if (payment.getOfflinePlayer() == null) - continue; - - UUID uuid = payment.getOfflinePlayer().getUniqueId(); - if (paymentCache.containsKey(uuid)) { - BufferedPayment existing = paymentCache.get(uuid); - - double money = payment.getAmount(); - double points = payment.getPoints(); - double exp = payment.getExp(); - - if (Jobs.getGCManager().TakeFromPlayersPayment && Jobs.getGCManager().UseTaxes) { - money = money - (money * (Jobs.getGCManager().TaxesAmount / 100.0)); - points = points - (points * (Jobs.getGCManager().TaxesAmount / 100.0)); - } - - existing.setAmount(existing.getAmount() + money); - existing.setPoints(existing.getPoints() + points); - existing.setExp(existing.getExp() + exp); - } else { - - double money = payment.getAmount(); - double points = payment.getPoints(); - - if (Jobs.getGCManager().TakeFromPlayersPayment && Jobs.getGCManager().UseTaxes) { - payment.setAmount(money - (money * (Jobs.getGCManager().TaxesAmount / 100.0))); - payment.setPoints(points - (points * (Jobs.getGCManager().TaxesAmount / 100.0))); - } - - paymentCache.put(uuid, payment); - } - } - - boolean hasMoney = false; - String ServerAccountname = Jobs.getGCManager().ServerAcountName; - String ServerTaxesAccountname = Jobs.getGCManager().ServertaxesAcountName; - if (this.ServerAccount == null) - this.ServerAccount = Bukkit.getOfflinePlayer(ServerAccountname); - - if (this.ServerTaxesAccount == null) - this.ServerTaxesAccount = Bukkit.getOfflinePlayer(ServerTaxesAccountname); - - if (Jobs.getGCManager().UseTaxes && Jobs.getGCManager().TransferToServerAccount && ServerTaxesAccount != null) { - economy.depositPlayer(ServerTaxesAccount, TaxesAmount); - - if (ServerTaxesAccount.isOnline()) { - if (!Jobs.getActionbarToggleList().containsKey(ServerTaxesAccountname) && Jobs.getGCManager().ActionBarsMessageByDefault) - Jobs.getActionbarToggleList().put(ServerTaxesAccountname, true); - if (Jobs.getActionbarToggleList().containsKey(ServerTaxesAccountname) && Jobs.getActionbarToggleList().get(ServerTaxesAccountname)) { - Jobs.getActionBar().send(Bukkit.getPlayer(ServerAccountname), Jobs.getLanguage().getMessage("message.taxes", "[amount]", (int) (TotalAmount * 100) - / 100.0)); - } - } - } - - if (Jobs.getGCManager().UseServerAccount) { - if (economy.hasMoney(ServerAccountname, TotalAmount)) { - hasMoney = true; - economy.withdrawPlayer(ServerAccountname, TotalAmount); - } - } - - // Schedule all payments - int i = 0; - for (BufferedPayment payment : paymentCache.values()) { - i++; - - if (payment.getOfflinePlayer() == null) - continue; - - // JobsPayment event - JobsPaymentEvent JobsPaymentEvent = new JobsPaymentEvent(payment.getOfflinePlayer(), payment.getAmount(), payment.getPoints()); - Bukkit.getServer().getPluginManager().callEvent(JobsPaymentEvent); - // If event is canceled, dont do anything - if (JobsPaymentEvent.isCancelled()) - continue; - - payment.setAmount(JobsPaymentEvent.getAmount()); - payment.setPoints(JobsPaymentEvent.getPoints()); - - if (Jobs.getGCManager().UseServerAccount) { - if (!hasMoney) { - Jobs.getActionBar().send(payment.getOfflinePlayer().getPlayer(), ChatColor.RED + Jobs.getLanguage().getMessage("economy.error.nomoney")); - continue; - } - if (Jobs.getGCManager().isEconomyAsync()) - Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new BufferedPaymentTask(this, economy, payment), i); - else - Bukkit.getScheduler().runTaskLater(plugin, new BufferedPaymentTask(this, economy, payment), i); - } else { - if (Jobs.getGCManager().isEconomyAsync()) - Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new BufferedPaymentTask(this, economy, payment), i); - else - Bukkit.getScheduler().runTaskLater(plugin, new BufferedPaymentTask(this, economy, payment), i); - } - try { - // Action bar stuff - Jobs.getActionBar().ShowActionBar(payment); - if (payment.getOfflinePlayer().isOnline()) { - JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(payment.getOfflinePlayer().getName()); - Jobs.getBBManager().ShowJobProgression(jPlayer); - } - } catch (Exception e) { - } - } - // empty payment cache - paymentCache.clear(); - } - - } -} +/** + * Jobs Plugin for Bukkit + * Copyright (C) 2011 Zak Ford + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.gamingmesh.jobs.economy; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.LinkedBlockingQueue; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import com.gamingmesh.jobs.Jobs; +import com.gamingmesh.jobs.api.JobsPaymentEvent; +import com.gamingmesh.jobs.container.JobsPlayer; +import com.gamingmesh.jobs.stuff.ChatColor; +import com.gamingmesh.jobs.tasks.BufferedPaymentTask; + +public class BufferedEconomy { + private Jobs plugin; + private Economy economy; + private LinkedBlockingQueue payments = new LinkedBlockingQueue(); + private final Map paymentCache = Collections.synchronizedMap(new HashMap()); + + private OfflinePlayer ServerAccount = null; + private OfflinePlayer ServerTaxesAccount = null; + + PaymentData PaymentData = new PaymentData(); + + public BufferedEconomy(Jobs plugin, Economy economy) { + this.plugin = plugin; + this.economy = economy; + } + + /** + * Add payment to player's payment buffer + * @param player - player to be paid + * @param amount - amount to be paid + */ + public void pay(JobsPlayer player, double amount, double points, double exp) { + pay(new BufferedPayment(player.getPlayer(), amount, points, exp)); + } + + /** + * Add payment to player's payment buffer + * @param payment - payment to be paid + */ + public void pay(BufferedPayment payment) { + payments.add(payment); + } + + public String format(double money) { + return economy.format(money); + } + + /** + * Payout all players the amount they are going to be paid + */ + @SuppressWarnings("deprecation") + public void payAll() { + if (payments.isEmpty()) + return; + + synchronized (paymentCache) { + + Double TotalAmount = 0.0; + Double TotalPoints = 0.0; + Double TaxesAmount = 0.0; + Double TaxesPoints = 0.0; + + // combine all payments using paymentCache + while (!payments.isEmpty()) { + BufferedPayment payment = payments.remove(); + TotalAmount += payment.getAmount(); + TotalPoints += payment.getPoints(); + + if (Jobs.getGCManager().UseTaxes) { + TaxesAmount += payment.getAmount() * (Jobs.getGCManager().TaxesAmount / 100.0); + TaxesPoints += payment.getPoints() * (Jobs.getGCManager().TaxesAmount / 100.0); + } + + if (payment.getOfflinePlayer() == null) + continue; + + UUID uuid = payment.getOfflinePlayer().getUniqueId(); + if (paymentCache.containsKey(uuid)) { + BufferedPayment existing = paymentCache.get(uuid); + + double money = payment.getAmount(); + double points = payment.getPoints(); + double exp = payment.getExp(); + + if (Jobs.getGCManager().TakeFromPlayersPayment && Jobs.getGCManager().UseTaxes) { + money = money - (money * (Jobs.getGCManager().TaxesAmount / 100.0)); + points = points - (points * (Jobs.getGCManager().TaxesAmount / 100.0)); + } + + existing.setAmount(existing.getAmount() + money); + existing.setPoints(existing.getPoints() + points); + existing.setExp(existing.getExp() + exp); + } else { + + double money = payment.getAmount(); + double points = payment.getPoints(); + + if (Jobs.getGCManager().TakeFromPlayersPayment && Jobs.getGCManager().UseTaxes) { + payment.setAmount(money - (money * (Jobs.getGCManager().TaxesAmount / 100.0))); + payment.setPoints(points - (points * (Jobs.getGCManager().TaxesAmount / 100.0))); + } + + paymentCache.put(uuid, payment); + } + } + + boolean hasMoney = false; + String ServerAccountname = Jobs.getGCManager().ServerAcountName; + String ServerTaxesAccountname = Jobs.getGCManager().ServertaxesAcountName; + if (this.ServerAccount == null) + this.ServerAccount = Bukkit.getOfflinePlayer(ServerAccountname); + + if (this.ServerTaxesAccount == null) + this.ServerTaxesAccount = Bukkit.getOfflinePlayer(ServerTaxesAccountname); + + if (Jobs.getGCManager().UseTaxes && Jobs.getGCManager().TransferToServerAccount && ServerTaxesAccount != null) { + economy.depositPlayer(ServerTaxesAccount, TaxesAmount); + + if (ServerTaxesAccount.isOnline()) { + if (!Jobs.getActionbarToggleList().containsKey(ServerTaxesAccountname) && Jobs.getGCManager().ActionBarsMessageByDefault) + Jobs.getActionbarToggleList().put(ServerTaxesAccountname, true); + if (Jobs.getActionbarToggleList().containsKey(ServerTaxesAccountname) && Jobs.getActionbarToggleList().get(ServerTaxesAccountname)) { + Jobs.getActionBar().send(Bukkit.getPlayer(ServerAccountname), Jobs.getLanguage().getMessage("message.taxes", "[amount]", (int) (TotalAmount * 100) + / 100.0)); + } + } + } + + if (Jobs.getGCManager().UseServerAccount) { + if (economy.hasMoney(ServerAccountname, TotalAmount)) { + hasMoney = true; + economy.withdrawPlayer(ServerAccountname, TotalAmount); + } + } + + // Schedule all payments + int i = 0; + for (BufferedPayment payment : paymentCache.values()) { + i++; + + if (payment.getOfflinePlayer() == null) + continue; + + // JobsPayment event + JobsPaymentEvent JobsPaymentEvent = new JobsPaymentEvent(payment.getOfflinePlayer(), payment.getAmount(), payment.getPoints()); + Bukkit.getServer().getPluginManager().callEvent(JobsPaymentEvent); + // If event is canceled, dont do anything + if (JobsPaymentEvent.isCancelled()) + continue; + + payment.setAmount(JobsPaymentEvent.getAmount()); + payment.setPoints(JobsPaymentEvent.getPoints()); + + if (Jobs.getGCManager().UseServerAccount) { + if (!hasMoney) { + Jobs.getActionBar().send(payment.getOfflinePlayer().getPlayer(), ChatColor.RED + Jobs.getLanguage().getMessage("economy.error.nomoney")); + continue; + } + if (Jobs.getGCManager().isEconomyAsync()) + Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new BufferedPaymentTask(this, economy, payment), i); + else + Bukkit.getScheduler().runTaskLater(plugin, new BufferedPaymentTask(this, economy, payment), i); + } else { + if (Jobs.getGCManager().isEconomyAsync()) + Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new BufferedPaymentTask(this, economy, payment), i); + else + Bukkit.getScheduler().runTaskLater(plugin, new BufferedPaymentTask(this, economy, payment), i); + } + try { + // Action bar stuff + Jobs.getActionBar().ShowActionBar(payment); + if (payment.getOfflinePlayer().isOnline() && Jobs.getActionBar().getVersion() > 1900) { + JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(payment.getOfflinePlayer().getName()); + Jobs.getBBManager().ShowJobProgression(jPlayer); + } + } catch (Exception e) { + } + } + // empty payment cache + paymentCache.clear(); + } + + } +} diff --git a/com/gamingmesh/jobs/stuff/ActionBar.java b/com/gamingmesh/jobs/stuff/ActionBar.java index e0de4ab6..035e0475 100644 --- a/com/gamingmesh/jobs/stuff/ActionBar.java +++ b/com/gamingmesh/jobs/stuff/ActionBar.java @@ -64,6 +64,8 @@ public class ActionBar { cleanVersion = 1920; if (version.contains("v1_10_R1")) cleanVersion = 11010; + if (version.contains("v1_11_R1")) + cleanVersion = 11110; } if (cleanVersion < 1400)