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.

This commit is contained in:
WildInterloper 2024-03-14 11:32:48 -04:00
parent e87fd3d7a1
commit 2870e0111f
7 changed files with 125 additions and 43 deletions

View File

@ -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

View File

@ -6,7 +6,7 @@
<groupId>me.NVus</groupId>
<artifactId>NVus_Prison</artifactId>
<version>1.0.4</version>
<version>1.0.5</version>
<packaging>jar</packaging>
<name>NVus_PrisonSetup</name>

View File

@ -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<Map<?, ?>> 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<String> 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<String> configItemLore = new ArrayList<>();
if (itemSpec.get("lore") != null) {
for (String line : (List<String>) 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<String> lore = new ArrayList<>();
@ -80,6 +101,8 @@ public class KitManager {
player.getInventory().addItem(item);
}
}
}
}

View File

@ -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<ItemStack> 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!");
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -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?