forked from never2nv/NVus_Prison
v0.8.1 - Fixed ToolDamage not having an in-game command. Will update menu on next push.
This commit is contained in:
parent
2d47f21ba5
commit
768f33c664
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>me.NVus</groupId>
|
<groupId>me.NVus</groupId>
|
||||||
<artifactId>NVus_Prison_Setup</artifactId>
|
<artifactId>NVus_Prison_Setup</artifactId>
|
||||||
<version>0.7.5</version>
|
<version>0.8.1</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>NVus_PrisonSetup</name>
|
<name>NVus_PrisonSetup</name>
|
||||||
|
|
|
@ -76,6 +76,13 @@ public class CommandListener implements CommandExecutor {
|
||||||
}
|
}
|
||||||
handleToggleConfigCommand(sender, "RestrictArmor", args[1]);
|
handleToggleConfigCommand(sender, "RestrictArmor", args[1]);
|
||||||
break;
|
break;
|
||||||
|
case "tooldamage": // New case for toggling RestrictArmor
|
||||||
|
if (args.length < 2) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Usage: /nvus tooldamage <true|false>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
handleToggleConfigCommand(sender, "ToolDamage", args[1]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help.");
|
sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help.");
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -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<Material> 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.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -10,7 +10,9 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ToolSwitchListener implements Listener {
|
public class ToolSwitchListener implements Listener {
|
||||||
|
@ -22,61 +24,49 @@ public class ToolSwitchListener implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
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();
|
Player player = event.getPlayer();
|
||||||
FileConfiguration mainConfig = configManager.getConfig("config.yml");
|
FileConfiguration config = configManager.getConfig("config.yml");
|
||||||
FileConfiguration autoSwitchConfig = configManager.getConfig("auto_switch.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 blockType = event.getClickedBlock().getType();
|
||||||
|
Material bestTool = determineBestToolForBlock(blockType, player, config, autoSwitchConfig);
|
||||||
Material bestTool = determineBestTool(blockType, player, mainConfig, autoSwitchConfig);
|
|
||||||
if (bestTool != null) {
|
if (bestTool != null) {
|
||||||
switchToTool(player, bestTool);
|
switchToTool(player, bestTool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Material determineBestTool(Material blockType, Player player, FileConfiguration mainConfig, FileConfiguration autoSwitchConfig) {
|
private Material determineBestToolForBlock(Material blockType, Player player, FileConfiguration config, FileConfiguration autoSwitchConfig) {
|
||||||
List<String> prisonTools = mainConfig.getStringList("PrisonerTools");
|
List<Material> prisonerTools = config.getStringList("PrisonerTools").stream()
|
||||||
|
.map(Material::valueOf)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// Fetch block materials for tools from auto_switch.yml
|
|
||||||
List<Material> pickaxeMaterials = convertStringListToMaterial(autoSwitchConfig.getStringList("PickaxeMaterials"));
|
|
||||||
List<Material> axeMaterials = convertStringListToMaterial(autoSwitchConfig.getStringList("AxeMaterials"));
|
|
||||||
List<Material> shovelMaterials = convertStringListToMaterial(autoSwitchConfig.getStringList("ShovelMaterials"));
|
|
||||||
|
|
||||||
Material requiredTool = getRequiredToolForBlock(blockType, pickaxeMaterials, axeMaterials, shovelMaterials);
|
Map<Material, List<Material>> toolEffectivenessMap = new HashMap<>();
|
||||||
|
for (Material tool : prisonerTools) {
|
||||||
|
|
||||||
if (requiredTool != null && prisonTools.contains(requiredTool.toString())) {
|
if (tool.toString().endsWith("_PICKAXE")) {
|
||||||
return findBestToolInInventory(requiredTool, player);
|
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;
|
for (Material tool : prisonerTools) {
|
||||||
|
List<Material> effectiveBlocks = toolEffectivenessMap.getOrDefault(tool, List.of());
|
||||||
|
if (effectiveBlocks.contains(blockType) && player.getInventory().contains(tool)) {
|
||||||
|
return tool;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Material getRequiredToolForBlock(Material blockType, List<Material> pickaxeMaterials, List<Material> axeMaterials, List<Material> shovelMaterials) {
|
return null; // No suitable tool found
|
||||||
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;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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<Material> convertStringListToMaterial(List<String> stringList) {
|
|
||||||
return stringList.stream().map(Material::valueOf).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void switchToTool(Player player, Material tool) {
|
private void switchToTool(Player player, Material tool) {
|
||||||
PlayerInventory inventory = player.getInventory();
|
PlayerInventory inventory = player.getInventory();
|
||||||
|
@ -85,4 +75,8 @@ public class ToolSwitchListener implements Listener {
|
||||||
inventory.setHeldItemSlot(toolSlot);
|
inventory.setHeldItemSlot(toolSlot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Material> convertStringListToMaterial(List<String> stringList) {
|
||||||
|
return stringList.stream().map(Material::valueOf).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.BlockListener;
|
||||||
import me.nvus.nvus_prison_setup.Listeners.ToolSwitchListener;
|
import me.nvus.nvus_prison_setup.Listeners.ToolSwitchListener;
|
||||||
import me.nvus.nvus_prison_setup.Updater.UpdateChecker;
|
import me.nvus.nvus_prison_setup.Updater.UpdateChecker;
|
||||||
|
import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
@ -38,6 +39,9 @@ public final class PrisonSetup extends JavaPlugin {
|
||||||
//new SettingsMenu(this, configManager);
|
//new SettingsMenu(this, configManager);
|
||||||
getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this);
|
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!"));
|
getLogger().info(ChatColor.translateAlternateColorCodes('&',"&a&lNVus Prison Setup has been successfully enabled!"));
|
||||||
|
|
||||||
new UpdateChecker(this, 12345).getVersion(version -> {
|
new UpdateChecker(this, 12345).getVersion(version -> {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name: NVus_PrisonSetup
|
name: NVus_Prison
|
||||||
version: '${project.version}'
|
version: '${project.version}'
|
||||||
main: me.nvus.nvus_prison_setup.PrisonSetup
|
main: me.nvus.nvus_prison_setup.PrisonSetup
|
||||||
api-version: '1.20'
|
api-version: '1.20'
|
||||||
|
|
Loading…
Reference in New Issue