From 9ed7956d62e4dfe59895f219a26d2778fc2959ef Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 29 Sep 2024 11:54:45 +0300 Subject: [PATCH] Saving message options into database option to toggle bossbar, actionbar and chattext modes showing message states when using clean toggle command better handling of toggle command --- src/main/java/com/gamingmesh/jobs/Jobs.java | 3 +- .../com/gamingmesh/jobs/PlayerManager.java | 6 + .../gamingmesh/jobs/commands/list/toggle.java | 53 +++-- .../jobs/config/BossBarManager.java | 2 +- .../jobs/config/GeneralConfigManager.java | 7 +- .../jobs/config/LanguageManager.java | 8 +- .../jobs/container/MessageToggleType.java | 37 ++++ .../gamingmesh/jobs/container/PlayerInfo.java | 70 +++--- .../java/com/gamingmesh/jobs/dao/JobsDAO.java | 34 ++- .../JobsPaymentVisualizationListener.java | 37 ++-- .../jobs/stuff/ToggleBarHandling.java | 202 ++++++++---------- 11 files changed, 261 insertions(+), 198 deletions(-) create mode 100644 src/main/java/com/gamingmesh/jobs/container/MessageToggleType.java diff --git a/src/main/java/com/gamingmesh/jobs/Jobs.java b/src/main/java/com/gamingmesh/jobs/Jobs.java index 9d536aea..a11979b2 100644 --- a/src/main/java/com/gamingmesh/jobs/Jobs.java +++ b/src/main/java/com/gamingmesh/jobs/Jobs.java @@ -897,7 +897,7 @@ public final class Jobs extends JavaPlugin { getInstance().getBlockOwnerShip(CMIMaterial.SMOKER).ifPresent(BlockOwnerShip::load); } - ToggleBarHandling.load(); + ToggleBarHandling.init(); usedSlots.clear(); for (Job job : jobs) { usedSlots.put(job, dao.getSlotsTaken(job)); @@ -937,7 +937,6 @@ public final class Jobs extends JavaPlugin { dao.saveExplore(); blockOwnerShipsMaterial.values().forEach(BlockOwnerShip::save); - ToggleBarHandling.save(); if (saveTask != null) saveTask.shutdown(); diff --git a/src/main/java/com/gamingmesh/jobs/PlayerManager.java b/src/main/java/com/gamingmesh/jobs/PlayerManager.java index 850361e7..cc92d355 100644 --- a/src/main/java/com/gamingmesh/jobs/PlayerManager.java +++ b/src/main/java/com/gamingmesh/jobs/PlayerManager.java @@ -62,6 +62,7 @@ import com.gamingmesh.jobs.dao.JobsDAOData; import com.gamingmesh.jobs.economy.PaymentData; import com.gamingmesh.jobs.hooks.HookManager; import com.gamingmesh.jobs.i18n.Language; +import com.gamingmesh.jobs.stuff.ToggleBarHandling; import com.gamingmesh.jobs.stuff.Util; import net.Zrips.CMILib.ActionBar.CMIActionBar; @@ -286,6 +287,8 @@ public class PlayerManager { if (info != null) { jPlayer.setDoneQuests(info.getQuestsDone()); jPlayer.setQuestProgressionFromString(info.getQuestProgression()); + + ToggleBarHandling.recordPlayerOptionsFromInt(jPlayer.getUniqueId(), info.getMessageOptions()); } Jobs.getJobsDAO().loadLog(jPlayer); @@ -444,6 +447,9 @@ public class PlayerManager { jPlayer.setUserId(info.getID()); jPlayer.setDoneQuests(info.getQuestsDone()); jPlayer.setQuestProgressionFromString(info.getQuestProgression()); + + ToggleBarHandling.recordPlayerOptionsFromInt(jPlayer.getUniqueId(), info.getMessageOptions()); + jPlayer.setSeen(info.getSeen()); if (jobs != null) { diff --git a/src/main/java/com/gamingmesh/jobs/commands/list/toggle.java b/src/main/java/com/gamingmesh/jobs/commands/list/toggle.java index d86ff855..bf2e6b82 100644 --- a/src/main/java/com/gamingmesh/jobs/commands/list/toggle.java +++ b/src/main/java/com/gamingmesh/jobs/commands/list/toggle.java @@ -10,6 +10,7 @@ import com.gamingmesh.jobs.Jobs; import com.gamingmesh.jobs.commands.Cmd; import com.gamingmesh.jobs.container.JobsPlayer; import com.gamingmesh.jobs.container.MessageToggleState; +import com.gamingmesh.jobs.container.MessageToggleType; import com.gamingmesh.jobs.i18n.Language; import com.gamingmesh.jobs.stuff.ToggleBarHandling; @@ -25,34 +26,44 @@ public class toggle implements Cmd { return null; } - boolean isBossbar = false, isActionbar = false; - if (args.length != 1 || (!(isBossbar = args[0].equalsIgnoreCase("bossbar")) && !(isActionbar = args[0].equalsIgnoreCase("actionbar")))) { - return false; - } - Player player = (Player) sender; UUID playerUUID = player.getUniqueId(); - if (isActionbar) { - MessageToggleState ex = ToggleBarHandling.getActionBarToggle().getOrDefault(playerUUID, Jobs.getGCManager().ActionBarsMessageDefault).getNext(); - Language.sendMessage(sender, "command.toggle.output." + ex.toString()); - ToggleBarHandling.getActionBarToggle().put(playerUUID, ex); + if (args.length == 1) { + + switch (args[0].toLowerCase()) { + case "actionbar": + toggleState(sender, playerUUID, MessageToggleType.ActionBar); + return true; + case "bossbar": + toggleState(sender, playerUUID, MessageToggleType.BossBar); + if (ToggleBarHandling.getState(playerUUID, MessageToggleType.BossBar).equals(MessageToggleState.Off)) { + JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(playerUUID); + if (jPlayer != null) + jPlayer.hideBossBars(); + } + return true; + case "chattext": + toggleState(sender, playerUUID, MessageToggleType.ChatText); + return true; + } } - if (isBossbar) { - MessageToggleState ex = ToggleBarHandling.getBossBarToggle().getOrDefault(playerUUID, Jobs.getGCManager().BossBarsMessageDefault).getNext(); - - Language.sendMessage(sender, "command.toggle.output." + ex.toString()); - - if (ex.equals(MessageToggleState.Off)) { - JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(player.getUniqueId()); - if (jPlayer != null) - jPlayer.hideBossBars(); - } - - ToggleBarHandling.getBossBarToggle().put(playerUUID, ex); + LC.info_Spliter.sendMessage(sender); + for (MessageToggleType one : MessageToggleType.values()) { + Language.sendMessage(sender, "command.toggle.output." + ToggleBarHandling.getState(playerUUID, one).toString(), "[type]", one.toString()); } return true; } + + private static void toggleState(CommandSender sender, UUID uuid, MessageToggleType type) { + MessageToggleState state = ToggleBarHandling.getState(uuid, type).getNext(); + + if (type.equals(MessageToggleType.ChatText) && state.equals(MessageToggleState.Rapid)) + state = state.getNext(); + + ToggleBarHandling.modify(uuid, type, state); + Language.sendMessage(sender, "command.toggle.output." + state.toString(), "[type]", type.toString()); + } } diff --git a/src/main/java/com/gamingmesh/jobs/config/BossBarManager.java b/src/main/java/com/gamingmesh/jobs/config/BossBarManager.java index 8345a481..9c6fff22 100644 --- a/src/main/java/com/gamingmesh/jobs/config/BossBarManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/BossBarManager.java @@ -40,7 +40,7 @@ public class BossBarManager { if (Version.getCurrent().isLower(Version.v1_9_R1) || Jobs.getGCManager().BossBarsMessageDefault.equals(MessageToggleState.Off)) return; - if (ToggleBarHandling.getBossBarToggle().getOrDefault(player.getUniqueId(), MessageToggleState.Rapid).equals(MessageToggleState.Off)) + if (ToggleBarHandling.getBossBarState(player.getUniqueId()).equals(MessageToggleState.Off)) return; showJobProgressionInTask(player, jobProg, expGain); diff --git a/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java b/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java index bb7bd96f..9bcebab9 100644 --- a/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java @@ -116,6 +116,7 @@ public class GeneralConfigManager { payForEachVTradeItem, allowEnchantingBoostedItems, preventShopItemEnchanting; public MessageToggleState BossBarsMessageDefault = MessageToggleState.Rapid; public MessageToggleState ActionBarsMessageDefault = MessageToggleState.Rapid; + public MessageToggleState ChatTextMessageDefault = MessageToggleState.Batched; public int ActionBarsMessageKeepFor; @@ -991,7 +992,11 @@ public class GeneralConfigManager { "Percentage to loose when leaving job at max level", "Only works when fix-at-max-level is set to false"); levelLossPercentageFromMax = c.get("old-job.level-loss-from-max-level", levelLossPercentage); - + + c.addComment("ChatText.Messages.DefaultState", "States of chat text messages when payment is issued", "Valid options: Off, Batched", + "This will be used if player disables action bar payment messages"); + ChatTextMessageDefault = MessageToggleState.getByName(c.get("ChatText.Messages.DefaultState", MessageToggleState.Batched.toString())); + c.addComment("ActionBars.Enabled", "Enables ActionBar messages"); ActionBarEnabled = c.get("ActionBars.Enabled", true); diff --git a/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java b/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java index 6348ca96..5c2faacd 100644 --- a/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java @@ -646,7 +646,7 @@ public class LanguageManager { c.get("command.toggle.help.info", "Toggles payment output on action bar or bossbar."); c.get("command.toggle.help.args", "actionbar/bossbar"); - Jobs.getGCManager().getCommandArgs().put("toggle", Arrays.asList("actionbar%%bossbar")); + Jobs.getGCManager().getCommandArgs().put("toggle", Arrays.asList("actionbar%%bossbar%%chattext")); c.get("command.toggle.output.turnedoff", "&4This feature is turned off!"); c.get("command.toggle.output.paid.main", "&aYou got:"); @@ -658,9 +658,9 @@ public class LanguageManager { c.get("command.toggle.output.paid.ACexp", "&7+[exp]XP "); c.get("command.toggle.output.paid.ACpoints", "&6+[points]pts "); - c.get("command.toggle.output.Rapid", "&aToggled: &7Rapid"); - c.get("command.toggle.output.Batched", "&aToggled: &fBatched"); - c.get("command.toggle.output.Off", "&aToggled: &6Off"); + c.get("command.toggle.output.Rapid", "&7[type]&a: &7Rapid"); + c.get("command.toggle.output.Batched", "&7[type]&a: &fBatched"); + c.get("command.toggle.output.Off", "&7[type]&a: &6Off"); c.get("command.howmuch.help.info", "Check potential payment by target entity or block"); c.get("command.howmuch.help.args", ""); diff --git a/src/main/java/com/gamingmesh/jobs/container/MessageToggleType.java b/src/main/java/com/gamingmesh/jobs/container/MessageToggleType.java new file mode 100644 index 00000000..9a44e481 --- /dev/null +++ b/src/main/java/com/gamingmesh/jobs/container/MessageToggleType.java @@ -0,0 +1,37 @@ +package com.gamingmesh.jobs.container; + +import net.Zrips.CMILib.Container.CMINumber; +import net.Zrips.CMILib.Locale.LC; + +public enum MessageToggleType { + ActionBar, BossBar, ChatText; + + public static MessageToggleType getByName(String name) { + for (MessageToggleType state : MessageToggleType.values()) { + if (state.name().equalsIgnoreCase(name)) + return state; + } + return null; + } + + public static MessageToggleType getFromID(int id) { + return MessageToggleType.values()[CMINumber.clamp(id, 0, MessageToggleType.values().length - 1)]; + } + + public static String toCommaSeparatedString() { + StringBuilder str = new StringBuilder(); + for (MessageToggleType state : MessageToggleType.values()) { + if (!str.toString().isEmpty()) + str.append(LC.info_ListSpliter.getLocale()); + str.append(state.name()); + } + return str.toString(); + } + + public MessageToggleType getNext() { + int index = this.ordinal(); + index++; + index = index >= MessageToggleType.values().length ? 0 : index; + return MessageToggleType.values()[index]; + } +} diff --git a/src/main/java/com/gamingmesh/jobs/container/PlayerInfo.java b/src/main/java/com/gamingmesh/jobs/container/PlayerInfo.java index 84abdb36..bf140d21 100644 --- a/src/main/java/com/gamingmesh/jobs/container/PlayerInfo.java +++ b/src/main/java/com/gamingmesh/jobs/container/PlayerInfo.java @@ -13,70 +13,78 @@ public class PlayerInfo { private String questProgression; private UUID uuid; private JobsPlayer player; + private Integer messageOptions; - public PlayerInfo(String name, int id, UUID uuid, Long seen, Integer questsDone, String questProgression) { - this.name = name == null ? "Unknown" : name; - this.id = id; - this.uuid = uuid; - this.seen = seen; - this.questsDone = questsDone; - this.questProgression = questProgression; - player = Jobs.getPlayerManager().getJobsPlayer(uuid); - if (player != null) - player.setUserId(id); + public PlayerInfo(String name, int id, UUID uuid, Long seen, Integer questsDone, String questProgression, Integer messageOptions) { + this.name = name == null ? "Unknown" : name; + this.id = id; + this.uuid = uuid; + this.seen = seen; + this.questsDone = questsDone; + this.questProgression = questProgression; + player = Jobs.getPlayerManager().getJobsPlayer(uuid); + if (player != null) + player.setUserId(id); + this.messageOptions = messageOptions; } public PlayerInfo(String name, int id, UUID uuid, Long seen, Integer questsDone) { - this(name, id, uuid, seen, questsDone, null); + this(name, id, uuid, seen, questsDone, null, null); } public String getName() { - if (player == null) - player = Jobs.getPlayerManager().getJobsPlayer(uuid); - return player != null ? player.getName() : name; + if (player == null) + player = Jobs.getPlayerManager().getJobsPlayer(uuid); + return player != null ? player.getName() : name; } public int getID() { - return id; + return id; } public Long getSeen() { - return seen; + return seen; } public UUID getUuid() { - return uuid; + return uuid; } public JobsPlayer getJobsPlayer() { - if (player == null) - player = Jobs.getPlayerManager().getJobsPlayer(uuid); - return player; + if (player == null) + player = Jobs.getPlayerManager().getJobsPlayer(uuid); + return player; } public String getDisplayName() { - if (player == null) - player = Jobs.getPlayerManager().getJobsPlayer(uuid); - - if (player == null) - return getName(); - - return player.getDisplayName(); + if (player == null) + player = Jobs.getPlayerManager().getJobsPlayer(uuid); + + if (player == null) + return getName(); + + return player.getDisplayName(); } public Integer getQuestsDone() { - return questsDone; + return questsDone; } + @Deprecated public void setQuestsDone(Integer questsDone) { - this.questsDone = questsDone; + this.questsDone = questsDone; } public String getQuestProgression() { - return questProgression; + return questProgression; } + @Deprecated public void setQuestProgression(String questProgression) { - this.questProgression = questProgression; + this.questProgression = questProgression; + } + + public Integer getMessageOptions() { + return messageOptions; } } diff --git a/src/main/java/com/gamingmesh/jobs/dao/JobsDAO.java b/src/main/java/com/gamingmesh/jobs/dao/JobsDAO.java index bcfea717..a8e0b618 100644 --- a/src/main/java/com/gamingmesh/jobs/dao/JobsDAO.java +++ b/src/main/java/com/gamingmesh/jobs/dao/JobsDAO.java @@ -41,6 +41,7 @@ import com.gamingmesh.jobs.container.PlayerPoints; import com.gamingmesh.jobs.container.TopList; import com.gamingmesh.jobs.dao.JobsManager.DataBaseType; import com.gamingmesh.jobs.economy.PaymentData; +import com.gamingmesh.jobs.stuff.ToggleBarHandling; import com.gamingmesh.jobs.stuff.Util; import net.Zrips.CMILib.Logs.CMIDebug; @@ -130,7 +131,8 @@ public abstract class JobsDAO { username("text"), seen("bigint"), donequests("int"), - quests("text"); + quests("text"), + messageOptions("int"); private String type; @@ -1904,7 +1906,8 @@ public abstract class JobsDAO { res.getInt("id"), uuid, res.getLong(UserTableFields.seen.getCollumn()), res.getInt(UserTableFields.donequests.getCollumn()), - res.getString(UserTableFields.quests.getCollumn())); + res.getString(UserTableFields.quests.getCollumn()), + res.getInt(UserTableFields.messageOptions.getCollumn())); Jobs.getPlayerManager().addPlayerToMap(pInfo); } } catch (SQLException e) { @@ -1945,7 +1948,8 @@ public abstract class JobsDAO { UUID.fromString(uuid), seen, res.getInt(UserTableFields.donequests.getCollumn()), - res.getString(UserTableFields.quests.getCollumn()))); + res.getString(UserTableFields.quests.getCollumn()), + res.getInt(UserTableFields.messageOptions.getCollumn()))); } catch (IllegalArgumentException e) { } } @@ -2063,16 +2067,30 @@ public abstract class JobsDAO { PreparedStatement prest = null; try { - prest = conn.prepareStatement("UPDATE `" + DBTables.UsersTable.getTableName() + "` SET `" + UserTableFields.seen.getCollumn() + + Integer options = ToggleBarHandling.getPlayerOptionsAsInt(player.getUniqueId()); + StringBuilder querry = new StringBuilder(); + + querry.append("UPDATE `" + DBTables.UsersTable.getTableName() + "` SET `" + UserTableFields.seen.getCollumn() + "` = ?, `" + UserTableFields.username.getCollumn() + "` = ?, `" + UserTableFields.donequests.getCollumn() - + "` = ?, `" + UserTableFields.quests.getCollumn() - + "` = ? WHERE `id` = ?;"); + + "` = ?, `" + UserTableFields.quests.getCollumn()); + + if (options != null) + querry.append("` = ?, `" + UserTableFields.messageOptions.getCollumn()); + + querry.append("` = ? WHERE `id` = ?;"); + + prest = conn.prepareStatement(querry.toString()); prest.setLong(1, System.currentTimeMillis()); prest.setString(2, player.getName()); prest.setInt(3, player.getDoneQuests()); prest.setString(4, player.getQuestProgressionString()); - prest.setInt(5, player.getUserId()); + // Only recording options if its not null + if (options != null) + prest.setInt(5, options); + // Shifting the index based on previous options on what we are saving + prest.setInt(options != null ? 6 : 5, player.getUserId()); prest.execute(); } catch (SQLException e) { e.printStackTrace(); @@ -2734,7 +2752,7 @@ public abstract class JobsDAO { if (Jobs.getGCManager().useNewExploration) return false; - + JobsConnection conn = getConnection(); if (conn == null) return false; diff --git a/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentVisualizationListener.java b/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentVisualizationListener.java index 45ecad32..6a1ace2b 100644 --- a/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentVisualizationListener.java +++ b/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentVisualizationListener.java @@ -34,11 +34,9 @@ import com.gamingmesh.jobs.api.JobsInstancePaymentEvent; import com.gamingmesh.jobs.api.JobsPaymentEvent; import com.gamingmesh.jobs.container.CurrencyType; import com.gamingmesh.jobs.container.MessageToggleState; -import com.gamingmesh.jobs.economy.BufferedPayment; import com.gamingmesh.jobs.stuff.ToggleBarHandling; import net.Zrips.CMILib.ActionBar.CMIActionBar; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class JobsPaymentVisualizationListener implements Listener { @@ -106,34 +104,37 @@ public class JobsPaymentVisualizationListener implements Listener { if (event.getPlayer() == null || !event.getPlayer().isOnline() || event.getPayment().isEmpty()) return; - MessageToggleState state = ToggleBarHandling.getActionBarState(event.getPlayer().getUniqueId()); - - if (state.equals(MessageToggleState.Rapid)) - return; - UUID playerUUID = event.getPlayer().getUniqueId(); - Player abp = Bukkit.getPlayer(playerUUID); - if (abp == null) + Player player = Bukkit.getPlayer(playerUUID); + if (player == null) return; if (!Jobs.getGeneralConfigManager().ActionBarEnabled) { - String message = generateDelayedMessage(event.getPayment()); - if (!message.isEmpty()) - abp.sendMessage(message); + showChatMessage(player, event.getPayment()); return; } - if (state.equals(MessageToggleState.Batched)) { - String message = generateDelayedMessage(event.getPayment()); - if (!message.isEmpty()) - CMIActionBar.send(abp, message); + MessageToggleState state = ToggleBarHandling.getActionBarState(event.getPlayer().getUniqueId()); + + if (!state.equals(MessageToggleState.Batched)) { + showChatMessage(player, event.getPayment()); return; } String message = generateDelayedMessage(event.getPayment()); + if (!message.isEmpty()) + CMIActionBar.send(player, message); + return; + } + + private static void showChatMessage(Player player, Map payment) { + MessageToggleState chatState = ToggleBarHandling.getChatTextState(player.getUniqueId()); + if (chatState.equals(MessageToggleState.Off)) + return; + String message = generateDelayedMessage(payment); if (!message.isEmpty()) - abp.sendMessage(message); + player.sendMessage(message); } private static String generateDelayedMessage(Map payment) { @@ -176,7 +177,7 @@ public class JobsPaymentVisualizationListener implements Listener { public void onJobsPaymentEventBossBar(JobsPaymentEvent event) { if (event.isCancelled()) return; - + if (event.getPlayer() == null || !event.getPlayer().isOnline()) return; diff --git a/src/main/java/com/gamingmesh/jobs/stuff/ToggleBarHandling.java b/src/main/java/com/gamingmesh/jobs/stuff/ToggleBarHandling.java index 73695bf7..8873ecb4 100644 --- a/src/main/java/com/gamingmesh/jobs/stuff/ToggleBarHandling.java +++ b/src/main/java/com/gamingmesh/jobs/stuff/ToggleBarHandling.java @@ -2,142 +2,120 @@ package com.gamingmesh.jobs.stuff; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import java.util.UUID; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; +import javax.annotation.Nullable; import com.gamingmesh.jobs.Jobs; -import com.gamingmesh.jobs.config.YmlMaker; import com.gamingmesh.jobs.container.MessageToggleState; - -import net.Zrips.CMILib.Container.CMINumber; +import com.gamingmesh.jobs.container.MessageToggleType; public class ToggleBarHandling { - static Map actionBarToggle = new HashMap<>(); - static Map bossBarToggle = new HashMap<>(); + static Map> toggleMap = new HashMap<>(); - public static void load() { - YmlMaker f = new YmlMaker(Jobs.getFolder(), "actionBarBossbar.yml"); - if (!f.exists()) - return; + private static int defaultStatesAsInt = 1000; - FileConfiguration config = f.getConfig(); - - if (Jobs.getGCManager().BossBarEnabled) { - ConfigurationSection section = config.getConfigurationSection("bossBar"); - - if (section != null) { - for (String one : section.getKeys(false)) { - - MessageToggleState state = MessageToggleState.Rapid; - - if (section.isBoolean(one)) { - if (!section.getBoolean(one)) - state = MessageToggleState.Off; - } else if (section.isInt(one)) { - int id = section.getInt(one); - state = MessageToggleState.getFromID(id); - } - - try { - bossBarToggle.put(UUID.fromString(one), state); - } catch (Throwable e) { - } - } - } - } - - if (Jobs.getGCManager().ActionBarEnabled) { - ConfigurationSection section = config.getConfigurationSection("actionBar"); - - if (section != null) { - for (String one : section.getKeys(false)) { - - MessageToggleState state = MessageToggleState.Rapid; - - if (section.isBoolean(one)) { - if (!section.getBoolean(one)) - state = MessageToggleState.Off; - } else if (section.isInt(one)) { - int id = section.getInt(one); - state = MessageToggleState.getFromID(id); - } - - try { - actionBarToggle.put(UUID.fromString(one), state); - } catch (Throwable e) { - } - } - } + public static void init() { + StringBuilder result = new StringBuilder(); + // Starts with 1 in case remaining are 0's to produce actual full digit number + result.append("1"); + for (MessageToggleType one : MessageToggleType.values()) { + result.append(getDefaultState(one).ordinal()); } + defaultStatesAsInt = Integer.parseInt(result.toString()); } - public static void save() { - YmlMaker f = new YmlMaker(Jobs.getFolder(), "actionBarBossbar.yml"); - - if (bossBarToggle.isEmpty() && actionBarToggle.isEmpty()) { - if (f.exists() && f.getConfigFile().length() == 0L) { - f.getConfigFile().delete(); - } - - return; - } - - if (!f.exists()) - f.createNewFile(); - - f.saveDefaultConfig(); - - FileConfiguration config = f.getConfig(); - - if (Jobs.getGCManager().BossBarEnabled) { - config.set("bossBar", null); - - if (!bossBarToggle.isEmpty()) { - for (Entry one : bossBarToggle.entrySet()) { - if (!one.getValue().equals(Jobs.getGeneralConfigManager().BossBarsMessageDefault)) { - config.set("bossBar." + one.getKey().toString(), one.getValue()); - } - } - } - } - - config.set("actionBar", null); - - if (!actionBarToggle.isEmpty()) { - for (Entry one : actionBarToggle.entrySet()) { - if (!one.getValue().equals(Jobs.getGeneralConfigManager().ActionBarsMessageDefault)) { - config.set("actionBar." + one.getKey().toString(), one.getValue()); - } - } - } - - bossBarToggle.clear(); - actionBarToggle.clear(); - - f.saveConfig(); - } - + @Deprecated public static Map getActionBarToggle() { - return actionBarToggle; + return toggleMap.getOrDefault(MessageToggleType.ActionBar, new HashMap<>()); } + @Deprecated public static Map getBossBarToggle() { - return bossBarToggle; + return toggleMap.getOrDefault(MessageToggleType.BossBar, new HashMap<>()); + } + + public static MessageToggleState modify(UUID uuid, MessageToggleType type, MessageToggleState state) { + synchronized (toggleMap) { + return toggleMap.computeIfAbsent(type, k -> new HashMap<>()).put(uuid, state); + } } public static MessageToggleState getActionBarState(UUID uuid) { - synchronized (actionBarToggle) { - return actionBarToggle.getOrDefault(uuid, Jobs.getGCManager().ActionBarsMessageDefault); + synchronized (toggleMap) { + return getState(uuid, MessageToggleType.ActionBar); } } public static MessageToggleState getBossBarState(UUID uuid) { - synchronized (bossBarToggle) { - return bossBarToggle.getOrDefault(uuid, Jobs.getGCManager().BossBarsMessageDefault); + synchronized (toggleMap) { + return getState(uuid, MessageToggleType.BossBar); + } + } + + public static MessageToggleState getChatTextState(UUID uuid) { + synchronized (toggleMap) { + return getState(uuid, MessageToggleType.ChatText); + } + } + + public static MessageToggleState getState(UUID uuid, MessageToggleType type) { + synchronized (toggleMap) { + return toggleMap.getOrDefault(type, new HashMap<>()).getOrDefault(uuid, getDefaultState(type)); + } + } + + private static MessageToggleState getDefaultState(MessageToggleType type) { + switch (type) { + default: + case ActionBar: + return Jobs.getGCManager().ActionBarsMessageDefault; + case BossBar: + return Jobs.getGCManager().BossBarsMessageDefault; + case ChatText: + return Jobs.getGCManager().ChatTextMessageDefault; + } + } + + public static @Nullable Integer getPlayerOptionsAsInt(UUID uuid) { + StringBuilder result = new StringBuilder(); + // Starts with 1 in case remaining are 0's to produce actual full digit number + result.append("1"); + for (MessageToggleType one : MessageToggleType.values()) { + result.append(getState(uuid, one).ordinal()); + } + + int options = Integer.parseInt(result.toString()); + if (options == defaultStatesAsInt) + return null; + + return options; + } + + public static void recordPlayerOptionsFromInt(UUID uuid, @Nullable Integer options) { + + // Value should be over 10 where first number isint part of options value + if (options == null || options < 10) + return; + + int[] values = Integer + .toString(options) + // removing first number which should be 1 as a filler + .substring(1) + .chars() + .map(c -> c - '0') + .toArray(); + + for (MessageToggleType type : MessageToggleType.values()) { + + if (type.ordinal() >= values.length) + break; + + MessageToggleState state = MessageToggleState.getFromID(values[type.ordinal()]); + // Only recording if values isint default one + if (state != null && !getDefaultState(type).equals(state)) + toggleMap.computeIfAbsent(type, k -> new HashMap<>()).put(uuid, state); } } }