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'