From e87fd3d7a1b2c8a44f031c06790f596288352f35 Mon Sep 17 00:00:00 2001 From: WildInterloper <156627888+WildInterloper@users.noreply.github.com> Date: Thu, 14 Mar 2024 09:58:40 -0400 Subject: [PATCH] 1.0.4 - Beginning stages of adding Prisoner Kits! --- pom.xml | 2 +- .../nvus_prison_setup/Kit/KitManager.java | 85 ++++++++++++++++ .../Kit/Listeners/KitListener.java | 96 +++++++++++++++++++ .../Listeners/BlockListener.java | 2 +- .../Listeners/PlayerArmor.java | 4 +- .../Listeners/PlayerItems.java | 4 +- .../Listeners/PlayerSpawn.java | 2 +- .../nvus/nvus_prison_setup/PrisonSetup.java | 12 ++- src/main/resources/config.yml | 43 +++++++++ 9 files changed, 242 insertions(+), 8 deletions(-) create mode 100644 src/main/java/me/nvus/nvus_prison_setup/Kit/KitManager.java create mode 100644 src/main/java/me/nvus/nvus_prison_setup/Kit/Listeners/KitListener.java diff --git a/pom.xml b/pom.xml index 11347de..0d4569e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.NVus NVus_Prison - 1.0.3 + 1.0.4 jar NVus_PrisonSetup diff --git a/src/main/java/me/nvus/nvus_prison_setup/Kit/KitManager.java b/src/main/java/me/nvus/nvus_prison_setup/Kit/KitManager.java new file mode 100644 index 0000000..4e02011 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Kit/KitManager.java @@ -0,0 +1,85 @@ +package me.nvus.nvus_prison_setup.Kit; +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.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class KitManager { + + private final ConfigManager configManager; + + public KitManager(ConfigManager configManager) { + this.configManager = configManager; + } + + public boolean isPrisonerKitItem(ItemStack item) { + FileConfiguration config = configManager.getConfig("config.yml"); + List> kitItems = config.getMapList("PrisonerKitItems"); + + for (Map itemSpec : kitItems) { + String itemName = (String) itemSpec.get("item"); + Material material = Material.matchMaterial(itemName); + + if (material != null && item.getType() == material) { + return true; + } + } + + return false; + } + + public void givePrisonerKit(Player player) { + if (!configManager.getBoolean("config.yml", "PrisonerKit", false)) { + return; + } + + FileConfiguration config = configManager.getConfig("config.yml"); + List> kitItems = config.getMapList("PrisonerKitItems"); + + for (Map itemSpec : kitItems) { + Material material = Material.matchMaterial((String) itemSpec.get("item")); + if (material == null) continue; + + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + + // Set lore if available + if (itemSpec.containsKey("lore")) { + List lore = new ArrayList<>(); + for (String line : (List) itemSpec.get("lore")) { + lore.add(ChatColor.translateAlternateColorCodes('&', line)); + } + meta.setLore(lore); + } + + // Set enchantments if available + if (itemSpec.containsKey("enchantments")) { + Map enchantments = (Map) itemSpec.get("enchantments"); + for (Map.Entry enchantmentEntry : enchantments.entrySet()) { + Enchantment enchantment = Enchantment.getByName(enchantmentEntry.getKey()); + if (enchantment != null) { + meta.addEnchant(enchantment, enchantmentEntry.getValue(), true); + } + } + } + + item.setItemMeta(meta); + + // Set item in specified quickbar slot, if available + if (itemSpec.containsKey("slot")) { + player.getInventory().setItem((Integer) itemSpec.get("slot"), item); + } else { + player.getInventory().addItem(item); + } + } + + } +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/Kit/Listeners/KitListener.java b/src/main/java/me/nvus/nvus_prison_setup/Kit/Listeners/KitListener.java new file mode 100644 index 0000000..2622661 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Kit/Listeners/KitListener.java @@ -0,0 +1,96 @@ +package me.nvus.nvus_prison_setup.Kit.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +import me.nvus.nvus_prison_setup.Kit.KitManager; +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.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.inventory.ItemStack; + +public class KitListener implements Listener { + + private final ConfigManager configManager; + private final KitManager kitManager; + + public KitListener(ConfigManager configManager, KitManager kitManager) { + this.configManager = configManager; + this.kitManager = kitManager; + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + // Check for permission first before giving kit + if (!player.hasPermission("nvus.prisoner")) { + return; + } + kitManager.givePrisonerKit(player); + } + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent event) { + Player player = event.getPlayer(); + // Check for permission first before giving kit + if (!player.hasPermission("nvus.prisoner")) { + return; + } + kitManager.givePrisonerKit(player); + } + + @EventHandler + public void onPlayerDropItem(PlayerDropItemEvent event) { + if (!shouldRestrictKitDrop()) return; + + Player player = event.getPlayer(); + // Permission check first before defining droppedItem etc + if (!player.hasPermission("nvus.prisoner")) { + return; + } + + ItemStack droppedItem = event.getItemDrop().getItemStack(); + + + if (kitManager.isPrisonerKitItem(droppedItem)) { + event.setCancelled(true); + player.sendMessage("§cPER THE WARDEN: You cannot drop your prisoner kit items!"); + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (!shouldRestrictKitMove()) return; + + if (!(event.getWhoClicked() instanceof Player)) return; + + Player player = (Player) event.getWhoClicked(); + + // Permission Check first before defining clickedItem etc + if (!player.hasPermission("nvus.prisoner")) { + return; + } + + ItemStack clickedItem = event.getCurrentItem(); + + if (clickedItem == null || clickedItem.getType() == Material.AIR) return; + + if (kitManager.isPrisonerKitItem(clickedItem)) { + event.setCancelled(true); + player.sendMessage("§cPER THE WARDEN: You cannot move your prisoner kit items!"); + } + } + + + private boolean shouldRestrictKitDrop() { + return configManager.getBoolean("config.yml", "RestrictKitDrop", false); + } + + private boolean shouldRestrictKitMove() { + return configManager.getBoolean("config.yml", "RestrictKitMove", false); + } +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/BlockListener.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/BlockListener.java index 226cd94..01311d0 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/BlockListener.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/BlockListener.java @@ -80,7 +80,7 @@ public class BlockListener implements Listener { } else { // Inventory is full, drop the item on the ground block.getWorld().dropItemNaturally(block.getLocation(), drop); - player.sendMessage("Your inventory is currently full. The resource has been dropped on the ground!"); + player.sendMessage("Your inventory is currently full! The resource has been dropped on the ground!"); } } } diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerArmor.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerArmor.java index ea8d888..fe365d0 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerArmor.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerArmor.java @@ -33,7 +33,7 @@ public class PlayerArmor implements Listener { createArmor(Material.LEATHER_CHESTPLATE, "Prisoner Chestplate"), createArmor(Material.LEATHER_HELMET, "Prisoner Helmet") }); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYou have been equipped with prisoner armor!")); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cPer The Warden: &6&lYou have been equipped with standard issue prisoner armor!")); } } @@ -49,7 +49,7 @@ public class PlayerArmor implements Listener { boolean restrictArmor = configManager.getConfig("config.yml").getBoolean("RestrictArmor"); if (restrictArmor) { event.setCancelled(true); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lSorry inmate! &cYou're a &6&lprisoner &cand cannot change your armor!")); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lPer The Warden: &c You cannot change your armor!")); } // If restrictArmor is false, allows the player to change armor freely. } diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerItems.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerItems.java index 0fb8998..a85397f 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerItems.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerItems.java @@ -30,7 +30,7 @@ public class PlayerItems implements Listener { if (item != null && isBannedItem(item.getType())) { if (player.hasPermission("nvus.prisoner")) { event.setCancelled(true); - player.sendMessage(ChatColor.translateAlternateColorCodes('&',"&c&lSorry inmate! &cYou're a &6&lprisoner &cand cannot use this tool!")); + player.sendMessage(ChatColor.translateAlternateColorCodes('&',"&c&lPer The Warden: &6You cannot use this tool!")); } } } @@ -47,7 +47,7 @@ public class PlayerItems implements Listener { if (player.hasPermission("nvus.prisoner")) { // Cancel the event to prevent interaction with banned items event.setCancelled(true); - player.sendMessage(ChatColor.translateAlternateColorCodes('&',"&c&lSorry inmate! &cYou're a &6&lprisoner &cand cannot use this tool!")); + player.sendMessage(ChatColor.translateAlternateColorCodes('&',"&c&lPer The Warden: &6You cannot use this tool!")); } } } diff --git a/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerSpawn.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerSpawn.java index 238e317..f8a1e21 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerSpawn.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerSpawn.java @@ -97,7 +97,7 @@ public class PlayerSpawn implements Listener { player.getInventory().setLeggings(leatherLeggingsPrison); player.getInventory().setBoots(leatherBootsPrison); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYou're a prisoner! &6You've been given the default prisoner armor!")); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lPer The Warden: &6You've been given the default prisoner armor!")); } 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 2a81359..63369df 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java +++ b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java @@ -1,7 +1,7 @@ package me.nvus.nvus_prison_setup; import me.nvus.nvus_prison_setup.Configs.ConfigManager; -import me.nvus.nvus_prison_setup.Listeners.CommandListener; +import me.nvus.nvus_prison_setup.Kit.KitManager; import me.nvus.nvus_prison_setup.Configs.SettingsMenu; // Listeners import me.nvus.nvus_prison_setup.Listeners.PlayerArmor; @@ -18,6 +18,8 @@ import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener; import me.nvus.nvus_prison_setup.TreeFarm.TreeFarmListener; import me.nvus.nvus_prison_setup.AutoSell.SellManager; import me.nvus.nvus_prison_setup.AutoSell.Listeners.AutoSellListener; +import me.nvus.nvus_prison_setup.Kit.Listeners.KitListener; +import me.nvus.nvus_prison_setup.Listeners.CommandListener; // Database import me.nvus.nvus_prison_setup.Database.DatabaseManager; // Gangs @@ -156,6 +158,14 @@ public final class PrisonSetup extends JavaPlugin { } + // Prisoner Kits + boolean prisonerKitEnabled = configManager.getConfig("config.yml").getBoolean("PrisonerKit", true); + if (prisonerRanksEnabled) { + KitManager kitManager = new KitManager(configManager); + KitListener kitListener = new KitListener(configManager, kitManager); + getServer().getPluginManager().registerEvents(kitListener, this); + } + // Successful Startup/Enable getLogger().info(ChatColor.translateAlternateColorCodes('&',"&a&lNVus Prison Setup has been successfully enabled!")); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4727973..2142e4b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -55,6 +55,49 @@ PrisonerTools: # When set to FALSE it will prevent Prisoner Tools from receiving damage when mining etc. ToolDamage: false +######################################################################################## +# PRISONER KIT SETTINGS # +######################################################################################## + +# Should players spawn with a prisoner kit when they join the server or respawn? +PrisonerKit: True +# If PrisonerKit above is true: What items should be in the prisoner kit? +PrisonerKitItems: + - item: IRON_PICKAXE + lore: + - "&7Standard issue" + - "&7Prisoner's Pickaxe" + slot: 0 + enchantments: + - EFFICIENCY:3 + - UNBREAKING:2 + - item: IRON_AXE + lore: + - "&7Standard issue" + - "&7Prisoner's Axe" + slot: 1 + enchantments: + - SHARPNESS:2 + - item: IRON_SHOVEL + lore: + - "&7Standard issue" + - "&7Prisoner's Shovel" + slot: 2 + enchantments: + - SILK_TOUCH:1 + - item: IRON_SWORD + lore: + - "&7Standard issue" + - "&7Prisoner's Sword" + slot: 3 + enchantments: + - DAMAGE_ALL:3 +# Should players be able to drop their prisoner kit items? +RestrictKitDrop: True +# Should prisoners be able to move their prisoner kit items around in their inventory? +RestrictKitMove: True + + ######################################################################################## # TREE FARM FEATURE # ########################################################################################