Added update checker
This commit is contained in:
parent
b2ec19387f
commit
900e2ca0ed
|
@ -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>
|
37
pom.xml
37
pom.xml
|
@ -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,7 +117,20 @@
|
||||||
<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>-->
|
<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>-->
|
||||||
<!-- <groupId>com.github.wvengen</groupId>-->
|
<!-- <groupId>com.github.wvengen</groupId>-->
|
||||||
<!-- <artifactId>proguard-maven-plugin</artifactId>-->
|
<!-- <artifactId>proguard-maven-plugin</artifactId>-->
|
||||||
<!-- <version>2.6.1</version>-->
|
<!-- <version>2.6.1</version>-->
|
||||||
|
|
|
@ -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();
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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<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");
|
||||||
|
} 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");
|
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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
Player player = (Player) event.getWhoClicked();
|
||||||
if (event.getSlotType() == InventoryType.SlotType.ARMOR) {
|
|
||||||
Player player = (Player) event.getWhoClicked();
|
if (!player.hasPermission("nvus.prisoner")) return;
|
||||||
// Check if the player is an actual prisoner before cancelling ;)
|
|
||||||
if (player.hasPermission("nvus.prisoner")) {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
helmetMeta.setColor(Color.ORANGE);
|
if (helmetMeta != null) {
|
||||||
leatherHelmetPrison.setItemMeta(helmetMeta);
|
helmetMeta.setColor(Color.ORANGE);
|
||||||
|
helmetMeta.setDisplayName(ChatColor.GOLD + "Prisoner Helmet");
|
||||||
|
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();
|
||||||
chestplateMeta.setColor(Color.ORANGE);
|
if (chestplateMeta != null) {
|
||||||
leatherChestplatePrison.setItemMeta(chestplateMeta);
|
chestplateMeta.setColor(Color.ORANGE);
|
||||||
|
chestplateMeta.setDisplayName(ChatColor.GOLD + "Prisoner Chestplate");
|
||||||
|
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();
|
||||||
leggingsMeta.setColor(Color.ORANGE);
|
if (leggingsMeta != null) {
|
||||||
leatherLeggingsPrison.setItemMeta(leggingsMeta);
|
leggingsMeta.setColor(Color.ORANGE);
|
||||||
|
leggingsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Leggings");
|
||||||
|
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();
|
||||||
bootsMeta.setColor(Color.ORANGE);
|
if (bootsMeta != null) {
|
||||||
leatherBootsPrison.setItemMeta(bootsMeta);
|
bootsMeta.setColor(Color.ORANGE);
|
||||||
|
bootsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Boots");
|
||||||
|
leatherBootsPrison.setItemMeta(bootsMeta);
|
||||||
|
}
|
||||||
|
|
||||||
// Equip Prisoner Armor
|
// Equip Prisoner Armor
|
||||||
player.getInventory().setHelmet(leatherHelmetPrison);
|
player.getInventory().setHelmet(leatherHelmetPrison);
|
||||||
|
@ -77,9 +95,10 @@ public class PlayerSpawn implements Listener {
|
||||||
player.getInventory().setLeggings(leatherLeggingsPrison);
|
player.getInventory().setLeggings(leatherLeggingsPrison);
|
||||||
player.getInventory().setBoots(leatherBootsPrison);
|
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.
|
// Destroy armor upon death etc.
|
||||||
private void destroyDefaultPrisonerArmor(Player player) {
|
private void destroyDefaultPrisonerArmor(Player player) {
|
||||||
player.getInventory().setHelmet(null);
|
player.getInventory().setHelmet(null);
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
Loading…
Reference in New Issue