diff --git a/pom.xml b/pom.xml index c1491d2..8763fca 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.NVus NVus_Prison_Setup - 0.7.5 + 0.8.1 jar NVus_PrisonSetup diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java index e7fd58b..41134b8 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java @@ -76,6 +76,13 @@ public class CommandListener implements CommandExecutor { } handleToggleConfigCommand(sender, "RestrictArmor", args[1]); break; + case "tooldamage": // New case for toggling RestrictArmor + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /nvus tooldamage "); + return true; + } + handleToggleConfigCommand(sender, "ToolDamage", args[1]); + break; default: sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help."); return true; diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolDamageListener.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolDamageListener.java new file mode 100644 index 0000000..be78821 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolDamageListener.java @@ -0,0 +1,49 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; +import java.util.stream.Collectors; + +public class ToolDamageListener implements Listener { + private final ConfigManager configManager; + + public ToolDamageListener(ConfigManager configManager) { + this.configManager = configManager; + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); + ItemStack itemInHand = player.getInventory().getItemInMainHand(); + + if (!(itemInHand.getItemMeta() instanceof Damageable)) return; + + FileConfiguration config = configManager.getConfig("config.yml"); + boolean toolDamageEnabled = config.getBoolean("ToolDamage", true); + List prisonerTools = config.getStringList("PrisonerTools").stream().map(Material::valueOf).collect(Collectors.toList()); + + if (!toolDamageEnabled && prisonerTools.contains(itemInHand.getType())) { + Damageable itemMeta = (Damageable) itemInHand.getItemMeta(); + + itemMeta.setDamage(0); + + itemInHand.setItemMeta((ItemMeta) itemMeta); + + // DEBUGGGGGGGGGGGG + //player.sendMessage(ChatColor.GREEN + "Your tool's durability was preserved."); + } + } + + +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolSwitchListener.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolSwitchListener.java index 5280d28..a812ce9 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolSwitchListener.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolSwitchListener.java @@ -10,7 +10,9 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; public class ToolSwitchListener implements Listener { @@ -22,61 +24,49 @@ public class ToolSwitchListener implements Listener { @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { - if (event.getAction() != org.bukkit.event.block.Action.LEFT_CLICK_BLOCK) return; + if (event.getAction() != org.bukkit.event.block.Action.LEFT_CLICK_BLOCK || event.getClickedBlock() == null) return; Player player = event.getPlayer(); - FileConfiguration mainConfig = configManager.getConfig("config.yml"); + FileConfiguration config = configManager.getConfig("config.yml"); FileConfiguration autoSwitchConfig = configManager.getConfig("auto_switch.yml"); - if (!player.hasPermission("nvus.prisoner") || !mainConfig.getBoolean("AutoSwitch", true)) return; + if (!player.hasPermission("nvus.prisoner") || !config.getBoolean("AutoSwitch", true)) return; Material blockType = event.getClickedBlock().getType(); - - Material bestTool = determineBestTool(blockType, player, mainConfig, autoSwitchConfig); + Material bestTool = determineBestToolForBlock(blockType, player, config, autoSwitchConfig); if (bestTool != null) { switchToTool(player, bestTool); } } - private Material determineBestTool(Material blockType, Player player, FileConfiguration mainConfig, FileConfiguration autoSwitchConfig) { - List prisonTools = mainConfig.getStringList("PrisonerTools"); + private Material determineBestToolForBlock(Material blockType, Player player, FileConfiguration config, FileConfiguration autoSwitchConfig) { + List prisonerTools = config.getStringList("PrisonerTools").stream() + .map(Material::valueOf) + .collect(Collectors.toList()); - // Fetch block materials for tools from auto_switch.yml - List pickaxeMaterials = convertStringListToMaterial(autoSwitchConfig.getStringList("PickaxeMaterials")); - List axeMaterials = convertStringListToMaterial(autoSwitchConfig.getStringList("AxeMaterials")); - List shovelMaterials = convertStringListToMaterial(autoSwitchConfig.getStringList("ShovelMaterials")); - Material requiredTool = getRequiredToolForBlock(blockType, pickaxeMaterials, axeMaterials, shovelMaterials); + Map> toolEffectivenessMap = new HashMap<>(); + for (Material tool : prisonerTools) { - if (requiredTool != null && prisonTools.contains(requiredTool.toString())) { - return findBestToolInInventory(requiredTool, player); + if (tool.toString().endsWith("_PICKAXE")) { + toolEffectivenessMap.put(tool, convertStringListToMaterial(autoSwitchConfig.getStringList("PickaxeMaterials"))); + } else if (tool.toString().endsWith("_AXE")) { + toolEffectivenessMap.put(tool, convertStringListToMaterial(autoSwitchConfig.getStringList("AxeMaterials"))); + } else if (tool.toString().endsWith("_SHOVEL")) { + toolEffectivenessMap.put(tool, convertStringListToMaterial(autoSwitchConfig.getStringList("ShovelMaterials"))); + } } - return null; - } - - private Material getRequiredToolForBlock(Material blockType, List pickaxeMaterials, List axeMaterials, List shovelMaterials) { - if (pickaxeMaterials.contains(blockType)) { - return Material.IRON_PICKAXE; - } else if (axeMaterials.contains(blockType)) { - return Material.IRON_AXE; - } else if (shovelMaterials.contains(blockType)) { - return Material.IRON_SHOVEL; + for (Material tool : prisonerTools) { + List effectiveBlocks = toolEffectivenessMap.getOrDefault(tool, List.of()); + if (effectiveBlocks.contains(blockType) && player.getInventory().contains(tool)) { + return tool; + } } - return null; + + return null; // No suitable tool found } - private Material findBestToolInInventory(Material toolType, Player player) { - PlayerInventory inventory = player.getInventory(); - return inventory.all(toolType).values().stream() - .findFirst() - .map(ItemStack::getType) - .orElse(null); - } - - private List convertStringListToMaterial(List stringList) { - return stringList.stream().map(Material::valueOf).collect(Collectors.toList()); - } private void switchToTool(Player player, Material tool) { PlayerInventory inventory = player.getInventory(); @@ -85,4 +75,8 @@ public class ToolSwitchListener implements Listener { inventory.setHeldItemSlot(toolSlot); } } + + private List convertStringListToMaterial(List stringList) { + return stringList.stream().map(Material::valueOf).collect(Collectors.toList()); + } } diff --git a/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java index 3a5fb78..0eee8f9 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java +++ b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java @@ -9,6 +9,7 @@ import me.nvus.nvus_prison_setup.Listeners.PlayerSpawn; import me.nvus.nvus_prison_setup.Listeners.BlockListener; import me.nvus.nvus_prison_setup.Listeners.ToolSwitchListener; import me.nvus.nvus_prison_setup.Updater.UpdateChecker; +import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.ChatColor; @@ -38,6 +39,9 @@ public final class PrisonSetup extends JavaPlugin { //new SettingsMenu(this, configManager); getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this); + ToolDamageListener toolDamageListener = new ToolDamageListener(configManager); + getServer().getPluginManager().registerEvents(toolDamageListener, this); + getLogger().info(ChatColor.translateAlternateColorCodes('&',"&a&lNVus Prison Setup has been successfully enabled!")); new UpdateChecker(this, 12345).getVersion(version -> { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1d81f11..6c26721 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,4 +1,4 @@ -name: NVus_PrisonSetup +name: NVus_Prison version: '${project.version}' main: me.nvus.nvus_prison_setup.PrisonSetup api-version: '1.20'