Added update checker

This commit is contained in:
WildInterloper 2024-03-09 14:43:09 -05:00
parent b2ec19387f
commit 900e2ca0ed
11 changed files with 356 additions and 73 deletions

View File

@ -26,5 +26,10 @@
<option name="name" value="JBoss Community repository" /> <option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="enginehub" />
<option name="name" value="enginehub" />
<option name="url" value="https://maven.enginehub.org/repo/" />
</remote-repository>
</component> </component>
</project> </project>

35
pom.xml
View File

@ -6,13 +6,15 @@
<groupId>me.NVus</groupId> <groupId>me.NVus</groupId>
<artifactId>NVus_Prison_Setup</artifactId> <artifactId>NVus_Prison_Setup</artifactId>
<version>0.6.6</version> <version>0.7.5</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>NVus_PrisonSetup</name> <name>NVus_PrisonSetup</name>
<properties> <properties>
<java.version>1.8</java.version> <java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<url>https://FNGnation.net</url> <url>https://FNGnation.net</url>
@ -90,8 +92,24 @@
<id>sonatype</id> <id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url> <url>https://oss.sonatype.org/content/groups/public/</url>
</repository> </repository>
<repository>
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</repositories> </repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intellectualsites.bom</groupId>
<artifactId>bom-newest</artifactId> <!-- Ref: https://github.com/IntellectualSites/bom -->
<version>1.42</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>io.papermc.paper</groupId> <groupId>io.papermc.paper</groupId>
@ -99,6 +117,19 @@
<version>1.20.4-R0.1-SNAPSHOT</version> <version>1.20.4-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fastasyncworldedit</groupId>
<artifactId>FastAsyncWorldEdit-Core</artifactId>
<scope>provided</scope>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.github.wvengen</groupId>--> <!-- <groupId>com.github.wvengen</groupId>-->
<!-- <artifactId>proguard-maven-plugin</artifactId>--> <!-- <artifactId>proguard-maven-plugin</artifactId>-->

View File

@ -14,12 +14,15 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
public class SettingsMenu implements Listener { public class SettingsMenu implements Listener {
private final JavaPlugin plugin; private final JavaPlugin plugin;
private final ConfigManager configManager; private final ConfigManager configManager;
private final HashMap<UUID, Long> lastClickTime = new HashMap<>(); private final Map<UUID, Consumer<Player>> playerTasks = new ConcurrentHashMap<>();
public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) { public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) {
this.plugin = plugin; this.plugin = plugin;
@ -29,14 +32,13 @@ public class SettingsMenu implements Listener {
public void openSettingsMenu(Player player) { public void openSettingsMenu(Player player) {
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Settings Menu"); Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Settings Menu");
// Retrieve configurations directly using ConfigManager
FileConfiguration config = configManager.getConfig("config.yml"); 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(3, createToggleItem(Material.HOPPER, "Toggle AutoPickup", config.getBoolean("AutoPickup", false)));
inv.setItem(4, createToggleItem(Material.LEVER, "Toggle AutoSwitch", config.getBoolean("AutoSwitch", 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); player.openInventory(inv);
} }
@ -59,47 +61,69 @@ public class SettingsMenu implements Listener {
@EventHandler @EventHandler
public void onInventoryClick(InventoryClickEvent event) { 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); event.setCancelled(true);
Player player = (Player) event.getWhoClicked(); Player player = (Player) event.getWhoClicked();
UUID playerUUID = player.getUniqueId(); UUID playerUUID = player.getUniqueId();
// Implement cooldown check // Execute any pending tasks for this player before processing a new one
long lastClick = lastClickTime.getOrDefault(playerUUID, 0L); playerTasks.computeIfPresent(playerUUID, (uuid, task) -> {
long currentTime = System.currentTimeMillis(); Bukkit.getScheduler().runTask(plugin, () -> task.accept(player));
if (currentTime - lastClick < 500) return; // 500 ms cooldown return null;
lastClickTime.put(playerUUID, currentTime); });
ItemStack clickedItem = event.getCurrentItem(); ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null || !clickedItem.hasItemMeta()) return; if (clickedItem == null || !clickedItem.hasItemMeta() || !clickedItem.getItemMeta().hasDisplayName()) {
return;
}
String displayName = clickedItem.getItemMeta().getDisplayName(); String displayName = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
scheduleConfigToggle(playerUUID, displayName);
}
if (displayName.contains("Toggle AutoPickup")) { private void scheduleConfigToggle(UUID playerUUID, String displayName) {
Consumer<Player> 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"); toggleConfigOption(player, "AutoPickup");
} else if (displayName.contains("Toggle AutoSwitch")) { } else if (displayName.contains("Toggle AutoSwitch")) {
toggleConfigOption(player, "AutoSwitch"); toggleConfigOption(player, "AutoSwitch");
} else if (displayName.contains("Reload Configs")) { } else if (displayName.contains("Reload Configs")) {
reloadConfigs(player); reloadConfigs(player);
} }
};
playerTasks.put(playerUUID, task);
} }
private void toggleConfigOption(Player player, String configKey) { 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"); FileConfiguration config = configManager.getConfig("config.yml");
boolean currentValue = config.getBoolean(configKey, false); boolean currentValue = config.getBoolean(configKey, false);
config.set(configKey, !currentValue); config.set(configKey, !currentValue);
configManager.saveConfig("config.yml"); configManager.saveConfig("config.yml");
player.sendMessage(ChatColor.GREEN + configKey + " " + (!currentValue ? "enabled" : "disabled")); // Debug message
openSettingsMenu(player); // Refresh the inventory to reflect the change //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("config.yml");
configManager.reloadConfig("auto_switch.yml"); configManager.reloadConfig("auto_switch.yml");
configManager.reloadConfig("banned_items.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."); player.sendMessage(ChatColor.GREEN + "Configuration files reloaded.");
openSettingsMenu(player); // Refresh the inventory
} }
} }

