From 2870e0111fff4af98247926c5010eda810f1b139 Mon Sep 17 00:00:00 2001 From: WildInterloper <156627888+WildInterloper@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:32:48 -0400 Subject: [PATCH] 1.0.5 - Finishing off first draft of adidng Prisoner Kits! Added new gang placeholders now there's: %nvus_gang_name%, %nvus_gang_owner% and %nvus_gang_members% to mimic the style of our Lifesteal Prison. --- README.MD | 4 +- pom.xml | 2 +- .../nvus_prison_setup/Kit/KitManager.java | 33 ++++++++++-- .../Kit/Listeners/KitListener.java | 35 ++++++++++++- .../Placeholders/GangPlaceholders.java | 29 ++++++++--- .../nvus/nvus_prison_setup/PrisonSetup.java | 15 ++++-- src/main/resources/config.yml | 50 ++++++++++--------- 7 files changed, 125 insertions(+), 43 deletions(-) diff --git a/README.MD b/README.MD index 678280b..f0dd9f7 100644 --- a/README.MD +++ b/README.MD @@ -21,8 +21,8 @@ Useful features for Minecraft Prison Servers & Then Some :P - [x] SellAll Command (Toggable) - [X] Rankup Commands ** - [x] MySQL/SQLite Rankup Support ** - - [ ] Spawn with Prisoner Tools (Toggable) - - [ ] Restrict Prisoner Tools from moving in inventory and dropping? (Toggable) + - [x] Spawn with Prisoner Tools (Toggable) ** + - [x] Restrict Prisoner Tools from moving in inventory and dropping? (Toggable) ** - [ ] Prisoner Tokens or Gems (Tied into Vault?)\ ** Implemented but still WIP diff --git a/pom.xml b/pom.xml index 0d4569e..49bfd42 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.NVus NVus_Prison - 1.0.4 + 1.0.5 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 index 4e02011..745487b 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Kit/KitManager.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Kit/KitManager.java @@ -21,14 +21,29 @@ public class KitManager { } public boolean isPrisonerKitItem(ItemStack item) { + if (item == null || !item.hasItemMeta()) { + return false; + } + 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); + ItemMeta meta = item.getItemMeta(); + String itemName = meta.hasDisplayName() ? meta.getDisplayName() : ""; + List itemLore = meta.hasLore() ? meta.getLore() : new ArrayList<>(); - if (material != null && item.getType() == material) { + for (Map itemSpec : kitItems) { + String configItemName = ChatColor.translateAlternateColorCodes('&', (String) itemSpec.get("name")); + List configItemLore = new ArrayList<>(); + if (itemSpec.get("lore") != null) { + for (String line : (List) itemSpec.get("lore")) { + configItemLore.add(ChatColor.translateAlternateColorCodes('&', line)); + } + } + + // Check if the item matches the config item name ANNNND lore + // Just to be double sure we're saying yes this is a prioner kit item on the right items! + if (itemName.equals(configItemName) && itemLore.equals(configItemLore)) { return true; } } @@ -51,6 +66,12 @@ public class KitManager { ItemStack item = new ItemStack(material); ItemMeta meta = item.getItemMeta(); + // Set the display name if available + if (itemSpec.containsKey("name")) { + String name = ChatColor.translateAlternateColorCodes('&', (String) itemSpec.get("name")); + meta.setDisplayName(name); + } + // Set lore if available if (itemSpec.containsKey("lore")) { List lore = new ArrayList<>(); @@ -80,6 +101,8 @@ public class KitManager { 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 index 2622661..859bc3d 100644 --- 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 @@ -7,12 +7,16 @@ 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.entity.PlayerDeathEvent; 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; +import java.util.ArrayList; +import java.util.List; + public class KitListener implements Listener { private final ConfigManager configManager; @@ -26,6 +30,7 @@ public class KitListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); + //player.sendMessage("§cKIT LISTENER ON JOIN ACTIVE!"); // Check for permission first before giving kit if (!player.hasPermission("nvus.prisoner")) { return; @@ -33,9 +38,36 @@ public class KitListener implements Listener { kitManager.givePrisonerKit(player); } + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + // Check for permission first before proceeding + if (!player.hasPermission("nvus.prisoner")) { + return; + } + + // This list will contain all items that are not part of the prisoner kit + List itemsToKeep = new ArrayList<>(); + + // Iterate over the items that would be dropped on death + for (ItemStack item : event.getDrops()) { + // If the item is not a prisoner kit item, add it to the list of items to keep + if (!kitManager.isPrisonerKitItem(item)) { + itemsToKeep.add(item); + } + } + + // Clear the original list of drops + event.getDrops().clear(); + + // Add back all items that are not part of the prisoner kit + event.getDrops().addAll(itemsToKeep); + } + @EventHandler public void onPlayerRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); + //player.sendMessage("§cKIT LISTENER onRespawn ACTIVE!"); // Check for permission first before giving kit if (!player.hasPermission("nvus.prisoner")) { return; @@ -48,6 +80,7 @@ public class KitListener implements Listener { if (!shouldRestrictKitDrop()) return; Player player = event.getPlayer(); + //player.sendMessage("§cKIT LISTENER onDrop ACTIVE!"); // Permission check first before defining droppedItem etc if (!player.hasPermission("nvus.prisoner")) { return; @@ -58,7 +91,7 @@ public class KitListener implements Listener { if (kitManager.isPrisonerKitItem(droppedItem)) { event.setCancelled(true); - player.sendMessage("§cPER THE WARDEN: You cannot drop your prisoner kit items!"); + player.sendMessage("§c&lPER THE WARDEN: You cannot drop your prisoner kit items!"); } } diff --git a/src/main/java/me/nvus/nvus_prison_setup/Placeholders/GangPlaceholders.java b/src/main/java/me/nvus/nvus_prison_setup/Placeholders/GangPlaceholders.java index 35c80f0..6117b4f 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Placeholders/GangPlaceholders.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Placeholders/GangPlaceholders.java @@ -1,9 +1,9 @@ package me.nvus.nvus_prison_setup.Placeholders; -import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; import me.nvus.nvus_prison_setup.Gangs.GangManager; +import me.nvus.nvus_prison_setup.Gangs.GangInfo; public class GangPlaceholders extends PlaceholderExpansion { @@ -25,7 +25,7 @@ public class GangPlaceholders extends PlaceholderExpansion { @Override public String getVersion() { - return "1.0"; + return "1.1"; } @Override @@ -34,12 +34,25 @@ public class GangPlaceholders extends PlaceholderExpansion { return ""; } - // Placeholder: %nvus_gang_name% - if (identifier.equals("gang_name")) { - String gangName = gangManager.getCurrentGangName(player.getUniqueId()); - return gangName != null ? gangName : "No Gang"; + String gangName = gangManager.getCurrentGangName(player.getUniqueId()); + if (gangName == null) { + return "No Gang"; } - return null; + GangInfo gangInfo = gangManager.getGangInfo(gangName); + if (gangInfo == null) { + return "Gang information could not be retrieved."; + } + + switch (identifier) { + case "gang_name": + return gangInfo.getName(); + case "gang_owner": + return gangInfo.getOwnerName(); + case "gang_members": + return String.valueOf(gangInfo.getMemberCount()); + default: + return null; + } } -} \ No newline at end of file +} 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 63369df..30b5c88 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java +++ b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java @@ -49,6 +49,8 @@ public final class PrisonSetup extends JavaPlugin { private DatabaseManager dbManager; private GangManager gangManager; + private KitManager kitManager; + private RankManager rankManager; private static Economy econ = null; // Vault / Economy @@ -160,9 +162,12 @@ 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); + if (prisonerKitEnabled) { + // Initialize KitManager with the instance of ConfigManager + this.kitManager = new KitManager(this.configManager); + + // Initialize KitListener with ConfigManager and KitManager, then register it + KitListener kitListener = new KitListener(this.configManager, this.kitManager); getServer().getPluginManager().registerEvents(kitListener, this); } @@ -231,6 +236,10 @@ public final class PrisonSetup extends JavaPlugin { return econ; } + public KitManager getKitManager() { + return kitManager; + } + public RankManager getRankManager() { return rankManager; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2142e4b..2f22d46 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -63,35 +63,39 @@ ToolDamage: false 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 + name: "&7Prisoner's Sword" lore: - "&7Standard issue" - "&7Prisoner's Sword" + slot: 0 + enchantments: + DAMAGE_ALL: 3 + - item: IRON_PICKAXE + name: "&7Prisoner's Pickaxe" + lore: + - "&7Standard issue" + - "&7Prisoner's Pickaxe" + slot: 1 + enchantments: + EFFICIENCY: 3 + UNBREAKING: 2 + - item: IRON_AXE + name: "&7Prisoner's Axe" + lore: + - "&7Standard issue" + - "&7Prisoner's Axe" + slot: 2 + enchantments: + SHARPNESS: 2 + - item: IRON_SHOVEL + name: "&7Prisoner's Shovel" + lore: + - "&7Standard issue" + - "&7Prisoner's Shovel" slot: 3 enchantments: - - DAMAGE_ALL:3 + SILK_TOUCH: 1 # 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?