diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..8f00030 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# GitHub Copilot persisted chat sessions +/copilot/chatSessions diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..d72a5ca --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..cf12048 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..82dbec8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..773e8c4 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/NVus_Prison_Setup.iml b/NVus_Prison_Setup.iml new file mode 100644 index 0000000..c974104 --- /dev/null +++ b/NVus_Prison_Setup.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + PAPER + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/assets/donate.png b/assets/donate.png new file mode 100644 index 0000000..b716fda Binary files /dev/null and b/assets/donate.png differ diff --git a/assets/plugin-icon.png b/assets/plugin-icon.png new file mode 100644 index 0000000..2d8f542 Binary files /dev/null and b/assets/plugin-icon.png differ diff --git a/assets/plugin_cover_photo.png b/assets/plugin_cover_photo.png new file mode 100644 index 0000000..55a9d11 Binary files /dev/null and b/assets/plugin_cover_photo.png differ diff --git a/assets/plugin_info.png b/assets/plugin_info.png new file mode 100644 index 0000000..6ae6c99 Binary files /dev/null and b/assets/plugin_info.png differ diff --git a/assets/plugin_menu.png b/assets/plugin_menu.png new file mode 100644 index 0000000..96d9e2a Binary files /dev/null and b/assets/plugin_menu.png differ diff --git a/assets/screenshots/bbb-listing.png b/assets/screenshots/bbb-listing.png new file mode 100644 index 0000000..d88151c Binary files /dev/null and b/assets/screenshots/bbb-listing.png differ diff --git a/assets/screenshots/config_auto_switch.png b/assets/screenshots/config_auto_switch.png new file mode 100644 index 0000000..41fac32 Binary files /dev/null and b/assets/screenshots/config_auto_switch.png differ diff --git a/assets/screenshots/config_banned_items.png b/assets/screenshots/config_banned_items.png new file mode 100644 index 0000000..27f2651 Binary files /dev/null and b/assets/screenshots/config_banned_items.png differ diff --git a/assets/screenshots/config_main.png b/assets/screenshots/config_main.png new file mode 100644 index 0000000..3631e9f Binary files /dev/null and b/assets/screenshots/config_main.png differ diff --git a/assets/screenshots/screen-1.png b/assets/screenshots/screen-1.png new file mode 100644 index 0000000..757cff3 Binary files /dev/null and b/assets/screenshots/screen-1.png differ diff --git a/assets/screenshots/screen-2.png b/assets/screenshots/screen-2.png new file mode 100644 index 0000000..b6d3470 Binary files /dev/null and b/assets/screenshots/screen-2.png differ diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..e23e99b --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + me.NVus + NVus_Prison_Setup + NVus_PrisonSetup + 0.5.6 + https://FNGnation.net + + + + true + src/main/resources + + + + + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + com.github.wvengen + proguard-maven-plugin + 2.6.1 + + + package + + proguard + + + + + true + ${project.build.finalName}.jar + ${project.build.finalName}-proguard.jar + ${project.build.directory} + ${basedir}/proguard.conf + + ${java.home}/jmods/java.base.jmod + + + + + + + + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + io.papermc.paper + paper-api + 1.20.4-R0.1-SNAPSHOT + provided + + + + 1.8 + UTF-8 + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c1491d2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,140 @@ + + + 4.0.0 + + me.NVus + NVus_Prison_Setup + 0.7.5 + jar + + NVus_PrisonSetup + + + 17 + 17 + 17 + UTF-8 + + https://FNGnation.net + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + enginehub + https://maven.enginehub.org/repo/ + + + + + + + com.intellectualsites.bom + bom-newest + 1.42 + import + pom + + + + + + + io.papermc.paper + paper-api + 1.20.4-R0.1-SNAPSHOT + provided + + + com.sk89q.worldguard + worldguard-bukkit + 7.0.9 + provided + + + com.fastasyncworldedit + FastAsyncWorldEdit-Core + provided + + + + + + + + + + + diff --git a/src/main/java/me/nvus/nvus_prison_setup/Configs/BannedItemsConfig.java b/src/main/java/me/nvus/nvus_prison_setup/Configs/BannedItemsConfig.java new file mode 100644 index 0000000..c5c3477 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Configs/BannedItemsConfig.java @@ -0,0 +1,59 @@ +package me.nvus.nvus_prison_setup.Configs; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class BannedItemsConfig { + private final JavaPlugin plugin; + private FileConfiguration config; + private File configFile; + + public BannedItemsConfig(JavaPlugin plugin) { + this.plugin = plugin; + } + + public void reloadConfig() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "banned_items.yml"); + } + config = YamlConfiguration.loadConfiguration(configFile); + } + + public FileConfiguration getConfig() { + if (config == null) { + reloadConfig(); + } + return config; + } + + public void saveConfig() { + if (config == null || configFile == null) { + return; + } + try { + getConfig().save(configFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void saveDefaultConfig() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "banned_items.yml"); + } + if (!configFile.exists()) { + plugin.saveResource("banned_items.yml", false); + plugin.getLogger().info("banned_items.yml has been created."); + } + } + + + public List getBannedItems() { + return getConfig().getStringList("BannedItems"); + } +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/Configs/ConfigManager.java b/src/main/java/me/nvus/nvus_prison_setup/Configs/ConfigManager.java new file mode 100644 index 0000000..4de2259 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Configs/ConfigManager.java @@ -0,0 +1,61 @@ +package me.nvus.nvus_prison_setup.Configs; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class ConfigManager { + private final JavaPlugin plugin; + private final Map configs; + private final Map configFiles; + + public ConfigManager(JavaPlugin plugin) { + this.plugin = plugin; + this.configs = new HashMap<>(); + this.configFiles = new HashMap<>(); + } + + public void reloadConfig(String configName) { + File configFile = getConfigFile(configName); + FileConfiguration config = YamlConfiguration.loadConfiguration(configFile); + configs.put(configName, config); + } + + public FileConfiguration getConfig(String configName) { + if (!configs.containsKey(configName)) { + reloadConfig(configName); + } + return configs.get(configName); + } + + public void saveConfig(String configName) { + FileConfiguration config = getConfig(configName); + File configFile = getConfigFile(configName); + try { + config.save(configFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void saveDefaultConfig(String configName) { + File configFile = getConfigFile(configName); + if (!configFile.exists()) { + plugin.saveResource(configName, false); + plugin.getLogger().info(configName + " has been created."); + } + } + + private File getConfigFile(String configName) { + if (!configFiles.containsKey(configName)) { + File configFile = new File(plugin.getDataFolder(), configName); + configFiles.put(configName, configFile); + } + return configFiles.get(configName); + } +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/Configs/SettingsMenu.java b/src/main/java/me/nvus/nvus_prison_setup/Configs/SettingsMenu.java new file mode 100644 index 0000000..30aba15 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Configs/SettingsMenu.java @@ -0,0 +1,129 @@ +package me.nvus.nvus_prison_setup.Configs; + +import org.bukkit.Bukkit; +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.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; + +public class SettingsMenu implements Listener { + private final JavaPlugin plugin; + private final ConfigManager configManager; + private final Map> playerTasks = new ConcurrentHashMap<>(); + + public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) { + this.plugin = plugin; + this.configManager = configManager; + Bukkit.getServer().getPluginManager().registerEvents(this, plugin); + } + + public void openSettingsMenu(Player player) { + Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Settings Menu"); + FileConfiguration config = configManager.getConfig("config.yml"); + + inv.setItem(0, createToggleItem(Material.LEATHER_CHESTPLATE, "Toggle PrisonerArmor", config.getBoolean("PrisonerArmor", false))); + inv.setItem(1, createToggleItem(Material.IRON_DOOR, "Toggle RestrictArmor", config.getBoolean("RestrictArmor", false))); + inv.setItem(3, createToggleItem(Material.HOPPER, "Toggle AutoPickup", config.getBoolean("AutoPickup", false))); + inv.setItem(4, createToggleItem(Material.LEVER, "Toggle AutoSwitch", config.getBoolean("AutoSwitch", false))); + inv.setItem(7, createItem(Material.BOOK, ChatColor.GREEN + "Reload Configs")); + + player.openInventory(inv); + } + + private ItemStack createToggleItem(Material material, String name, boolean isEnabled) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.GREEN + name + ": " + (isEnabled ? ChatColor.BLUE + "Enabled" : ChatColor.RED + "Disabled")); + item.setItemMeta(meta); + return item; + } + + private ItemStack createItem(Material material, String name) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(name); + item.setItemMeta(meta); + return item; + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (!event.getView().getTitle().equals(ChatColor.DARK_GREEN + "Settings Menu")) return; + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + UUID playerUUID = player.getUniqueId(); + + // Execute any pending tasks for this player before processing a new one + playerTasks.computeIfPresent(playerUUID, (uuid, task) -> { + Bukkit.getScheduler().runTask(plugin, () -> task.accept(player)); + return null; + }); + + ItemStack clickedItem = event.getCurrentItem(); + if (clickedItem == null || !clickedItem.hasItemMeta() || !clickedItem.getItemMeta().hasDisplayName()) { + return; + } + + String displayName = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName()); + scheduleConfigToggle(playerUUID, displayName); + } + + private void scheduleConfigToggle(UUID playerUUID, String displayName) { + Consumer task = player -> { + if (displayName.contains("Toggle PrisonerArmor")) { + toggleConfigOption(player, "PrisonerArmor"); + } else if (displayName.contains("Toggle RestrictArmor")) { + toggleConfigOption(player, "RestrictArmor"); + } else if (displayName.contains("Toggle AutoPickup")) { + toggleConfigOption(player, "AutoPickup"); + } else if (displayName.contains("Toggle AutoSwitch")) { + toggleConfigOption(player, "AutoSwitch"); + } else if (displayName.contains("Reload Configs")) { + reloadConfigs(player); + } + }; + + playerTasks.put(playerUUID, task); + } + + private void toggleConfigOption(final Player player, String configKey) { + // Close the inventory to prevent further clicks + player.closeInventory(); + // Re-open menu, 10 tick delay + Bukkit.getScheduler().runTaskLater(plugin, () -> openSettingsMenu(player), 10L); + + FileConfiguration config = configManager.getConfig("config.yml"); + boolean currentValue = config.getBoolean(configKey, false); + + config.set(configKey, !currentValue); + + configManager.saveConfig("config.yml"); + // Debug message + //player.sendMessage(ChatColor.GREEN + configKey + " " + (!currentValue ? "enabled" : "disabled")); + + + } + + + private void reloadConfigs(final Player player) { + configManager.reloadConfig("config.yml"); + configManager.reloadConfig("auto_switch.yml"); + configManager.reloadConfig("banned_items.yml"); + configManager.saveConfig("config.yml"); + player.sendMessage(ChatColor.GREEN + "Configuration files reloaded."); + } +} 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 new file mode 100644 index 0000000..226cd94 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/BlockListener.java @@ -0,0 +1,109 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.flags.Flags; +import com.sk89q.worldguard.protection.regions.RegionContainer; +import com.sk89q.worldguard.protection.regions.RegionQuery; +import me.nvus.nvus_prison_setup.PrisonSetup; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class BlockListener implements Listener { + private final PrisonSetup plugin; + + private final Set storageBlocks = new HashSet<>(Arrays.asList( + Material.CHEST, + Material.TRAPPED_CHEST, + Material.ACACIA_CHEST_BOAT, + Material.BIRCH_CHEST_BOAT, + Material.DARK_OAK_CHEST_BOAT, + Material.JUNGLE_CHEST_BOAT, + Material.OAK_CHEST_BOAT, + Material.SPRUCE_CHEST_BOAT, + Material.FURNACE, + Material.BLAST_FURNACE, + Material.SMOKER, + Material.BARREL, + Material.DISPENSER, + Material.DROPPER, + Material.HOPPER, + Material.CAULDRON, + Material.SHULKER_BOX, + Material.CHEST_MINECART, + Material.BARREL, + Material.CHISELED_BOOKSHELF, + Material.BUNDLE + // Add more! + )); + + public BlockListener(PrisonSetup plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); + Block block = event.getBlock(); + + if (!isBlockBreakAllowed(player, block.getLocation())) { + event.setCancelled(true); // Prevent the block from being broken + event.setDropItems(false); // Prevent the block from dropping items + //player.sendMessage("You cannot break blocks in this area."); + + + return; + } + + if (storageBlocks.contains(block.getType())) { + return; + } + + if (player.hasPermission("nvus.prisoner") && plugin.getConfigManager().getConfig("config.yml").getBoolean("AutoPickup")) { + List drops = block.getDrops().stream().toList(); + for (ItemStack drop : drops) { + if (player.getInventory().addItem(drop).isEmpty()) { + + event.setDropItems(false); + } 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!"); + } + } + } + } + + private boolean isBlockBreakAllowed(Player player, org.bukkit.Location bukkitLocation) { + + if (player.hasPermission("worldguard.region.bypass." + bukkitLocation.getWorld().getName()) || player.hasPermission("worldguard.region.bypass.*")) { + return true; + } + + com.sk89q.worldedit.util.Location location = BukkitAdapter.adapt(bukkitLocation); + RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); + RegionQuery query = container.createQuery(); + com.sk89q.worldguard.LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + + if (query.testBuild(location, localPlayer)) { + return true; + } + + // region membership, ownership, and specific flags set on the region + return query.testState(location, localPlayer, Flags.BLOCK_BREAK); + } + + +} 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 new file mode 100644 index 0000000..e7fd58b --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java @@ -0,0 +1,105 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +import me.nvus.nvus_prison_setup.Configs.SettingsMenu; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +public class CommandListener implements CommandExecutor { + private final JavaPlugin plugin; + private final ConfigManager configManager; + + public CommandListener(JavaPlugin plugin, ConfigManager configManager) { + this.plugin = plugin; + this.configManager = configManager; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + if (!sender.hasPermission("nvus.admin")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); + return true; + } + + if (args.length == 0) { + sender.sendMessage(ChatColor.RED + "Usage: /nvus [arguments]"); + return true; + } + + switch (args[0].toLowerCase()) { + case "reload": + handleReloadCommand(sender); + break; + case "version": + handleVersionCommand(sender); + break; + case "menu": + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command can only be used by players."); + return true; + } + Player player = (Player) sender; + new SettingsMenu(plugin, configManager).openSettingsMenu(player); + break; + case "autopickup": + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /nvus autopickup "); + return true; + } + handleToggleConfigCommand(sender, "AutoPickup", args[1]); + break; + case "autoswitch": + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /nvus autoswitch "); + return true; + } + handleToggleConfigCommand(sender, "AutoSwitch", args[1]); + break; + case "prisonerarmor": // New case for toggling PrisonerArmor + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /nvus prisonerarmor "); + return true; + } + handleToggleConfigCommand(sender, "PrisonerArmor", args[1]); + break; + + case "restrictarmor": // New case for toggling RestrictArmor + if (args.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /nvus restrictarmor "); + return true; + } + handleToggleConfigCommand(sender, "RestrictArmor", args[1]); + break; + default: + sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help."); + return true; + } + + return true; + } + + private void handleReloadCommand(CommandSender sender) { + configManager.reloadConfig("config.yml"); + configManager.reloadConfig("auto_switch.yml"); + configManager.reloadConfig("banned_items.yml"); + sender.sendMessage(ChatColor.GREEN + "Configuration files reloaded."); + } + + private void handleVersionCommand(CommandSender sender) { + sender.sendMessage(ChatColor.GREEN + "Plugin version: " + plugin.getDescription().getVersion()); + } + + private void handleToggleConfigCommand(CommandSender sender, String key, String value) { + boolean boolValue = Boolean.parseBoolean(value); + FileConfiguration config = configManager.getConfig("config.yml"); + config.set(key, boolValue); + configManager.saveConfig("config.yml"); + sender.sendMessage(ChatColor.GREEN + key + " set to " + boolValue + "."); + } +} 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 new file mode 100644 index 0000000..ea8d888 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerArmor.java @@ -0,0 +1,82 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +public class PlayerArmor implements Listener { + private final ConfigManager configManager; + + public PlayerArmor(ConfigManager configManager) { + this.configManager = configManager; + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + if (player.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor")) { + PlayerInventory inv = player.getInventory(); + inv.setArmorContents(new ItemStack[]{ + createArmor(Material.LEATHER_BOOTS, "Prisoner Boots"), + createArmor(Material.LEATHER_LEGGINGS, "Prisoner Leggings"), + createArmor(Material.LEATHER_CHESTPLATE, "Prisoner Chestplate"), + createArmor(Material.LEATHER_HELMET, "Prisoner Helmet") + }); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYou have been equipped with prisoner armor!")); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onInventoryClick(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + + if (!player.hasPermission("nvus.prisoner")) return; + + if (event.getClickedInventory() != null && (event.getClickedInventory().getType() == InventoryType.PLAYER || event.getClickedInventory().getType() == InventoryType.CRAFTING)) { + if (event.getSlotType() == InventoryType.SlotType.ARMOR || isArmorItem(event.getCurrentItem()) || isArmorItem(event.getCursor())) { + + 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!")); + } + // If restrictArmor is false, allows the player to change armor freely. + } + } + } + + // Checks if the given item is a piece of prisoner armor. + private boolean isArmorItem(ItemStack item) { + if (item == null) { + return false; + } + Material type = item.getType(); + return type == Material.LEATHER_HELMET || type == Material.LEATHER_CHESTPLATE || + type == Material.LEATHER_LEGGINGS || type == Material.LEATHER_BOOTS || + // Add checks for other armor materials if prisoners can have those + type == Material.CHAINMAIL_BOOTS || type == Material.IRON_HELMET; + // We can later add additional armor sets here if we allow customization of what is considered "prisoner armor". + } + + private ItemStack createArmor(Material material, String name) { + ItemStack item = new ItemStack(material); + LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); + if (meta != null) { + meta.setDisplayName(name); + meta.setColor(Color.ORANGE); // Set the color for leather armor + item.setItemMeta(meta); + } + return item; + } +} 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 new file mode 100644 index 0000000..0fb8998 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerItems.java @@ -0,0 +1,60 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +import me.nvus.nvus_prison_setup.PrisonSetup; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class PlayerItems implements Listener { + + private final ConfigManager configManager; + + public PlayerItems(ConfigManager configManager) { + this.configManager = configManager; + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerItemHeld(PlayerItemHeldEvent event) { + Player player = event.getPlayer(); + ItemStack item = player.getInventory().getItem(event.getNewSlot()); + + 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!")); + } + } + } + + + @EventHandler(priority = EventPriority.LOWEST) + public void onInventoryClick(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + ItemStack clickedItem = event.getCurrentItem(); + + // Check if the clicked item is a banned item + if (clickedItem != null && isBannedItem(clickedItem.getType())) { + // Check if the player is a prisoner + 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!")); + } + } + } + + private boolean isBannedItem(Material itemType) { + List bannedItems = configManager.getConfig("banned_items.yml").getStringList("BannedItems"); + + return bannedItems.contains(itemType.toString()); + } +} 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 new file mode 100644 index 0000000..ffc7fdc --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerSpawn.java @@ -0,0 +1,149 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +public class PlayerSpawn implements Listener { + private final ConfigManager configManager; + + public PlayerSpawn(ConfigManager configManager) { + this.configManager = configManager; + } + + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerJoin(PlayerJoinEvent event) { + Player joinedPlayer = event.getPlayer(); + + // Check if the player has the permission and if PrisonerArmor is enabled in config + if (joinedPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", true)) { + equipPrisonerArmor(joinedPlayer); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerDeath(PlayerDeathEvent event) { + Player deadPlayer = event.getEntity(); + + if (deadPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", false)) { + // Remove prisoner armor from the list of dropped items + event.getDrops().removeIf(drop -> isPrisonerArmor(drop.getType())); + } + } + + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerRespawn(PlayerRespawnEvent event) { + Player respawnedPlayer = event.getPlayer(); + + if (respawnedPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", true)) { + equipPrisonerArmor(respawnedPlayer); + } + } + + private void equipPrisonerArmor(Player player) { + // Create Prisoner Helmet + ItemStack leatherHelmetPrison = new ItemStack(Material.LEATHER_HELMET); + LeatherArmorMeta helmetMeta = (LeatherArmorMeta) leatherHelmetPrison.getItemMeta(); + if (helmetMeta != null) { + helmetMeta.setColor(Color.ORANGE); + helmetMeta.setDisplayName(ChatColor.GOLD + "Prisoner Helmet"); + leatherHelmetPrison.setItemMeta(helmetMeta); + } + + // Create Prisoner Chestplate + ItemStack leatherChestplatePrison = new ItemStack(Material.LEATHER_CHESTPLATE); + LeatherArmorMeta chestplateMeta = (LeatherArmorMeta) leatherChestplatePrison.getItemMeta(); + if (chestplateMeta != null) { + chestplateMeta.setColor(Color.ORANGE); + chestplateMeta.setDisplayName(ChatColor.GOLD + "Prisoner Chestplate"); + leatherChestplatePrison.setItemMeta(chestplateMeta); + } + + // Create Prisoner Leggings + ItemStack leatherLeggingsPrison = new ItemStack(Material.LEATHER_LEGGINGS); + LeatherArmorMeta leggingsMeta = (LeatherArmorMeta) leatherLeggingsPrison.getItemMeta(); + if (leggingsMeta != null) { + leggingsMeta.setColor(Color.ORANGE); + leggingsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Leggings"); + leatherLeggingsPrison.setItemMeta(leggingsMeta); + } + + // Create Prisoner Boots + ItemStack leatherBootsPrison = new ItemStack(Material.LEATHER_BOOTS); + LeatherArmorMeta bootsMeta = (LeatherArmorMeta) leatherBootsPrison.getItemMeta(); + if (bootsMeta != null) { + bootsMeta.setColor(Color.ORANGE); + bootsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Boots"); + leatherBootsPrison.setItemMeta(bootsMeta); + } + + // Equip Prisoner Armor + player.getInventory().setHelmet(leatherHelmetPrison); + player.getInventory().setChestplate(leatherChestplatePrison); + 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!")); + } + + + // Destroy armor upon death etc. + private void destroyDefaultPrisonerArmor(Player player) { + player.getInventory().setHelmet(null); + player.getInventory().setChestplate(null); + player.getInventory().setLeggings(null); + player.getInventory().setBoots(null); + + // Using this as a debug/check, will comment out later! + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYour default prisoner armor has been destroyed!")); + } + + private boolean isPrisonerArmor(Material material) { + return material == Material.LEATHER_HELMET || + material == Material.LEATHER_CHESTPLATE || + material == Material.LEATHER_LEGGINGS || + material == Material.LEATHER_BOOTS; + } + + + + + /* + private void destroyDefaultPrisonerArmor(Player player) { + player.getInventory().setHelmet(null); + player.getInventory().setChestplate(null); + player.getInventory().setLeggings(null); + player.getInventory().setBoots(null); + + // Using this as a debug/check, will comment out later! + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYour default prisoner armor has been destroyed!")); + } + */ + + /* + // Destroy armor upon death etc. + private void destroyDefaultPrisonerArmor(Player player) { + // Loop through the armor slots and remove any armor pieces + for (ItemStack armor : player.getInventory().getArmorContents()) { + if (armor != null && armor.getType() != Material.AIR) { + player.getInventory().remove(armor); + } + } + + // Using this as a debug/check, will comment out later! + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYour default prisoner armor has been destroyed!")); + } + */ +} 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 new file mode 100644 index 0000000..5280d28 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/ToolSwitchListener.java @@ -0,0 +1,88 @@ +package me.nvus.nvus_prison_setup.Listeners; + +import me.nvus.nvus_prison_setup.Configs.ConfigManager; +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.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import java.util.List; +import java.util.stream.Collectors; + +public class ToolSwitchListener implements Listener { + private final ConfigManager configManager; + + public ToolSwitchListener(ConfigManager configManager) { + this.configManager = configManager; + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() != org.bukkit.event.block.Action.LEFT_CLICK_BLOCK) return; + + Player player = event.getPlayer(); + FileConfiguration mainConfig = configManager.getConfig("config.yml"); + FileConfiguration autoSwitchConfig = configManager.getConfig("auto_switch.yml"); + + if (!player.hasPermission("nvus.prisoner") || !mainConfig.getBoolean("AutoSwitch", true)) return; + + Material blockType = event.getClickedBlock().getType(); + + Material bestTool = determineBestTool(blockType, player, mainConfig, autoSwitchConfig); + if (bestTool != null) { + switchToTool(player, bestTool); + } + } + + private Material determineBestTool(Material blockType, Player player, FileConfiguration mainConfig, FileConfiguration autoSwitchConfig) { + List prisonTools = mainConfig.getStringList("PrisonerTools"); + + // 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); + + if (requiredTool != null && prisonTools.contains(requiredTool.toString())) { + return findBestToolInInventory(requiredTool, player); + } + + 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; + } + 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 convertStringListToMaterial(List stringList) { + return stringList.stream().map(Material::valueOf).collect(Collectors.toList()); + } + + private void switchToTool(Player player, Material tool) { + PlayerInventory inventory = player.getInventory(); + int toolSlot = inventory.first(tool); + if (toolSlot >= 0 && toolSlot < 9) { // If the tool is in the quickbar + inventory.setHeldItemSlot(toolSlot); + } + } +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java new file mode 100644 index 0000000..3a5fb78 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java @@ -0,0 +1,76 @@ +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.Configs.SettingsMenu; +import me.nvus.nvus_prison_setup.Listeners.PlayerArmor; +import me.nvus.nvus_prison_setup.Listeners.PlayerItems; +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 org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.ChatColor; +import org.bukkit.plugin.java.JavaPlugin; + +public final class PrisonSetup extends JavaPlugin { + + private ConfigManager configManager; + + @Override + public void onEnable() { + // Initialize the ConfigManager + configManager = new ConfigManager(this); + + // Save the default configs, if they doesn't exist + configManager.saveDefaultConfig("config.yml"); + configManager.saveDefaultConfig("banned_items.yml"); + configManager.saveDefaultConfig("auto_switch.yml"); + + // Register event listeners + getServer().getPluginManager().registerEvents(new PlayerSpawn(configManager), this); + getServer().getPluginManager().registerEvents(new PlayerArmor(configManager), this); + getServer().getPluginManager().registerEvents(new PlayerItems(configManager), this); + getServer().getPluginManager().registerEvents(new BlockListener(this), this); + getServer().getPluginManager().registerEvents(new ToolSwitchListener(configManager), this); + this.getCommand("nvus").setExecutor(new CommandListener(this, configManager)); + //new SettingsMenu(this, configManager); + getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this); + + getLogger().info(ChatColor.translateAlternateColorCodes('&',"&a&lNVus Prison Setup has been successfully enabled!")); + + new UpdateChecker(this, 12345).getVersion(version -> { + if (!this.getDescription().getVersion().equals(version)) { + getLogger().info("There is a new update available for NVus Prison Setup! Grab it from SpigotMC here: https://www.spigotmc.org/resources/nvus-prison-setup.115441/"); + + Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.isOp() || player.hasPermission("nvus.admin")) { + player.sendMessage(ChatColor.RED + "====================================================="); + player.sendMessage(ChatColor.YELLOW + "An update for NVus Prison Setup is available! Grab it from SpigotMC here: https://www.spigotmc.org/resources/nvus-prison-setup.115441/"); + player.sendMessage(ChatColor.RED + "====================================================="); + } + } + }, 20L * 60); + } + }); + + } + + + @Override + public void onDisable() { + // Save the config when disabling the plugin + configManager.saveConfig("config.yml"); + configManager.saveConfig("banned_items.yml"); + configManager.saveConfig("auto_switch.yml"); + + // Log a success message + getLogger().info(ChatColor.translateAlternateColorCodes('&',"&c&lNVus Prison Setup has been successfully disabled!")); + } + + public ConfigManager getConfigManager() { + return configManager; + } +} diff --git a/src/main/java/me/nvus/nvus_prison_setup/Updater/UpdateChecker.java b/src/main/java/me/nvus/nvus_prison_setup/Updater/UpdateChecker.java new file mode 100644 index 0000000..99bb616 --- /dev/null +++ b/src/main/java/me/nvus/nvus_prison_setup/Updater/UpdateChecker.java @@ -0,0 +1,34 @@ +package me.nvus.nvus_prison_setup.Updater; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Scanner; +import java.util.function.Consumer; + +// From: https://www.spigotmc.org/wiki/creating-an-update-checker-that-checks-for-updates +public class UpdateChecker { + + private final JavaPlugin plugin; + private final int resourceId; + + public UpdateChecker(JavaPlugin plugin, int resourceId) { + this.plugin = plugin; + this.resourceId = 115441; + } + + public void getVersion(final Consumer consumer) { + Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { + try (InputStream is = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + this.resourceId + "/~").openStream(); Scanner scann = new Scanner(is)) { + if (scann.hasNext()) { + consumer.accept(scann.next()); + } + } catch (IOException e) { + plugin.getLogger().info("Unable to check for DecorativeEndGateway updates: " + e.getMessage()); + } + }); + } +} diff --git a/src/main/resources/auto_switch.yml b/src/main/resources/auto_switch.yml new file mode 100644 index 0000000..40ee206 --- /dev/null +++ b/src/main/resources/auto_switch.yml @@ -0,0 +1,57 @@ +#======================================================================================# +# NVus PRISON SETUP # +# by never2nv # +# www.FNGnation.net # +# Discord: FNGnation.net/discord # +#======================================================================================# + +# What blocks/ores should cause the prisoner to auto switch to a pickaxe? +PickaxeMaterials: + - STONE + - COBBLESTONE + - ANDESITE + - DIORITE + - GRANITE + - NETHERRACK + - END_STONE + - SANDSTONE + - RED_SANDSTONE + - OBSIDIAN +# Here's all the ORES that will trigger switching to a piacke: + - COAL_ORE + - IRON_ORE + - GOLD_ORE + - DIAMOND_ORE + - LAPIS_ORE + - REDSTONE_ORE + - EMERALD_ORE + - NETHER_QUARTZ_ORE + - ANCIENT_DEBRIS + +# What blocks should cause the prisoner to auto switch to an axe? +AxeMaterials: + - OAK_LOG + - OAK_PLANKS + - BIRCH_LOG + - BIRCH_PLANKS + - SPRUCE_LOG + - SPRUCE_PLANKS + - JUNGLE_LOG + - JUNGLE_PLANKS + - ACACIA_LOG + - ACACIA_PLANKS + - DARK_OAK_LOG + - DARK_OAK_PLANKS + +# What blocks should cause the prisoner to auto switch to a shovel? +ShovelMaterials: + - GRASS_BLOCK + - DIRT + - COARSE_DIRT + - PODZOL + - SAND + - RED_SAND + - GRAVEL + - CLAY + - SNOW + - SNOW_BLOCK \ No newline at end of file diff --git a/src/main/resources/banned_items.yml b/src/main/resources/banned_items.yml new file mode 100644 index 0000000..8bd5694 --- /dev/null +++ b/src/main/resources/banned_items.yml @@ -0,0 +1,14 @@ +#======================================================================================# +# NVus PRISON SETUP # +# by never2nv # +# www.FNGnation.net # +# Discord: FNGnation.net/discord # +#======================================================================================# + + +# Place Item(s) here that prisoners should never be able to equip in their hands or move into their quickbar +# Remember to give all prisoner ranks/groups the permission ' nvus.prisoner ' and negate that permission for any +# players that are not or no longer considered a prisoner. +BannedItems: + - DIAMOND_PICKAXE + - NETHERITE_PICKAXE \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..8a2422e --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,31 @@ +#======================================================================================# +# NVus PRISON SETUP # +# by never2nv # +# www.FNGnation.net # +# Discord: FNGnation.net/discord # +#======================================================================================# +# Remember to give prisoner ranks/groups the permission ' nvus.prisoner ' and negate that permission for any +# players that are not or no longer considered a prisoner. + +# Should prisoners auto pickup blocks they have mined? +# Use /nvus autopickup true|false to toggle this in-game! (Requires permission: nvus.admin) +# DO NOT TURN THIS ON WHEN RUNNING THIS PLUGIN ON A LIVE/PRODUCTION SERVER! There may be bugs! +AutoPickup: false +# Should prisoners be able to auto switch to the correct tool for whatever they are mining? +#i.e. If hitting dirt/clay with a pickaxe, they will auto switch to a shovel (if in their quickbar) +# Use /nvus autoswitch true|false to toggle this in-game! (Requires permission: nvus.admin) +AutoSwitch: true + +# Should prisoners be given a default prisoner armor set (orange leather armor) when they join the server? +PrisonerArmor: true +# Should prisoners be able to remove/change their default prisoner armor? +RestrictArmor: true + +# What tools are considered Prisoner Tools? These are used for the ToolDamage toggle and for auto switching feature! +# See auto_switch.yml to set up which blocks trigger the auto switch to these tools. +PrisonerTools: + - IRON_PICKAXE + - IRON_AXE + - IRON_SHOVEL +# When set to FALSE it will prevent Prisoner Tools from receiving damage when mining etc. +ToolDamage: false diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..1d81f11 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,23 @@ +name: NVus_PrisonSetup +version: '${project.version}' +main: me.nvus.nvus_prison_setup.PrisonSetup +api-version: '1.20' +prefix: NVus Prison +authors: [never2nv] +website: https://FNGnation.net + +depends: + - WorldGuard + +commands: + nvus: + description: Base command to view NVus Prison Setup commands. + usage: | + /nvus reload - Reloads all configuration files. + /nvus version - Shows the plugin version. + /nvus menu - Opens the settings menu (player only). + /nvus autopickup - Toggles the auto item pickup feature. + /nvus autoswitch - Toggles the auto tool switch feature. + /nvus prisonerarmor - Toggles giving prisoners armor on join. + /nvus restrictarmor - Toggles the restriction on changing prisoner armor. + aliases: [nvusmenu]