From 900e2ca0eda0f6d18c5ef8be40e8a80d711d610a Mon Sep 17 00:00:00 2001
From: WildInterloper <156627888+WildInterloper@users.noreply.github.com>
Date: Sat, 9 Mar 2024 14:43:09 -0500
Subject: [PATCH] Added update checker
---
.idea/jarRepositories.xml | 5 ++
pom.xml | 37 ++++++++-
.../Configs/SettingsMenu.java | 78 ++++++++++++-------
.../Listeners/BlockListener.java | 77 ++++++++++++++++--
.../Listeners/CommandListener.java | 15 ++++
.../Listeners/PlayerArmor.java | 69 +++++++++++++---
.../Listeners/PlayerSpawn.java | 63 +++++++++------
.../nvus/nvus_prison_setup/PrisonSetup.java | 28 ++++++-
.../Updater/UpdateChecker.java | 34 ++++++++
src/main/resources/config.yml | 8 +-
src/main/resources/plugin.yml | 15 +++-
11 files changed, 356 insertions(+), 73 deletions(-)
create mode 100644 src/main/java/me/nvus/nvus_prison_setup/Updater/UpdateChecker.java
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 8c89be5..cf12048 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,5 +26,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ac30e88..c1491d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,13 +6,15 @@
me.NVus
NVus_Prison_Setup
- 0.6.6
+ 0.7.5
jar
NVus_PrisonSetup
- 1.8
+ 17
+ 17
+ 17
UTF-8
https://FNGnation.net
@@ -90,8 +92,24 @@
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
@@ -99,7 +117,20 @@
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/SettingsMenu.java b/src/main/java/me/nvus/nvus_prison_setup/Configs/SettingsMenu.java
index d962418..30aba15 100644
--- a/src/main/java/me/nvus/nvus_prison_setup/Configs/SettingsMenu.java
+++ b/src/main/java/me/nvus/nvus_prison_setup/Configs/SettingsMenu.java
@@ -14,12 +14,15 @@ 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 HashMap lastClickTime = new HashMap<>();
+ private final Map> playerTasks = new ConcurrentHashMap<>();
public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) {
this.plugin = plugin;
@@ -29,14 +32,13 @@ public class SettingsMenu implements Listener {
public void openSettingsMenu(Player player) {
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Settings Menu");
-
- // Retrieve configurations directly using ConfigManager
FileConfiguration config = configManager.getConfig("config.yml");
- // Toggle items with dynamic status from config
+ 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(5, createItem(Material.BOOK, ChatColor.GREEN + "Reload Configs"));
+ inv.setItem(7, createItem(Material.BOOK, ChatColor.GREEN + "Reload Configs"));
player.openInventory(inv);
}
@@ -59,47 +61,69 @@ public class SettingsMenu implements Listener {
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
- if (!event.getView().getTitle().equals(ChatColor.DARK_RED + "NVus Prison Settings")) return;
+ if (!event.getView().getTitle().equals(ChatColor.DARK_GREEN + "Settings Menu")) return;
event.setCancelled(true);
Player player = (Player) event.getWhoClicked();
UUID playerUUID = player.getUniqueId();
- // Implement cooldown check
- long lastClick = lastClickTime.getOrDefault(playerUUID, 0L);
- long currentTime = System.currentTimeMillis();
- if (currentTime - lastClick < 500) return; // 500 ms cooldown
- lastClickTime.put(playerUUID, currentTime);
+ // 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()) return;
-
- String displayName = clickedItem.getItemMeta().getDisplayName();
-
- 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);
+ if (clickedItem == null || !clickedItem.hasItemMeta() || !clickedItem.getItemMeta().hasDisplayName()) {
+ return;
}
+
+ String displayName = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
+ scheduleConfigToggle(playerUUID, displayName);
}
- private void toggleConfigOption(Player player, String configKey) {
+ 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");
- player.sendMessage(ChatColor.GREEN + configKey + " " + (!currentValue ? "enabled" : "disabled"));
- openSettingsMenu(player); // Refresh the inventory to reflect the change
+ // Debug message
+ //player.sendMessage(ChatColor.GREEN + configKey + " " + (!currentValue ? "enabled" : "disabled"));
+
+
}
- private void reloadConfigs(Player player) {
+
+ private void reloadConfigs(final Player player) {
configManager.reloadConfig("config.yml");
configManager.reloadConfig("auto_switch.yml");
configManager.reloadConfig("banned_items.yml");
- configManager.saveConfig("config.yml"); // Ensure any changes are saved before reload
+ configManager.saveConfig("config.yml");
player.sendMessage(ChatColor.GREEN + "Configuration files reloaded.");
- openSettingsMenu(player); // Refresh the inventory
}
}
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 1b6b939..226cd94 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
@@ -1,35 +1,81 @@
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
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock();
- // Check if the player is a prisoner and auto-pickup is enabled
+ 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 = Arrays.asList(block.getDrops().toArray(new ItemStack[0]));
+ List drops = block.getDrops().stream().toList();
for (ItemStack drop : drops) {
if (player.getInventory().addItem(drop).isEmpty()) {
- // Inventory has enough space, remove the dropped item
+
event.setDropItems(false);
} else {
// Inventory is full, drop the item on the ground
@@ -39,4 +85,25 @@ public class BlockListener implements Listener {
}
}
}
+
+ 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
index a0bfdff..e7fd58b 100644
--- a/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java
+++ b/src/main/java/me/nvus/nvus_prison_setup/Listeners/CommandListener.java
@@ -61,6 +61,21 @@ public class CommandListener implements CommandExecutor {
}
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;
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 6db2da1..ea8d888 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
@@ -1,31 +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!"));
+ }
+ }
- // Prevent Armor Unequip??
@EventHandler(priority = EventPriority.LOWEST)
public void onInventoryClick(InventoryClickEvent event) {
- if (event.getClickedInventory() != null && event.getClickedInventory().getType() == InventoryType.PLAYER) {
- if (event.getSlotType() == InventoryType.SlotType.ARMOR) {
- Player player = (Player) event.getWhoClicked();
- // Check if the player is an actual prisoner before cancelling ;)
- if (player.hasPermission("nvus.prisoner")) {
+ 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!"));
+ 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/PlayerSpawn.java b/src/main/java/me/nvus/nvus_prison_setup/Listeners/PlayerSpawn.java
index a9c072f..ffc7fdc 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
@@ -1,75 +1,93 @@
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.entity.PlayerDeathEvent;
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;
- @EventHandler(priority = EventPriority.LOWEST)
+ 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
- if (joinedPlayer.hasPermission("nvus.prisoner")) {
- // Create and equip prisoner armor
+ // 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.LOWEST)
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerDeath(PlayerDeathEvent event) {
Player deadPlayer = event.getEntity();
- // Check if the player has the permission
- if (deadPlayer.hasPermission("nvus.prisoner")) {
+ 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.LOWEST)
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerRespawn(PlayerRespawnEvent event) {
Player respawnedPlayer = event.getPlayer();
- // Check if the player has the permission
- if (respawnedPlayer.hasPermission("nvus.prisoner")) {
- // Create and equip prisoner armor
+ if (respawnedPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", true)) {
equipPrisonerArmor(respawnedPlayer);
}
}
private void equipPrisonerArmor(Player player) {
- // Create Prisoner Armor
+ // Create Prisoner Helmet
ItemStack leatherHelmetPrison = new ItemStack(Material.LEATHER_HELMET);
LeatherArmorMeta helmetMeta = (LeatherArmorMeta) leatherHelmetPrison.getItemMeta();
- helmetMeta.setColor(Color.ORANGE);
- leatherHelmetPrison.setItemMeta(helmetMeta);
+ 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();
- chestplateMeta.setColor(Color.ORANGE);
- leatherChestplatePrison.setItemMeta(chestplateMeta);
+ 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();
- leggingsMeta.setColor(Color.ORANGE);
- leatherLeggingsPrison.setItemMeta(leggingsMeta);
+ 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();
- bootsMeta.setColor(Color.ORANGE);
- leatherBootsPrison.setItemMeta(bootsMeta);
+ if (bootsMeta != null) {
+ bootsMeta.setColor(Color.ORANGE);
+ bootsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Boots");
+ leatherBootsPrison.setItemMeta(bootsMeta);
+ }
// Equip Prisoner Armor
player.getInventory().setHelmet(leatherHelmetPrison);
@@ -77,9 +95,10 @@ 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('&', "&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);
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 7cabae2..3a5fb78 100644
--- a/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java
+++ b/src/main/java/me/nvus/nvus_prison_setup/PrisonSetup.java
@@ -8,6 +8,9 @@ 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;
@@ -26,16 +29,33 @@ public final class PrisonSetup extends JavaPlugin {
configManager.saveDefaultConfig("auto_switch.yml");
// Register event listeners
- getServer().getPluginManager().registerEvents(new PlayerSpawn(), this);
- getServer().getPluginManager().registerEvents(new PlayerArmor(), this);
+ 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);
-
+ //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);
+ }
+ });
+
}
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/config.yml b/src/main/resources/config.yml
index 02cf968..dc7bf3b 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -9,8 +9,14 @@
# Should prisoners auto pickup blocks they have mined?
# Use /nvus autopickup true|false to toggle this in-game! (Requires permission: nvus.admin)
-AutoPickup: true
+# 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
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 08505a2..1d81f11 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -5,8 +5,19 @@ api-version: '1.20'
prefix: NVus Prison
authors: [never2nv]
website: https://FNGnation.net
+
+depends:
+ - WorldGuard
+
commands:
nvus:
- description: Base command for NVus Prison Setup
- usage: / [arguments]
+ 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]