View File

@ -1,35 +1,81 @@
package me.nvus.nvus_prison_setup.Listeners; 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 me.nvus.nvus_prison_setup.PrisonSetup;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
public class BlockListener implements Listener { public class BlockListener implements Listener {
private final PrisonSetup plugin; private final PrisonSetup plugin;
private final Set<Material> 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) { public BlockListener(PrisonSetup plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
@EventHandler @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
Block block = event.getBlock(); 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")) { if (player.hasPermission("nvus.prisoner") && plugin.getConfigManager().getConfig("config.yml").getBoolean("AutoPickup")) {
List<ItemStack> drops = Arrays.asList(block.getDrops().toArray(new ItemStack[0])); List<ItemStack> drops = block.getDrops().stream().toList();
for (ItemStack drop : drops) { for (ItemStack drop : drops) {
if (player.getInventory().addItem(drop).isEmpty()) { if (player.getInventory().addItem(drop).isEmpty()) {
// Inventory has enough space, remove the dropped item
event.setDropItems(false); event.setDropItems(false);
} else { } else {
// Inventory is full, drop the item on the ground // 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);
}
} }

View File

@ -61,6 +61,21 @@ public class CommandListener implements CommandExecutor {
} }
handleToggleConfigCommand(sender, "AutoSwitch", args[1]); handleToggleConfigCommand(sender, "AutoSwitch", args[1]);
break; break;
case "prisonerarmor": // New case for toggling PrisonerArmor
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "Usage: /nvus prisonerarmor <true|false>");
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 <true|false>");
return true;
}
handleToggleConfigCommand(sender, "RestrictArmor", args[1]);
break;
default: default:
sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help."); sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help.");
return true; return true;

View File

@ -1,31 +1,82 @@
package me.nvus.nvus_prison_setup.Listeners; package me.nvus.nvus_prison_setup.Listeners;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType; 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 { 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) @EventHandler(priority = EventPriority.LOWEST)
public void onInventoryClick(InventoryClickEvent event) { 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(); Player player = (Player) event.getWhoClicked();
// Check if the player is an actual prisoner before cancelling ;)
if (player.hasPermission("nvus.prisoner")) { 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); 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;
}
} }

View File

