From 2da51e65b14acfcf18e7027ef5a7abe9cafa005b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 5 Jan 2023 18:14:50 +0200 Subject: [PATCH] Fixing permissions --- src/main/java/com/gamingmesh/jobs/Jobs.java | 2 + .../gamingmesh/jobs/PermissionManager.java | 216 +++++++-------- .../jobs/commands/list/editquests.java | 245 ++++++++++-------- .../gamingmesh/jobs/config/ConfigManager.java | 1 + .../gamingmesh/jobs/container/JobsPlayer.java | 25 +- .../com/gamingmesh/jobs/container/Quest.java | 10 + .../jobs/listeners/JobsPaymentListener.java | 21 +- .../com/gamingmesh/jobs/permissionInfo.java | 36 +++ 8 files changed, 315 insertions(+), 241 deletions(-) create mode 100644 src/main/java/com/gamingmesh/jobs/permissionInfo.java diff --git a/src/main/java/com/gamingmesh/jobs/Jobs.java b/src/main/java/com/gamingmesh/jobs/Jobs.java index bfcc9c01..d9e072df 100644 --- a/src/main/java/com/gamingmesh/jobs/Jobs.java +++ b/src/main/java/com/gamingmesh/jobs/Jobs.java @@ -997,6 +997,8 @@ public final class Jobs extends JavaPlugin { if (jPlayer == null) return; + CMIDebug.d("action"); + List progression = jPlayer.getJobProgression(); int numjobs = progression.size(); diff --git a/src/main/java/com/gamingmesh/jobs/PermissionManager.java b/src/main/java/com/gamingmesh/jobs/PermissionManager.java index 72548a3c..3762257b 100644 --- a/src/main/java/com/gamingmesh/jobs/PermissionManager.java +++ b/src/main/java/com/gamingmesh/jobs/PermissionManager.java @@ -38,88 +38,88 @@ public class PermissionManager { private enum prm { // jobs_join_JOBNAME(remade("jobs.join.%JOBNAME%"), 60 * 1000), - jobs_use(remade("jobs.use"), 2), - jobs_paycreative(remade("jobs.paycreative"), 2), + jobs_use(remade("jobs.use"), 2), + jobs_paycreative(remade("jobs.paycreative"), 2), // jobs_boost_JOBNAME_money(remade("jobs.boost.%JOBNAME%.money"), 60 * 1000), // jobs_boost_JOBNAME_exp(remade("jobs.boost.%JOBNAME%.exp"), 60 * 1000), // jobs_boost_JOBNAME_points(remade("jobs.boost.%JOBNAME%.points"), 60 * 1000), // jobs_boost_JOBNAME_all(remade("jobs.boost.%JOBNAME%.all"), 60 * 1000), // jobs_leave_JOBNAME(remade("jobs.leave.%JOBNAME%"), 60 * 1000), - jobs_boost_JOBNAME_money_AMOUNT(remade("jobs.boost.%JOBNAME%.money.%AMOUNT%"), 60), - jobs_boost_JOBNAME_exp_AMOUNT(remade("jobs.boost.%JOBNAME%.exp.%AMOUNT%"), 60), - jobs_boost_JOBNAME_points_AMOUNT(remade("jobs.boost.%JOBNAME%.points.%AMOUNT%"), 60), - jobs_boost_JOBNAME_all_AMOUNT(remade("jobs.boost.%JOBNAME%.all.%AMOUNT%"), 60), - jobs_boost_all_money_AMOUNT(remade("jobs.boost.all.money.%AMOUNT%"), 60), - jobs_boost_all_exp_AMOUNT(remade("jobs.boost.all.exp.%AMOUNT%"), 60), - jobs_boost_all_points_AMOUNT(remade("jobs.boost.all.points.%AMOUNT%"), 60), - jobs_boost_all_all_AMOUNT(remade("jobs.boost.all.all.%AMOUNT%"), 60), - jobs_spawner_AMOUNT(remade("jobs.nearspawner.%AMOUNT%"), 60), - jobs_petpay_AMOUNT(remade("jobs.petpay.%AMOUNT%"), 60), - jobs_maxfurnaces_AMOUNT(remade("jobs.maxfurnaces.%AMOUNT%"), 2), - jobs_maxblastfurnaces_AMOUNT(remade("jobs.maxblastfurnaces.%AMOUNT%"), 2), - jobs_maxsmokers_AMOUNT(remade("jobs.maxsmokers.%AMOUNT%"), 2), - jobs_maxbrewingstands_AMOUNT(remade("jobs.maxbrewingstands.%AMOUNT%"), 2), - jobs_world_WORLDNAME(remade("jobs.world.%WORLDNAME%"), 2); + jobs_boost_JOBNAME_money_AMOUNT(remade("jobs.boost.%JOBNAME%.money.%AMOUNT%"), 60), + jobs_boost_JOBNAME_exp_AMOUNT(remade("jobs.boost.%JOBNAME%.exp.%AMOUNT%"), 60), + jobs_boost_JOBNAME_points_AMOUNT(remade("jobs.boost.%JOBNAME%.points.%AMOUNT%"), 60), + jobs_boost_JOBNAME_all_AMOUNT(remade("jobs.boost.%JOBNAME%.all.%AMOUNT%"), 60), + jobs_boost_all_money_AMOUNT(remade("jobs.boost.all.money.%AMOUNT%"), 60), + jobs_boost_all_exp_AMOUNT(remade("jobs.boost.all.exp.%AMOUNT%"), 60), + jobs_boost_all_points_AMOUNT(remade("jobs.boost.all.points.%AMOUNT%"), 60), + jobs_boost_all_all_AMOUNT(remade("jobs.boost.all.all.%AMOUNT%"), 60), + jobs_spawner_AMOUNT(remade("jobs.nearspawner.%AMOUNT%"), 60), + jobs_petpay_AMOUNT(remade("jobs.petpay.%AMOUNT%"), 60), + jobs_maxfurnaces_AMOUNT(remade("jobs.maxfurnaces.%AMOUNT%"), 2), + jobs_maxblastfurnaces_AMOUNT(remade("jobs.maxblastfurnaces.%AMOUNT%"), 2), + jobs_maxsmokers_AMOUNT(remade("jobs.maxsmokers.%AMOUNT%"), 2), + jobs_maxbrewingstands_AMOUNT(remade("jobs.maxbrewingstands.%AMOUNT%"), 2), + jobs_world_WORLDNAME(remade("jobs.world.%WORLDNAME%"), 2); - private int reload; - private List perms; + private int reload; + private List perms; - prm(List perms, int reload) { - this.perms = perms; - this.reload = reload * 1000; - } + prm(List perms, int reload) { + this.perms = perms; + this.reload = reload * 1000; + } - public int getDelay() { - return reload; - } + public int getDelay() { + return reload; + } - private static List remade(String perm) { - List perms = new ArrayList<>(); + private static List remade(String perm) { + List perms = new ArrayList<>(); - for (Job oneJ : Jobs.getJobs()) { - String t = perm; + for (Job oneJ : Jobs.getJobs()) { + String t = perm; - if (t.contains("%JOBNAME%")) - t = t.replace("%JOBNAME%", oneJ.getName().toLowerCase()); + if (t.contains("%JOBNAME%")) + t = t.replace("%JOBNAME%", oneJ.getName().toLowerCase()); - t = t.replace("%AMOUNT%", ""); + t = t.replace("%AMOUNT%", ""); - perms.add(t); - } + perms.add(t); + } - if (perm.contains("%WORLDNAME%")) - for (World oneJ : Bukkit.getWorlds()) { - perms.add(perm.replace("%WORLDNAME%", oneJ.getName().toLowerCase())); - } + if (perm.contains("%WORLDNAME%")) + for (World oneJ : Bukkit.getWorlds()) { + perms.add(perm.replace("%WORLDNAME%", oneJ.getName().toLowerCase())); + } - return perms; - } + return perms; + } - public List getPerms() { - return perms; - } + public List getPerms() { + return perms; + } } private int getDelay(String perm) { - return permDelay.getOrDefault(perm, 1); + return permDelay.getOrDefault(perm, 1); } public PermissionManager() { - for (prm one : prm.values()) { - for (String oneP : one.getPerms()) { - permDelay.put(oneP, one.getDelay()); - } - } + for (prm one : prm.values()) { + for (String oneP : one.getPerms()) { + permDelay.put(oneP, one.getDelay()); + } + } } - private static Map getAll(Player player) { - Map mine = new HashMap<>(); - for (PermissionAttachmentInfo permission : player.getEffectivePermissions()) { - if (permission.getPermission().startsWith("jobs.")) - mine.put(permission.getPermission(), permission.getValue()); - } + private static Map getAll(Player player, String perm) { + Map mine = new HashMap<>(); + for (PermissionAttachmentInfo permission : player.getEffectivePermissions()) { + if (permission.getPermission().startsWith(perm)) + mine.put(permission.getPermission(), permission.getValue()); + } - return mine; + return mine; } /** @@ -131,7 +131,7 @@ public class PermissionManager { * @return the max value */ public double getMaxPermission(JobsPlayer jPlayer, String perm) { - return getMaxPermission(jPlayer, perm, false, false); + return getMaxPermission(jPlayer, perm, false, false); } /** @@ -144,7 +144,7 @@ public class PermissionManager { * @return the max value */ public double getMaxPermission(JobsPlayer jPlayer, String perm, boolean force) { - return getMaxPermission(jPlayer, perm, force, false); + return getMaxPermission(jPlayer, perm, force, false); } /** @@ -159,68 +159,68 @@ public class PermissionManager { * @return the max value */ public double getMaxPermission(JobsPlayer jPlayer, String perm, boolean force, boolean cumulative) { - if (jPlayer == null) - return 0D; + if (jPlayer == null) + return 0D; - Player player = jPlayer.getPlayer(); - if (player == null) - return 0D; + Player player = jPlayer.getPlayer(); + if (player == null) + return 0D; - perm = perm.toLowerCase(); - if (!perm.endsWith(".")) - perm += "."; + perm = perm.toLowerCase(); + if (!perm.endsWith(".")) + perm += "."; - Map permissions = jPlayer.getPermissionsCache(); - if (force || permissions == null || getDelay(perm) + jPlayer.getLastPermissionUpdate() < System.currentTimeMillis()) { - if (permissions == null) { - permissions = getAll(player); - } else { - permissions.clear(); - permissions.putAll(getAll(player)); - } - jPlayer.setPermissionsCache(permissions); - jPlayer.setLastPermissionUpdate(System.currentTimeMillis()); - } + double amount = Double.NEGATIVE_INFINITY; - double amount = Double.NEGATIVE_INFINITY; + permissionInfo permInfo = jPlayer.getPermissionsCache(perm); + if (force || getDelay(perm) + permInfo.getTime() < System.currentTimeMillis()) { - for (Map.Entry permission : permissions.entrySet()) { - if (!permission.getKey().startsWith(perm) || !permission.getValue()) - continue; - try { - double temp = Double.parseDouble(permission.getKey().replace(perm, "")); - if (cumulative) - amount += temp; - else if (temp > amount) - amount = temp; - } catch (NumberFormatException ex) { - Jobs.getPluginLogger().log(java.util.logging.Level.WARNING, ex.getLocalizedMessage()); - } - } + Map perms = getAll(player, perm); - return amount == Double.NEGATIVE_INFINITY ? 0D : amount; + for (Map.Entry permission : perms.entrySet()) { + if (!permission.getKey().startsWith(perm) || !permission.getValue()) + continue; + try { + double temp = Double.parseDouble(permission.getKey().replace(perm, "")); + if (cumulative) + amount += temp; + else if (temp > amount) + amount = temp; + } catch (NumberFormatException ex) { + Jobs.getPluginLogger().log(java.util.logging.Level.WARNING, ex.getLocalizedMessage()); + } + } + + permInfo.setTime(System.currentTimeMillis()); + permInfo.setValue(amount == Double.NEGATIVE_INFINITY ? 0D : amount); + + jPlayer.addToPermissionsCache(perm, permInfo); + } + + CMIDebug.d("Max: ", permInfo.getValue()); + + return permInfo.getValue(); } public boolean hasPermission(JobsPlayer jPlayer, String perm) { - if (jPlayer == null) - return false; + if (jPlayer == null) + return false; - Player player = jPlayer.getPlayer(); - if (player == null) - return false; + Player player = jPlayer.getPlayer(); + if (player == null) + return false; - Map permissions = jPlayer.getPermissionsCache(); + permissionInfo permInfo = jPlayer.getPermissionsCache(perm); - if (permissions == null || getDelay(perm) + jPlayer.getLastPermissionUpdate() < System.currentTimeMillis()) { - if (permissions == null) { - permissions = new HashMap<>(); - jPlayer.setPermissionsCache(permissions); - } - permissions.put(perm, player.hasPermission(perm)); - jPlayer.setLastPermissionUpdate(System.currentTimeMillis()); - } + if (getDelay(perm) + permInfo.getTime() < System.currentTimeMillis()) { + permInfo.setState(player.hasPermission(perm)); + permInfo.setTime(System.currentTimeMillis()); + jPlayer.addToPermissionsCache(perm, permInfo); + } - return permissions.getOrDefault(perm, false); + CMIDebug.d("this return"); + + return permInfo.getState(); } } diff --git a/src/main/java/com/gamingmesh/jobs/commands/list/editquests.java b/src/main/java/com/gamingmesh/jobs/commands/list/editquests.java index b24050bb..b2f9959c 100644 --- a/src/main/java/com/gamingmesh/jobs/commands/list/editquests.java +++ b/src/main/java/com/gamingmesh/jobs/commands/list/editquests.java @@ -22,22 +22,22 @@ import net.Zrips.CMILib.Chat.ChatMessageListEdit; import net.Zrips.CMILib.Chat.ChatMessageListEdit.ChatEditType; import net.Zrips.CMILib.Chat.ChatMessageObjectEdit; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMIList; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.CMIText; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.RawMessages.RawMessageCommand; public class editquests implements Cmd { private enum Action { - update, editline, moveup, movedown, createnew, addline, info, deleteLine, gui, list, delete, editCommands; + list; public static Action getByName(String name) { - if (name.equalsIgnoreCase("new")) - return Action.createnew; for (Action one : Action.values()) { if (one.name().equalsIgnoreCase(name)) return one; @@ -46,8 +46,8 @@ public class editquests implements Cmd { } } - HashMap tempQuests = new HashMap(); - HashMap> tempObjectives = new HashMap>(); + static HashMap tempQuests = new HashMap(); + static HashMap> tempObjectives = new HashMap>(); @Override public boolean perform(Jobs plugin, final CommandSender sender, String[] args) { @@ -81,47 +81,59 @@ public class editquests implements Cmd { switch (action) { case list: - Set quests = new LinkedHashSet(); - for (Job job : Jobs.getJobs()) { - quests.addAll(job.getQuests()); - } - - PageInfo pi = new PageInfo(10, quests.size(), page); - ChatMessageObjectEdit CMOE = new ChatMessageObjectEdit(sender, pi) { - @Override - public void newAdd(String message) { - Quest q = new Quest(message, null); - tempQuests.put(sender.getName(), q); - mainWindow(sender, q); - } - }; - for (Quest quest : quests) { - if (!pi.isEntryOk()) - continue; - ChatEditorObject CEO = new ChatEditorObject(Jobs.getLanguage().getMessage("command.editquests.help.output.list", "[jobName]", quest.getJob() - .getDisplayName(), "[questName]", quest.getQuestName())) { - @Override - public void onDelete() { - - } - - @Override - public void onClick() { - mainWindow(sender, quest); - } - }; - CEO.setHover(LC.modify_editSymbolHover.getLocale("[text]", quest.getQuestName())); - CMOE.addline(CEO); - } - CMOE.print(); - pi.autoPagination(sender, JobsCommands.LABEL + " " + editquests.class.getSimpleName()); + listQuests(sender, page); break; } return true; } - private List getRecords(Quest quest, String section) { + private static void listQuests(CommandSender sender, int page) { + + LC.info_Spliter.sendMessage(sender); + Set quests = new LinkedHashSet(); + for (Job job : Jobs.getJobs()) { + quests.addAll(job.getQuests()); + } + + PageInfo pi = new PageInfo(10, quests.size(), page); + ChatMessageObjectEdit CMOE = new ChatMessageObjectEdit(sender, pi) { + @Override + public void newAdd(String message) { + Quest q = new Quest(message, null); + tempQuests.put(sender.getName(), q); + mainWindow(sender, q); + } + }; + for (Quest quest : quests) { + if (!pi.isEntryOk()) + continue; + ChatEditorObject CEO = new ChatEditorObject(Jobs.getLanguage().getMessage("command.editquests.help.output.list", "[jobName]", quest.getJob() + .getDisplayName(), "[questName]", quest.getQuestName())) { + @Override + public void onDelete() { + if (quest.getJob() != null) { + removeQuestInFile(quest.getConfigName(), quest.getJob().getName()); + quest.getJob().getQuests().remove(quest); + } + listQuests(sender, page); + } + + @Override + public void onClick() { + mainWindow(sender, quest); + } + }; + CEO.setHover(LC.modify_editSymbolHover.getLocale("[text]", quest.getQuestName())); + CMOE.addline(CEO); + } + CMOE.print(); + pi.autoPagination(sender, JobsCommands.LABEL + " " + editquests.class.getSimpleName()); + + } + + private static List getRecords(Quest quest, String section) { + List objectives = new ArrayList(); if (quest.getJob() == null) @@ -155,7 +167,7 @@ public class editquests implements Cmd { return objectives; } - private ConfigReader getQuestConfig(String jobName) { + private static ConfigReader getQuestConfig(String jobName) { ConfigReader cfg = null; @@ -185,7 +197,10 @@ public class editquests implements Cmd { return cfg; } - private boolean removeQuestInFile(CommandSender sender, String questName, String jobName) { + private static boolean removeQuestInFile(String questName, String jobName) { + + if (questName == null) + return false; ConfigReader cfg = getQuestConfig(jobName); @@ -199,7 +214,7 @@ public class editquests implements Cmd { return true; } - private boolean updateQuestInFile(CommandSender sender, Quest quest) { + private static boolean updateQuestInFile(CommandSender sender, Quest quest) { if (quest.getJob() == null) return false; @@ -247,8 +262,9 @@ public class editquests implements Cmd { return true; } - private void objectivesWindow(CommandSender sender, Quest quest) { + private static void objectivesWindow(CommandSender sender, Quest quest) { + LC.info_Spliter.sendMessage(sender); RawMessage rm = new RawMessage(); rm.addText(quest.getQuestName() + " objectives"); @@ -274,8 +290,9 @@ public class editquests implements Cmd { cmle.print(); } - private void rewardCommandsWindow(CommandSender sender, Quest quest) { + private static void rewardCommandsWindow(CommandSender sender, Quest quest) { + LC.info_Spliter.sendMessage(sender); RawMessage rm = new RawMessage(); rm.addText(quest.getQuestName() + " reward commmands"); @@ -297,8 +314,9 @@ public class editquests implements Cmd { cmle.print(); } - private void rewardDescWindow(CommandSender sender, Quest quest) { + private static void rewardDescWindow(CommandSender sender, Quest quest) { + LC.info_Spliter.sendMessage(sender); RawMessage rm = new RawMessage(); rm.addText(quest.getQuestName() + " reward description"); @@ -320,8 +338,9 @@ public class editquests implements Cmd { cmle.print(); } - private void restrictedAreaWindow(CommandSender sender, Quest quest) { + private static void restrictedAreaWindow(CommandSender sender, Quest quest) { + LC.info_Spliter.sendMessage(sender); RawMessage rm = new RawMessage(); rm.addText(quest.getQuestName() + " restricted areas"); @@ -343,13 +362,13 @@ public class editquests implements Cmd { cmle.print(); } - private void mainWindow(CommandSender sender, Quest quest) { + private static void mainWindow(CommandSender sender, Quest quest) { LC.info_Spliter.sendMessage(sender); RawMessage rm = new RawMessage(); - rm.addText("&eName: &f" + quest.getQuestName()); + rm.addText("&7Name: &f" + quest.getQuestName()); rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", quest.getQuestName())); RawMessageCommand rmc = new RawMessageCommand() { @Override @@ -372,59 +391,8 @@ public class editquests implements Cmd { }; rm.addCommand(rmc); - rm.addText("\n"); - List objectives = getRecords(quest, "Objectives"); - if (!tempObjectives.containsKey(sender.getName())) - tempObjectives.put(sender.getName(), objectives); - else - objectives = tempObjectives.get(sender.getName()); - - rm.addText((objectives.isEmpty() ? "&c" : "&e") + "Objectives"); - rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Objectives")); - rmc = new RawMessageCommand() { - @Override - public void run(CommandSender sender) { - objectivesWindow(sender, quest); - } - }; - rm.addCommand(rmc); - - rm.addText("\n"); - rm.addText((quest.getRewardCmds().isEmpty() ? "&c" : "&e") + "Reward commands"); - rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Reward commands")); - rmc = new RawMessageCommand() { - @Override - public void run(CommandSender sender) { - rewardCommandsWindow(sender, quest); - } - }; - rm.addCommand(rmc); - - rm.addText("\n"); - rm.addText("&eDescription"); - rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Description")); - rmc = new RawMessageCommand() { - @Override - public void run(CommandSender sender) { - rewardDescWindow(sender, quest); - } - }; - rm.addCommand(rmc); - - rm.addText("\n"); - rm.addText("&eRestricted areas"); - rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Restricted areas")); - rmc = new RawMessageCommand() { - @Override - public void run(CommandSender sender) { - restrictedAreaWindow(sender, quest); - } - }; - rm.addCommand(rmc); - String jobName = quest.getJob() == null ? "&c-" : quest.getJob().getName(); - rm.addText("\n"); - rm.addText("&eJob: &f" + jobName); + rm.addText(" &7Job: &f" + jobName); rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", jobName)); rmc = new RawMessageCommand() { @Override @@ -446,7 +414,7 @@ public class editquests implements Cmd { if (quest.getJob() != j) { if (quest.getJob() != null) { - removeQuestInFile(sender, quest.getConfigName(), quest.getJob().getName()); + removeQuestInFile(quest.getConfigName(), quest.getJob().getName()); quest.getJob().getQuests().remove(quest); } j.getQuests().add(quest); @@ -469,8 +437,7 @@ public class editquests implements Cmd { }; rm.addCommand(rmc); - rm.addText("\n"); - rm.addText("&eChance: &f" + quest.getChance()); + rm.addText(" &7Chance: &f" + quest.getChance()); rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", quest.getChance())); rmc = new RawMessageCommand() { @Override @@ -503,7 +470,7 @@ public class editquests implements Cmd { rm.addText("\n"); - rm.addText("&eFrom level: &f" + quest.getMinLvl()); + rm.addText("&7Level from: &f" + quest.getMinLvl()); rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", quest.getMinLvl())); rmc = new RawMessageCommand() { @Override @@ -538,8 +505,7 @@ public class editquests implements Cmd { }; rm.addCommand(rmc); - rm.addText("\n"); - rm.addText("&eTo level: &f" + (quest.getMaxLvl() == null ? "-" : quest.getMaxLvl())); + rm.addText(" &7to: &f" + (quest.getMaxLvl() == null ? "-" : quest.getMaxLvl())); rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", (quest.getMaxLvl() == null ? "-" : quest.getMaxLvl()))); rmc = new RawMessageCommand() { @Override @@ -574,6 +540,71 @@ public class editquests implements Cmd { }; rm.addCommand(rmc); + rm.addText("\n"); + List objectives = getRecords(quest, "Objectives"); + if (!tempObjectives.containsKey(sender.getName())) + tempObjectives.put(sender.getName(), objectives); + else + objectives = tempObjectives.get(sender.getName()); + + String objectiveString = CMIList.listToString(objectives, " "); + if (objectiveString.length() > 32) + objectiveString = objectiveString.substring(0, 32) + ".."; + + rm.addText((objectives.isEmpty() ? "&c" : "&7") + "Objectives" + (objectiveString.isBlank() ? "" : " - &f" + objectiveString)); + rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Objectives")); + rmc = new RawMessageCommand() { + @Override + public void run(CommandSender sender) { + objectivesWindow(sender, quest); + } + }; + rm.addCommand(rmc); + + rm.addText("\n"); + + String rewardsString = CMIList.listToString(quest.getRewardCmds(), " "); + if (rewardsString.length() > 32) + rewardsString = rewardsString.substring(0, 30) + ".."; + + rm.addText((quest.getRewardCmds().isEmpty() ? "&c" : "&7") + "Reward commands" + (rewardsString.isBlank() ? "" : " - &f" + rewardsString)); + rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Reward commands")); + rmc = new RawMessageCommand() { + @Override + public void run(CommandSender sender) { + rewardCommandsWindow(sender, quest); + } + }; + rm.addCommand(rmc); + + rm.addText("\n"); + String descString = CMIList.listToString(quest.getDescription(), " "); + if (descString.length() > 32) + descString = descString.substring(0, 30) + ".."; + rm.addText("&7Description" + (rewardsString.isBlank() ? "" : " - &f" + descString)); + rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Description")); + rmc = new RawMessageCommand() { + @Override + public void run(CommandSender sender) { + rewardDescWindow(sender, quest); + } + }; + rm.addCommand(rmc); + + rm.addText("\n"); + String restrictedString = CMIList.listToString(quest.getRestrictedAreas(), " "); + if (restrictedString.length() > 32) + restrictedString = restrictedString.substring(0, 30) + ".."; + rm.addText("&7Restricted areas" + (restrictedString.isBlank() ? "" : " - &f" + restrictedString)); + rm.addHover(LC.modify_editSymbolHover.getLocale("[text]", "Restricted areas")); + rmc = new RawMessageCommand() { + @Override + public void run(CommandSender sender) { + restrictedAreaWindow(sender, quest); + } + }; + rm.addCommand(rmc); + rm.show(sender); } } diff --git a/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java b/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java index 93f3d9aa..1d043e16 100644 --- a/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java @@ -1430,6 +1430,7 @@ public class ConfigManager { quest.setRewardCmds(sqsection.getStringList("RewardCommands")); quest.setDescription(sqsection.getStringList("RewardDesc")); quest.setRestrictedArea(sqsection.getStringList("RestrictedAreas")); + quest.setEnabled(sqsection.getBoolean("Enabled", true)); quests.add(quest); } catch (Exception e) { diff --git a/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java b/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java index e0978211..5161b0e8 100644 --- a/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java +++ b/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java @@ -34,6 +34,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import com.gamingmesh.jobs.Jobs; +import com.gamingmesh.jobs.permissionInfo; import com.gamingmesh.jobs.Signs.SignTopType; import com.gamingmesh.jobs.api.JobsLevelUpEvent; import com.gamingmesh.jobs.container.blockOwnerShip.BlockTypes; @@ -85,8 +86,7 @@ public class JobsPlayer { private long seen = System.currentTimeMillis(); - private Map permissionsCache; - private long lastPermissionUpdate = -1L; + private Map permissionsCache = new HashMap<>(); private final Map> qProgression = new HashMap<>(); private int doneQuests = 0; @@ -924,6 +924,9 @@ public class JobsPlayer { clearBossMaps(); isOnline = false; blockOwnerShipInform = null; + + permissionsCache.clear(); + Jobs.getPlayerManager().addPlayerToCache(this); } @@ -961,24 +964,16 @@ public class JobsPlayer { this.seen = seen; } - public Map getPermissionsCache() { + public Map getPermissionsCache() { return permissionsCache; } - public void setPermissionsCache(Map permissionsCache) { - this.permissionsCache = permissionsCache; + public permissionInfo getPermissionsCache(String perm) { + return permissionsCache.getOrDefault(perm, new permissionInfo()); } - public void setPermissionsCache(String permission, Boolean state) { - permissionsCache.put(permission, state); - } - - public long getLastPermissionUpdate() { - return lastPermissionUpdate; - } - - public void setLastPermissionUpdate(Long lastPermissionUpdate) { - this.lastPermissionUpdate = lastPermissionUpdate; + public void addToPermissionsCache(String permission, permissionInfo permInfo) { + permissionsCache.put(permission, permInfo); } /** diff --git a/src/main/java/com/gamingmesh/jobs/container/Quest.java b/src/main/java/com/gamingmesh/jobs/container/Quest.java index 485fb872..7e339d97 100644 --- a/src/main/java/com/gamingmesh/jobs/container/Quest.java +++ b/src/main/java/com/gamingmesh/jobs/container/Quest.java @@ -20,6 +20,8 @@ public class Quest { private int chance = 100, minLvl = 0; private Integer maxLvl; + private boolean enabled = false; + private final List rewardCmds = new ArrayList<>(), rewards = new ArrayList<>(), area = new ArrayList<>(); private boolean stopped = false; @@ -217,4 +219,12 @@ public class Quest { public boolean hasAction(ActionType action) { return actions.contains(action); } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } } diff --git a/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java b/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java index 4f88b98b..d0ef20ef 100644 --- a/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java +++ b/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java @@ -419,6 +419,7 @@ public final class JobsPaymentListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { + final Block block = event.getBlock(); if (!Jobs.getGCManager().canPerformActionInWorld(block.getWorld())) @@ -433,9 +434,12 @@ public final class JobsPaymentListener implements Listener { if (Jobs.getGCManager().disablePaymentIfRiding && player.isInsideVehicle()) return; + CMIDebug.d("BlockBreakEvent2"); + // check if in creative if (!payIfCreative(player)) return; + CMIDebug.d("BlockBreakEvent3"); if (!Jobs.getPermissionHandler().hasWorldPermission(player, player.getLocation().getWorld().getName())) return; @@ -721,14 +725,14 @@ public final class JobsPaymentListener implements Listener { JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(player); if (jPlayer == null) return; - + if (y == 2 && first == second && third == second) { if (Jobs.getGCManager().payForCombiningItems && third == first) { Jobs.action(jPlayer, new ItemActionInfo(event.getCurrentItem(), ActionType.REPAIR)); } else { Jobs.action(jPlayer, new ItemActionInfo(resultStack, ActionType.REPAIR)); } - return; + return; } // Check Dyes @@ -897,9 +901,9 @@ public final class JobsPaymentListener implements Listener { default: break; } - - if (!event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY) && - !event.getAction().equals(InventoryAction.PICKUP_ALL) && + + if (!event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY) && + !event.getAction().equals(InventoryAction.PICKUP_ALL) && !event.getAction().equals(InventoryAction.PICKUP_HALF)) return; @@ -1895,12 +1899,7 @@ public final class JobsPaymentListener implements Listener { } public static boolean payIfCreative(Player player) { - if (Jobs.getGCManager().payInCreative() && player.getGameMode() == GameMode.CREATIVE) - return true; - if (player.getGameMode() == GameMode.CREATIVE && Jobs.getPermissionManager().hasPermission(Jobs.getPlayerManager().getJobsPlayer(player), "jobs.paycreative")) - return true; - - return player.getGameMode() != GameMode.CREATIVE; + return player.getGameMode() != GameMode.CREATIVE || Jobs.getGCManager().payInCreative() || Jobs.getPermissionManager().hasPermission(Jobs.getPlayerManager().getJobsPlayer(player), "jobs.paycreative"); } // Prevent item durability loss diff --git a/src/main/java/com/gamingmesh/jobs/permissionInfo.java b/src/main/java/com/gamingmesh/jobs/permissionInfo.java new file mode 100644 index 00000000..f77df148 --- /dev/null +++ b/src/main/java/com/gamingmesh/jobs/permissionInfo.java @@ -0,0 +1,36 @@ +package com.gamingmesh.jobs; + +public class permissionInfo { + + private long time = 0L; + private boolean state = false; + private double value = 0D; + + public long getTime() { + return time; + } + + public permissionInfo setTime(long time) { + this.time = time; + return this; + } + + public boolean getState() { + return state; + } + + public permissionInfo setState(boolean state) { + this.state = state; + return this; + } + + public double getValue() { + return value; + } + + public permissionInfo setValue(double value) { + this.value = value; + return this; + } + +}