v0.6.6 - Re-added ConfigManager implementation for Settings Menu. Ruled out the issue was not ConfigManager and was just in fact the click event firing multiple times across the frames generated. Should be safe to use and work correctly? Let's find out... LOL.

This commit is contained in:
WildInterloper 2024-03-06 11:52:16 -05:00
parent 324707d632
commit b2ec19387f
1 changed files with 19 additions and 16 deletions

View File

@ -24,14 +24,16 @@ public class SettingsMenu implements Listener {
public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) { public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) {
this.plugin = plugin; this.plugin = plugin;
this.configManager = configManager; this.configManager = configManager;
plugin.getServer().getPluginManager().registerEvents(this, plugin); Bukkit.getServer().getPluginManager().registerEvents(this, plugin);
} }
public void openSettingsMenu(Player player) { public void openSettingsMenu(Player player) {
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_RED + "NVus Prison Settings"); Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Settings Menu");
// Retrieve configurations directly using ConfigManager
FileConfiguration config = configManager.getConfig("config.yml"); FileConfiguration config = configManager.getConfig("config.yml");
// Toggle items with dynamic status from config
inv.setItem(3, createToggleItem(Material.HOPPER, "Toggle AutoPickup", config.getBoolean("AutoPickup", false))); inv.setItem(3, createToggleItem(Material.HOPPER, "Toggle AutoPickup", config.getBoolean("AutoPickup", false)));
inv.setItem(4, createToggleItem(Material.LEVER, "Toggle AutoSwitch", config.getBoolean("AutoSwitch", false))); inv.setItem(4, createToggleItem(Material.LEVER, "Toggle AutoSwitch", config.getBoolean("AutoSwitch", false)));
inv.setItem(5, createItem(Material.BOOK, ChatColor.GREEN + "Reload Configs")); inv.setItem(5, createItem(Material.BOOK, ChatColor.GREEN + "Reload Configs"));
@ -39,10 +41,10 @@ public class SettingsMenu implements Listener {
player.openInventory(inv); player.openInventory(inv);
} }
private ItemStack createToggleItem(Material material, String name, boolean enabled) { private ItemStack createToggleItem(Material material, String name, boolean isEnabled) {
ItemStack item = new ItemStack(material); ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
meta.setDisplayName(ChatColor.GREEN + name + ": " + (enabled ? ChatColor.BLUE + "Enabled" : ChatColor.RED + "Disabled")); meta.setDisplayName(ChatColor.GREEN + name + ": " + (isEnabled ? ChatColor.BLUE + "Enabled" : ChatColor.RED + "Disabled"));
item.setItemMeta(meta); item.setItemMeta(meta);
return item; return item;
} }
@ -57,46 +59,47 @@ public class SettingsMenu implements Listener {
@EventHandler @EventHandler
public void onInventoryClick(InventoryClickEvent event) { public void onInventoryClick(InventoryClickEvent event) {
if (!event.getView().getTitle().equals(ChatColor.DARK_GREEN + "Settings Menu")) return; if (!event.getView().getTitle().equals(ChatColor.DARK_RED + "NVus Prison Settings")) return;
event.setCancelled(true); event.setCancelled(true);
Player player = (Player) event.getWhoClicked(); Player player = (Player) event.getWhoClicked();
UUID playerUUID = player.getUniqueId(); UUID playerUUID = player.getUniqueId();
// Implement cooldown check
long lastClick = lastClickTime.getOrDefault(playerUUID, 0L); long lastClick = lastClickTime.getOrDefault(playerUUID, 0L);
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
if (currentTime - lastClick < 500) { // Cooldown of 0.5 seconds if (currentTime - lastClick < 500) return; // 500 ms cooldown
return;
}
lastClickTime.put(playerUUID, currentTime); lastClickTime.put(playerUUID, currentTime);
ItemStack clickedItem = event.getCurrentItem(); ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null || !clickedItem.hasItemMeta()) return; if (clickedItem == null || !clickedItem.hasItemMeta()) return;
String displayName = clickedItem.getItemMeta().getDisplayName(); String displayName = clickedItem.getItemMeta().getDisplayName();
if (displayName.contains("Toggle AutoPickup")) { if (displayName.contains("Toggle AutoPickup")) {
toggleOption("AutoPickup", player); toggleConfigOption(player, "AutoPickup");
} else if (displayName.contains("Toggle AutoSwitch")) { } else if (displayName.contains("Toggle AutoSwitch")) {
toggleOption("AutoSwitch", player); toggleConfigOption(player, "AutoSwitch");
} else if (displayName.contains("Reload Configs")) { } else if (displayName.contains("Reload Configs")) {
reloadConfigs(player); reloadConfigs(player);
} }
} }
private void toggleOption(String key, Player player) { private void toggleConfigOption(Player player, String configKey) {
FileConfiguration config = configManager.getConfig("config.yml"); FileConfiguration config = configManager.getConfig("config.yml");
boolean currentValue = config.getBoolean(key, false); boolean currentValue = config.getBoolean(configKey, false);
config.set(key, !currentValue); config.set(configKey, !currentValue);
configManager.saveConfig("config.yml"); configManager.saveConfig("config.yml");
player.sendMessage(ChatColor.GREEN + key + " " + (!currentValue ? "enabled." : "disabled.")); player.sendMessage(ChatColor.GREEN + configKey + " " + (!currentValue ? "enabled" : "disabled"));
openSettingsMenu(player); // Refresh the menu openSettingsMenu(player); // Refresh the inventory to reflect the change
} }
private void reloadConfigs(Player player) { private void reloadConfigs(Player player) {
configManager.reloadConfig("config.yml"); configManager.reloadConfig("config.yml");
configManager.reloadConfig("auto_switch.yml"); configManager.reloadConfig("auto_switch.yml");
configManager.reloadConfig("banned_items.yml"); configManager.reloadConfig("banned_items.yml");
configManager.saveConfig("config.yml"); // Ensure any changes are saved before reload
player.sendMessage(ChatColor.GREEN + "Configuration files reloaded."); player.sendMessage(ChatColor.GREEN + "Configuration files reloaded.");
openSettingsMenu(player); // Refresh the menu openSettingsMenu(player); // Refresh the inventory
} }
} }