@ -1,75 +1,93 @@
package me.nvus.nvus_prison_setup.Listeners; package me.nvus.nvus_prison_setup.Listeners;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.LeatherArmorMeta;
public class PlayerSpawn implements Listener { 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) { public void onPlayerJoin(PlayerJoinEvent event) {
Player joinedPlayer = event.getPlayer(); Player joinedPlayer = event.getPlayer();
// Check if the player has the permission // Check if the player has the permission and if PrisonerArmor is enabled in config
if (joinedPlayer.hasPermission("nvus.prisoner")) { if (joinedPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", true)) {
// Create and equip prisoner armor
equipPrisonerArmor(joinedPlayer); equipPrisonerArmor(joinedPlayer);
} }
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerDeath(PlayerDeathEvent event) { public void onPlayerDeath(PlayerDeathEvent event) {
Player deadPlayer = event.getEntity(); Player deadPlayer = event.getEntity();
// Check if the player has the permission if (deadPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", false)) {
if (deadPlayer.hasPermission("nvus.prisoner")) {
// Remove prisoner armor from the list of dropped items // Remove prisoner armor from the list of dropped items
event.getDrops().removeIf(drop -> isPrisonerArmor(drop.getType())); event.getDrops().removeIf(drop -> isPrisonerArmor(drop.getType()));
} }
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerRespawn(PlayerRespawnEvent event) { public void onPlayerRespawn(PlayerRespawnEvent event) {
Player respawnedPlayer = event.getPlayer(); Player respawnedPlayer = event.getPlayer();
// Check if the player has the permission if (respawnedPlayer.hasPermission("nvus.prisoner") && configManager.getConfig("config.yml").getBoolean("PrisonerArmor", true)) {
if (respawnedPlayer.hasPermission("nvus.prisoner")) {
// Create and equip prisoner armor
equipPrisonerArmor(respawnedPlayer); equipPrisonerArmor(respawnedPlayer);
} }
} }
private void equipPrisonerArmor(Player player) { private void equipPrisonerArmor(Player player) {
// Create Prisoner Armor // Create Prisoner Helmet
ItemStack leatherHelmetPrison = new ItemStack(Material.LEATHER_HELMET); ItemStack leatherHelmetPrison = new ItemStack(Material.LEATHER_HELMET);
LeatherArmorMeta helmetMeta = (LeatherArmorMeta) leatherHelmetPrison.getItemMeta(); LeatherArmorMeta helmetMeta = (LeatherArmorMeta) leatherHelmetPrison.getItemMeta();
if (helmetMeta != null) {
helmetMeta.setColor(Color.ORANGE); helmetMeta.setColor(Color.ORANGE);
helmetMeta.setDisplayName(ChatColor.GOLD + "Prisoner Helmet");
leatherHelmetPrison.setItemMeta(helmetMeta); leatherHelmetPrison.setItemMeta(helmetMeta);
}
// Create Prisoner Chestplate
ItemStack leatherChestplatePrison = new ItemStack(Material.LEATHER_CHESTPLATE); ItemStack leatherChestplatePrison = new ItemStack(Material.LEATHER_CHESTPLATE);
LeatherArmorMeta chestplateMeta = (LeatherArmorMeta) leatherChestplatePrison.getItemMeta(); LeatherArmorMeta chestplateMeta = (LeatherArmorMeta) leatherChestplatePrison.getItemMeta();
if (chestplateMeta != null) {
chestplateMeta.setColor(Color.ORANGE); chestplateMeta.setColor(Color.ORANGE);
chestplateMeta.setDisplayName(ChatColor.GOLD + "Prisoner Chestplate");
leatherChestplatePrison.setItemMeta(chestplateMeta); leatherChestplatePrison.setItemMeta(chestplateMeta);
}
// Create Prisoner Leggings
ItemStack leatherLeggingsPrison = new ItemStack(Material.LEATHER_LEGGINGS); ItemStack leatherLeggingsPrison = new ItemStack(Material.LEATHER_LEGGINGS);
LeatherArmorMeta leggingsMeta = (LeatherArmorMeta) leatherLeggingsPrison.getItemMeta(); LeatherArmorMeta leggingsMeta = (LeatherArmorMeta) leatherLeggingsPrison.getItemMeta();
if (leggingsMeta != null) {
leggingsMeta.setColor(Color.ORANGE); leggingsMeta.setColor(Color.ORANGE);
leggingsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Leggings");
leatherLeggingsPrison.setItemMeta(leggingsMeta); leatherLeggingsPrison.setItemMeta(leggingsMeta);
}
// Create Prisoner Boots
ItemStack leatherBootsPrison = new ItemStack(Material.LEATHER_BOOTS); ItemStack leatherBootsPrison = new ItemStack(Material.LEATHER_BOOTS);
LeatherArmorMeta bootsMeta = (LeatherArmorMeta) leatherBootsPrison.getItemMeta(); LeatherArmorMeta bootsMeta = (LeatherArmorMeta) leatherBootsPrison.getItemMeta();
if (bootsMeta != null) {
bootsMeta.setColor(Color.ORANGE); bootsMeta.setColor(Color.ORANGE);
bootsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Boots");
leatherBootsPrison.setItemMeta(bootsMeta); leatherBootsPrison.setItemMeta(bootsMeta);
}
// Equip Prisoner Armor // Equip Prisoner Armor
player.getInventory().setHelmet(leatherHelmetPrison); player.getInventory().setHelmet(leatherHelmetPrison);
@ -80,6 +98,7 @@ public class PlayerSpawn implements Listener {
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. // Destroy armor upon death etc.
private void destroyDefaultPrisonerArmor(Player player) { private void destroyDefaultPrisonerArmor(Player player) {
player.getInventory().setHelmet(null); player.getInventory().setHelmet(null);

View File

@ -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.PlayerSpawn;
import me.nvus.nvus_prison_setup.Listeners.BlockListener; import me.nvus.nvus_prison_setup.Listeners.BlockListener;
import me.nvus.nvus_prison_setup.Listeners.ToolSwitchListener; 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.ChatColor;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -26,16 +29,33 @@ public final class PrisonSetup extends JavaPlugin {
configManager.saveDefaultConfig("auto_switch.yml"); configManager.saveDefaultConfig("auto_switch.yml");
// Register event listeners // Register event listeners
getServer().getPluginManager().registerEvents(new PlayerSpawn(), this); getServer().getPluginManager().registerEvents(new PlayerSpawn(configManager), this);
getServer().getPluginManager().registerEvents(new PlayerArmor(), this); getServer().getPluginManager().registerEvents(new PlayerArmor(configManager), this);
getServer().getPluginManager().registerEvents(new PlayerItems(configManager), this); getServer().getPluginManager().registerEvents(new PlayerItems(configManager), this);
getServer().getPluginManager().registerEvents(new BlockListener(this), this); getServer().getPluginManager().registerEvents(new BlockListener(this), this);
getServer().getPluginManager().registerEvents(new ToolSwitchListener(configManager), this); getServer().getPluginManager().registerEvents(new ToolSwitchListener(configManager), this);
this.getCommand("nvus").setExecutor(new CommandListener(this, configManager)); 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!")); 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);
}
});
} }

View File

@ -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<String> 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());
}
});
}
}

View File

@ -9,8 +9,14 @@
# Should prisoners auto pickup blocks they have mined? # Should prisoners auto pickup blocks they have mined?
# Use /nvus autopickup true|false to toggle this in-game! (Requires permission: nvus.admin) # 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? # 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) #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) # Use /nvus autoswitch true|false to toggle this in-game! (Requires permission: nvus.admin)
AutoSwitch: true 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

View File

@ -5,8 +5,19 @@ api-version: '1.20'
prefix: NVus Prison prefix: NVus Prison
authors: [never2nv] authors: [never2nv]
website: https://FNGnation.net website: https://FNGnation.net
depends:
- WorldGuard
commands: commands:
nvus: nvus:
description: Base command for NVus Prison Setup description: Base command to view NVus Prison Setup commands.
usage: /<command> <reload|version|autopickup|autoswitch|menu> [arguments] usage: |
/nvus reload - Reloads all configuration files.
/nvus version - Shows the plugin version.
/nvus menu - Opens the settings menu (player only).
/nvus autopickup <true|false> - Toggles the auto item pickup feature.
/nvus autoswitch <true|false> - Toggles the auto tool switch feature.
/nvus prisonerarmor <true|false> - Toggles giving prisoners armor on join.
/nvus restrictarmor <true|false> - Toggles the restriction on changing prisoner armor.
aliases: [nvusmenu] aliases: [nvusmenu]