Compare commits

...

21 Commits
0.4.0 ... main

Author SHA1 Message Date
WildInterloper c78714f9bf Asset Update - Plugin Info 2024-03-11 12:32:12 -04:00
WildInterloper 7379508b90 README.MD update, pushed ToolDamageListener 2024-03-10 12:45:56 -04:00
WildInterloper 4b9ab74e6a README.MD update, pushed ToolDamageListener 2024-03-10 12:44:23 -04:00
WildInterloper a9f4e80094 v0.8.1 - Added ToolDamage, moved and renamed PrisonerTools from auto_switch.yml to config.yml. Added ToolDamage and reload config toggles to /nvus menu 2024-03-10 12:33:30 -04:00
WildInterloper 900e2ca0ed Added update checker 2024-03-09 14:43:09 -05:00
WildInterloper b2ec19387f v0.6.6 - Re-added ConfigManager implementation for Settings Menu. Ruled out the issue was not ConfigManager and was just in fact the click event firing multiple times across the frames generated. Should be safe to use and work correctly? Let's find out... LOL. 2024-03-06 11:52:16 -05:00
WildInterloper 324707d632 v0.6.6 - Added cooldown to settings menu. Was triggering the click event multiple times in the given frames. 2024-03-06 11:46:40 -05:00
WildInterloper 0ae8a88521 v0.6.1 - Added logic to settings menu. Implemented ConfigManager within it as well. Registered it with PrisonSetup main class was required. 2024-03-06 11:37:20 -05:00
WildInterloper 6ba21eaf68 v0.6.1 - Added GUI menu for plugin. Use /nvus menu 2024-03-06 11:30:14 -05:00
WildInterloper dd7f9ad6e8 Updated plugin info asset 2024-03-06 10:16:13 -05:00
WildInterloper 9b2dd912f5 v0.6.1 - Added commands for reload, version, toggle of AutoPickup and AutoSwitch. 2024-03-06 09:52:50 -05:00
WildInterloper 5c89bd4576 Updated and added asset screenshots 2024-03-05 23:56:19 -05:00
WildInterloper 95afbbd069 v0.6.0
- Added AutoSwitch option in config.yml.
- Added auto_switch.yml, when AutoSwitch is set to true in the main config it will check what tools server admins want prisoners to autoswitch to and they can even customize what blocks will automatically trigger switching to certain tools.
2024-03-05 23:43:48 -05:00
WildInterloper ec47789a8c v0.5.9 - Fixed prison armor dropping upon death. 2024-03-05 17:25:33 -05:00
WildInterloper fb347e7268 Added ProGuard Maven, for future use! 2024-03-05 16:28:56 -05:00
WildInterloper 87cd622120 Assets 2024-03-05 16:07:09 -05:00
WildInterloper 3ddc8217df v0.5.3 - Mined blocks were not converting to dropped resources prior to going into player inventory. i.e. if a prisoner mined a stone they would get a stone block in their inventory instead of a cobblestone. Attempting to fix that here using getDrop() but that returns a list. Attempting to convert that into an Array etc and go from there. 2024-03-05 15:05:01 -05:00
WildInterloper e1dfacfe65 v0.5.1 - Merged TEST -> MAIN 2024-03-05 14:57:03 -05:00
never2nv 0dd883536a Update README.MD 2024-03-05 17:17:58 +00:00
WildInterloper 05db874603 v0.4.0 - Stable Release! Updated plugin name, removed spaces. Forgot :P 2024-03-05 12:16:25 -05:00
WildInterloper 558f860d40 v0.4.0 - Stable Release! Updated plugin name, removed spaces. Forgot :P 2024-03-05 11:11:53 -05:00
32 changed files with 1150 additions and 105 deletions

2
.idea/.gitignore vendored
View File

@ -1,3 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# GitHub Copilot persisted chat sessions
/copilot/chatSessions

View File

@ -26,5 +26,10 @@
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</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>
</project>

View File

@ -6,6 +6,7 @@
<autoDetectTypes>
<platformType>PAPER</platformType>
<platformType>ADVENTURE</platformType>
<platformType>SPIGOT</platformType>
</autoDetectTypes>
<projectReimportVersion>1</projectReimportVersion>
</configuration>

View File

@ -1,8 +1,43 @@
A useful plugin for Minecraft prison servers.\
**PLANNED FEATURES, SO FAR**
- Set newly joined & respawned players in orange leather armor.
- Prevent prisoners from equipping new armor and unequipping the prisoner orange leather armor.
- Prevent prisoners from equipping or moving banned items into their QUICKBAR.
- Banned items can be configured in a banned_items.yml file within the plugin directory (PrisonSetup/banned_items.yml)
- Give newly joined & respawned prisoners the default prisoner tools? Maybe, not sure. Might just use a kit plugin for this?
- Main permission to tell a player is a prisoner or not is **nvus.prisoner** this permission should be **NEGATED** for any players that are not or no longer a prisoner, just in case.
## 🔗 Useful Stuff
Author(s): [@never2nv](https://git.fngnation.net/never2nv)
| [Documentation](https://www.spigotmc.org/resources/nvus-prison-lite.115441/field?field=documentation)
![portfolio](https://img.shields.io/badge/my_portfolio-000?style=for-the-badge&logo=ko-fi&logoColor=white)
# NVus Prison Lite
Useful features for Minecraft Prison Servers
## Features
![NVus Prison Lite Info](https://git.fngnation.net/never2nv/NVus_Prison_Lite/raw/branch/main/assets/plugin_info.png)
Currently, the plugin implements the following features, so far:
- Equips orange leather armor to all prisoners. It also prevents prisoners from changing or equipping any other armor.
- It generates a banned_items.yml file which can be configured to ban certain items for prisoners. Banned items cannot be used, equipped in hand, transferred to storage or even crafted by prisoners.
- Adds a toggle in the config.yml to turn on/off AutoPickup for prisoners to automatically pickup mined resource drops (if they have enough room in their inventory for the drop(s)).
- Adds a toggle in the config.yml for AutoSwitch, when set to true it allows server admins to customize the auto_switch.yml which will list what type of tools prisoners can auto switch to and what materials will trigger the auto switch to certain tools. Mining stone then prisoners hit clay? It will auto switch to the proper tool, if they have it in their inventory!
- You can now toggle PrisonerArmor and RestrictArmor options in the main config.yml file. Turning off PrisonerArmor will of course not give any prisoners the default orange leather armor. Turning off RestrictArmor will allow prisoners to change/remove their armor
.
- PrisonerTools: You can select which tool(s) are considered "Prisoner Tools" these tools are used for the auto switch and tool damage features.
- You can toggle ToolDamage. Setting to FALSE will prevent prisoner tools from being damaged when prisoners use them for mining etc!
- Commands for admins to use in-game to toggle certain features on/off, reload the configs and check plugin version.
- /nvus menu will now open an easy GUI Menu to toggle options on/off
- Armor is still craftable by prisoners. We felt this to be a cool roleplay element like allowing prisoners to craft and sell armor in the prison shops. Almost like the age ol' prisoners creating license plates! HAHA. If you don't like this you can always add various types of armor to the banned_items.yml file ie IRON_HELMET, DIAMOND_CHESTPLATE etc
## Documentation
[Documentation](https://www.spigotmc.org/resources/nvus-prison-lite.115441/field?field=documentation)

BIN
assets/donate.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
assets/plugin-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
assets/plugin_info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

BIN
assets/plugin_menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.NVus</groupId>
<artifactId>NVus_Prison_Setup</artifactId>
<name>NVus_PrisonSetup</name>
<version>0.5.6</version>
<url>https://FNGnation.net</url>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.6.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}-proguard.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<proguardInclude>${basedir}/proguard.conf</proguardInclude>
<libs>
<lib>${java.home}/jmods/java.base.jmod</lib>
</libs>
<options>
<option>-keep public class me.nvus.nvus_prison_setup.PrisonSetup extends org.bukkit.plugin.java.JavaPlugin { *; }</option>
<option>-keep public class me.nvus.nvus_prison_setup.PrisonSetup extends org.bukkit.plugin.java.JavaPlugin</option>
<option>-overloadaggressively</option>
<option>-repackageclasses</option>
</options>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>papermc-repo</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

74
pom.xml
View File

@ -6,13 +6,15 @@
<groupId>me.NVus</groupId>
<artifactId>NVus_Prison_Setup</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.8.1</version>
<packaging>jar</packaging>
<name>NVus PrisonSetup</name>
<name>NVus_PrisonSetup</name>
<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>
</properties>
<url>https://FNGnation.net</url>
@ -41,6 +43,37 @@
</execution>
</executions>
</plugin>
<!-- <plugin>-->
<!-- <groupId>com.github.wvengen</groupId>-->
<!-- <artifactId>proguard-maven-plugin</artifactId>-->
<!-- <version>2.6.1</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <phase>package</phase>-->
<!-- <goals>-->
<!-- <goal>proguard</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- <configuration>-->
<!-- <obfuscate>true</obfuscate>-->
<!-- <injar>${project.build.finalName}.jar</injar>-->
<!-- <outjar>${project.build.finalName}-proguard.jar</outjar>-->
<!-- <outputDirectory>${project.build.directory}</outputDirectory>-->
<!-- <proguardInclude>${basedir}/proguard.conf</proguardInclude>-->
<!-- <libs>-->
<!-- <lib>${java.home}/jmods/java.base.jmod</lib>-->
<!-- </libs>-->
<!-- <options>-->
<!-- <option>-keep public class me.nvus.nvus_prison_setup.PrisonSetup extends org.bukkit.plugin.java.JavaPlugin { *; }</option>-->
<!-- <option>-keep public class me.nvus.nvus_prison_setup.PrisonSetup extends org.bukkit.plugin.java.JavaPlugin</option>-->
<!-- <option>-overloadaggressively</option>-->
<!-- <option>-repackageclasses</option>-->
<!-- </options>-->
<!-- </configuration>-->
<!-- </plugin>-->
</plugins>
<resources>
<resource>
@ -59,8 +92,24 @@
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</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>
<dependency>
<groupId>io.papermc.paper</groupId>
@ -68,5 +117,24 @@
<version>1.20.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</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>-->
<!-- <artifactId>proguard-maven-plugin</artifactId>-->
<!-- <version>2.6.1</version>-->
<!-- </dependency>-->
</dependencies>
</project>

View File

@ -0,0 +1,61 @@
package me.nvus.nvus_prison_setup.Configs;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class ConfigManager {
private final JavaPlugin plugin;
private final Map<String, FileConfiguration> configs;
private final Map<String, File> configFiles;
public ConfigManager(JavaPlugin plugin) {
this.plugin = plugin;
this.configs = new HashMap<>();
this.configFiles = new HashMap<>();
}
public void reloadConfig(String configName) {
File configFile = getConfigFile(configName);
FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
configs.put(configName, config);
}
public FileConfiguration getConfig(String configName) {
if (!configs.containsKey(configName)) {
reloadConfig(configName);
}
return configs.get(configName);
}
public void saveConfig(String configName) {
FileConfiguration config = getConfig(configName);
File configFile = getConfigFile(configName);
try {
config.save(configFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public void saveDefaultConfig(String configName) {
File configFile = getConfigFile(configName);
if (!configFile.exists()) {
plugin.saveResource(configName, false);
plugin.getLogger().info(configName + " has been created.");
}
}
private File getConfigFile(String configName) {
if (!configFiles.containsKey(configName)) {
File configFile = new File(plugin.getDataFolder(), configName);
configFiles.put(configName, configFile);
}
return configFiles.get(configName);
}
}

View File

@ -0,0 +1,142 @@
package me.nvus.nvus_prison_setup.Configs;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
public class SettingsMenu implements Listener {
private final JavaPlugin plugin;
private final ConfigManager configManager;
private final Map<UUID, Consumer<Player>> playerTasks = new ConcurrentHashMap<>();
public SettingsMenu(JavaPlugin plugin, ConfigManager configManager) {
this.plugin = plugin;
this.configManager = configManager;
Bukkit.getServer().getPluginManager().registerEvents(this, plugin);
}
public void openSettingsMenu(Player player) {
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "NVus Prison Settings");
FileConfiguration config = configManager.getConfig("config.yml");
inv.setItem(0, createToggleItem(Material.LEATHER_CHESTPLATE, "Toggle PrisonerArmor", config.getBoolean("PrisonerArmor", true)));
inv.setItem(1, createToggleItem(Material.IRON_CHESTPLATE, "Toggle RestrictArmor", config.getBoolean("RestrictArmor", true)));
inv.setItem(3, createToggleItem(Material.HOPPER, "Toggle AutoPickup", config.getBoolean("AutoPickup", true)));
inv.setItem(4, createToggleItem(Material.LEVER, "Toggle AutoSwitch", config.getBoolean("AutoSwitch", false)));
inv.setItem(6, createToggleItem(Material.IRON_PICKAXE, "Toggle ToolDamage", config.getBoolean("ToolDamage", false)));
inv.setItem(7, createToggleItem(Material.BOOK, "Reload Configs", false));
player.openInventory(inv);
}
private ItemStack createToggleItem(Material material, String name, boolean isEnabled) {
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
// Non-Toggable Items
if (name.equals("Reload Configs")) {
meta.setDisplayName(ChatColor.GREEN + name);
}
// Toggable Items
else {
meta.setDisplayName(ChatColor.GREEN + name + ": " + (isEnabled ? ChatColor.BLUE + "Enabled" : ChatColor.RED + "Disabled"));
}
item.setItemMeta(meta);
return item;
}
// private ItemStack createItem(Material material, String name) {
// ItemStack item = new ItemStack(material);
// ItemMeta meta = item.getItemMeta();
// meta.setDisplayName(name);
// item.setItemMeta(meta);
// return item;
// }
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (!event.getView().getTitle().equals(ChatColor.DARK_GREEN + "NVus Prison Settings")) return;
event.setCancelled(true);
Player player = (Player) event.getWhoClicked();
UUID playerUUID = player.getUniqueId();
// Execute any pending tasks for this player before processing a new one
playerTasks.computeIfPresent(playerUUID, (uuid, task) -> {
Bukkit.getScheduler().runTask(plugin, () -> task.accept(player));
return null;
});
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null || !clickedItem.hasItemMeta() || !clickedItem.getItemMeta().hasDisplayName()) {
return;
}
String displayName = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
scheduleConfigToggle(playerUUID, displayName);
}
private void scheduleConfigToggle(UUID playerUUID, String displayName) {
Consumer<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");
boolean currentValue = config.getBoolean(configKey, false);
config.set(configKey, !currentValue);
configManager.saveConfig("config.yml");
// Debug message
//player.sendMessage(ChatColor.GREEN + configKey + " " + (!currentValue ? "enabled" : "disabled"));
}
private void reloadConfigs(final Player player) {
configManager.reloadConfig("config.yml");
configManager.reloadConfig("auto_switch.yml");
configManager.reloadConfig("banned_items.yml");
configManager.saveConfig("config.yml");
player.sendMessage(ChatColor.GREEN + "Configuration files reloaded.");
player.closeInventory();
}
}

View File

@ -0,0 +1,109 @@
package me.nvus.nvus_prison_setup.Listeners;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import me.nvus.nvus_prison_setup.PrisonSetup;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class BlockListener implements Listener {
private final PrisonSetup plugin;
private final Set<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) {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (!isBlockBreakAllowed(player, block.getLocation())) {
event.setCancelled(true); // Prevent the block from being broken
event.setDropItems(false); // Prevent the block from dropping items
//player.sendMessage("You cannot break blocks in this area.");
return;
}
if (storageBlocks.contains(block.getType())) {
return;
}
if (player.hasPermission("nvus.prisoner") && plugin.getConfigManager().getConfig("config.yml").getBoolean("AutoPickup")) {
List<ItemStack> drops = block.getDrops().stream().toList();
for (ItemStack drop : drops) {
if (player.getInventory().addItem(drop).isEmpty()) {
event.setDropItems(false);
} else {
// Inventory is full, drop the item on the ground
block.getWorld().dropItemNaturally(block.getLocation(), drop);
player.sendMessage("Your inventory is currently full. The resource has been dropped on the ground!");
}
}
}
}
private boolean isBlockBreakAllowed(Player player, org.bukkit.Location bukkitLocation) {
if (player.hasPermission("worldguard.region.bypass." + bukkitLocation.getWorld().getName()) || player.hasPermission("worldguard.region.bypass.*")) {
return true;
}
com.sk89q.worldedit.util.Location location = BukkitAdapter.adapt(bukkitLocation);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
com.sk89q.worldguard.LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (query.testBuild(location, localPlayer)) {
return true;
}
// region membership, ownership, and specific flags set on the region
return query.testState(location, localPlayer, Flags.BLOCK_BREAK);
}
}

View File

@ -0,0 +1,105 @@
package me.nvus.nvus_prison_setup.Listeners;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import me.nvus.nvus_prison_setup.Configs.SettingsMenu;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class CommandListener implements CommandExecutor {
private final JavaPlugin plugin;
private final ConfigManager configManager;
public CommandListener(JavaPlugin plugin, ConfigManager configManager) {
this.plugin = plugin;
this.configManager = configManager;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!sender.hasPermission("nvus.admin")) {
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command.");
return true;
}
if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Usage: /nvus <reload|version|menu|autopickup|autoswitch> [arguments]");
return true;
}
switch (args[0].toLowerCase()) {
case "reload":
handleReloadCommand(sender);
break;
case "version":
handleVersionCommand(sender);
break;
case "menu":
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "This command can only be used by players.");
return true;
}
Player player = (Player) sender;
new SettingsMenu(plugin, configManager).openSettingsMenu(player);
break;
case "autopickup":
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "Usage: /nvus autopickup <true|false>");
return true;
}
handleToggleConfigCommand(sender, "AutoPickup", args[1]);
break;
case "autoswitch":
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "Usage: /nvus autoswitch <true|false>");
return true;
}
handleToggleConfigCommand(sender, "AutoSwitch", args[1]);
break;
case "prisonerarmor": // New case for toggling PrisonerArmor
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "Usage: /nvus prisonerarmor <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:
sender.sendMessage(ChatColor.RED + "Invalid command. Use /nvus for help.");
return true;
}
return true;
}
private void handleReloadCommand(CommandSender sender) {
configManager.reloadConfig("config.yml");
configManager.reloadConfig("auto_switch.yml");
configManager.reloadConfig("banned_items.yml");
sender.sendMessage(ChatColor.GREEN + "Configuration files reloaded.");
}
private void handleVersionCommand(CommandSender sender) {
sender.sendMessage(ChatColor.GREEN + "Plugin version: " + plugin.getDescription().getVersion());
}
private void handleToggleConfigCommand(CommandSender sender, String key, String value) {
boolean boolValue = Boolean.parseBoolean(value);
FileConfiguration config = configManager.getConfig("config.yml");
config.set(key, boolValue);
configManager.saveConfig("config.yml");
sender.sendMessage(ChatColor.GREEN + key + " set to " + boolValue + ".");
}
}

View File

@ -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")) {
if (!player.hasPermission("nvus.prisoner")) return;
if (event.getClickedInventory() != null && (event.getClickedInventory().getType() == InventoryType.PLAYER || event.getClickedInventory().getType() == InventoryType.CRAFTING)) {
if (event.getSlotType() == InventoryType.SlotType.ARMOR || isArmorItem(event.getCurrentItem()) || isArmorItem(event.getCursor())) {
boolean restrictArmor = configManager.getConfig("config.yml").getBoolean("RestrictArmor");
if (restrictArmor) {
event.setCancelled(true);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lSorry inmate! &cYou're a &6&lprisoner &cand cannot change your armor!"));
}
// If restrictArmor is false, allows the player to change armor freely.
}
}
}
// Checks if the given item is a piece of prisoner armor.
private boolean isArmorItem(ItemStack item) {
if (item == null) {
return false;
}
Material type = item.getType();
return type == Material.LEATHER_HELMET || type == Material.LEATHER_CHESTPLATE ||
type == Material.LEATHER_LEGGINGS || type == Material.LEATHER_BOOTS ||
// Add checks for other armor materials if prisoners can have those
type == Material.CHAINMAIL_BOOTS || type == Material.IRON_HELMET;
// We can later add additional armor sets here if we allow customization of what is considered "prisoner armor".
}
private ItemStack createArmor(Material material, String name) {
ItemStack item = new ItemStack(material);
LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
if (meta != null) {
meta.setDisplayName(name);
meta.setColor(Color.ORANGE); // Set the color for leather armor
item.setItemMeta(meta);
}
return item;
}
}

View File

@ -1,15 +1,14 @@
package me.nvus.nvus_prison_setup.Listeners;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import me.nvus.nvus_prison_setup.PrisonSetup;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
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.PlayerItemHeldEvent;
import org.bukkit.inventory.ItemStack;
@ -17,10 +16,10 @@ import java.util.List;
public class PlayerItems implements Listener {
private final PrisonSetup plugin;
private final ConfigManager configManager;
public PlayerItems(PrisonSetup plugin) {
this.plugin = plugin;
public PlayerItems(ConfigManager configManager) {
this.configManager = configManager;
}
@EventHandler(priority = EventPriority.LOWEST)
@ -54,41 +53,8 @@ public class PlayerItems implements Listener {
}
private boolean isBannedItem(Material itemType) {
FileConfiguration config = plugin.getBannedItemsConfig().getConfig();
List<String> bannedItems = config.getStringList("BannedItems");
List<String> bannedItems = configManager.getConfig("banned_items.yml").getStringList("BannedItems");
return bannedItems.contains(itemType.toString());
}
/*
@EventHandler(priority = EventPriority.LOWEST)
public void onInventoryClick(InventoryClickEvent event) {
if (event.getClickedInventory() != null && event.getClickedInventory().getType() == InventoryType.PLAYER) {
if (event.getSlotType() == InventoryType.SlotType.QUICKBAR) {
ItemStack item = event.getCurrentItem();
Player player = (Player) event.getWhoClicked();
// Check if the clicked item is a banned item
if (item != null && isBannedItem(item.getType())) {
// Check if the player is a prisoner
if (player.hasPermission("nvus.prisoner")) {
// Cancel the event to prevent the banned item from being moved to the quickbar
event.setCancelled(true);
player.sendMessage(ChatColor.translateAlternateColorCodes('&',"&c&lSorry inmate! &cYou're a prisoner and cannot use this tool!"));
}
}
}
}
}
private boolean isBannedItem(Material itemType) {
FileConfiguration config = plugin.getBannedItemsConfig().getConfig();
List<String> bannedItems = config.getStringList("BannedItems");
return bannedItems.contains(itemType.toString());
}
*/
}

View File

@ -1,73 +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.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.LeatherArmorMeta;
public class PlayerSpawn implements Listener {
private final ConfigManager configManager;
@EventHandler
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
@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")) {
// Destroy default prisoner armor
destroyDefaultPrisonerArmor(deadPlayer);
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
@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();
if (helmetMeta != null) {
helmetMeta.setColor(Color.ORANGE);
helmetMeta.setDisplayName(ChatColor.GOLD + "Prisoner Helmet");
leatherHelmetPrison.setItemMeta(helmetMeta);
}
// Create Prisoner Chestplate
ItemStack leatherChestplatePrison = new ItemStack(Material.LEATHER_CHESTPLATE);
LeatherArmorMeta chestplateMeta = (LeatherArmorMeta) leatherChestplatePrison.getItemMeta();
if (chestplateMeta != null) {
chestplateMeta.setColor(Color.ORANGE);
chestplateMeta.setDisplayName(ChatColor.GOLD + "Prisoner Chestplate");
leatherChestplatePrison.setItemMeta(chestplateMeta);
}
// Create Prisoner Leggings
ItemStack leatherLeggingsPrison = new ItemStack(Material.LEATHER_LEGGINGS);
LeatherArmorMeta leggingsMeta = (LeatherArmorMeta) leatherLeggingsPrison.getItemMeta();
if (leggingsMeta != null) {
leggingsMeta.setColor(Color.ORANGE);
leggingsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Leggings");
leatherLeggingsPrison.setItemMeta(leggingsMeta);
}
// Create Prisoner Boots
ItemStack leatherBootsPrison = new ItemStack(Material.LEATHER_BOOTS);
LeatherArmorMeta bootsMeta = (LeatherArmorMeta) leatherBootsPrison.getItemMeta();
if (bootsMeta != null) {
bootsMeta.setColor(Color.ORANGE);
bootsMeta.setDisplayName(ChatColor.GOLD + "Prisoner Boots");
leatherBootsPrison.setItemMeta(bootsMeta);
}
// Equip Prisoner Armor
player.getInventory().setHelmet(leatherHelmetPrison);
@ -78,6 +98,41 @@ public class PlayerSpawn implements Listener {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYou're a prisoner! &6You've been given the default prisoner armor!"));
}
// Destroy armor upon death etc.
private void destroyDefaultPrisonerArmor(Player player) {
player.getInventory().setHelmet(null);
player.getInventory().setChestplate(null);
player.getInventory().setLeggings(null);
player.getInventory().setBoots(null);
// Using this as a debug/check, will comment out later!
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYour default prisoner armor has been destroyed!"));
}
private boolean isPrisonerArmor(Material material) {
return material == Material.LEATHER_HELMET ||
material == Material.LEATHER_CHESTPLATE ||
material == Material.LEATHER_LEGGINGS ||
material == Material.LEATHER_BOOTS;
}
/*
private void destroyDefaultPrisonerArmor(Player player) {
player.getInventory().setHelmet(null);
player.getInventory().setChestplate(null);
player.getInventory().setLeggings(null);
player.getInventory().setBoots(null);
// Using this as a debug/check, will comment out later!
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYour default prisoner armor has been destroyed!"));
}
*/
/*
// Destroy armor upon death etc.
private void destroyDefaultPrisonerArmor(Player player) {
// Loop through the armor slots and remove any armor pieces
@ -90,4 +145,5 @@ public class PlayerSpawn implements Listener {
// Using this as a debug/check, will comment out later!
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lYour default prisoner armor has been destroyed!"));
}
*/
}

View File

@ -0,0 +1,49 @@
package me.nvus.nvus_prison_setup.Listeners;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.List;
import java.util.stream.Collectors;
public class ToolDamageListener implements Listener {
private final ConfigManager configManager;
public ToolDamageListener(ConfigManager configManager) {
this.configManager = configManager;
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
ItemStack itemInHand = player.getInventory().getItemInMainHand();
if (!(itemInHand.getItemMeta() instanceof Damageable)) return;
FileConfiguration config = configManager.getConfig("config.yml");
boolean toolDamageEnabled = config.getBoolean("ToolDamage", true);
List<Material> prisonerTools = config.getStringList("PrisonerTools").stream().map(Material::valueOf).collect(Collectors.toList());
if (!toolDamageEnabled && prisonerTools.contains(itemInHand.getType())) {
Damageable itemMeta = (Damageable) itemInHand.getItemMeta();
itemMeta.setDamage(0);
itemInHand.setItemMeta((ItemMeta) itemMeta);
// DEBUGGGGGGGGGGGG
//player.sendMessage(ChatColor.GREEN + "Your tool's durability was preserved.");
}
}
}

View File

@ -0,0 +1,82 @@
package me.nvus.nvus_prison_setup.Listeners;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ToolSwitchListener implements Listener {
private final ConfigManager configManager;
public ToolSwitchListener(ConfigManager configManager) {
this.configManager = configManager;
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getAction() != org.bukkit.event.block.Action.LEFT_CLICK_BLOCK || event.getClickedBlock() == null) return;
Player player = event.getPlayer();
FileConfiguration config = configManager.getConfig("config.yml");
FileConfiguration autoSwitchConfig = configManager.getConfig("auto_switch.yml");
if (!player.hasPermission("nvus.prisoner") || !config.getBoolean("AutoSwitch", true)) return;
Material blockType = event.getClickedBlock().getType();
Material bestTool = determineBestToolForBlock(blockType, player, config, autoSwitchConfig);
if (bestTool != null) {
switchToTool(player, bestTool);
}
}
private Material determineBestToolForBlock(Material blockType, Player player, FileConfiguration config, FileConfiguration autoSwitchConfig) {
List<Material> prisonerTools = config.getStringList("PrisonerTools").stream()
.map(Material::valueOf)
.collect(Collectors.toList());
Map<Material, List<Material>> toolEffectivenessMap = new HashMap<>();
for (Material tool : prisonerTools) {
if (tool.toString().endsWith("_PICKAXE")) {
toolEffectivenessMap.put(tool, convertStringListToMaterial(autoSwitchConfig.getStringList("PickaxeMaterials")));
} else if (tool.toString().endsWith("_AXE")) {
toolEffectivenessMap.put(tool, convertStringListToMaterial(autoSwitchConfig.getStringList("AxeMaterials")));
} else if (tool.toString().endsWith("_SHOVEL")) {
toolEffectivenessMap.put(tool, convertStringListToMaterial(autoSwitchConfig.getStringList("ShovelMaterials")));
}
}
for (Material tool : prisonerTools) {
List<Material> effectiveBlocks = toolEffectivenessMap.getOrDefault(tool, List.of());
if (effectiveBlocks.contains(blockType) && player.getInventory().contains(tool)) {
return tool;
}
}
return null; // No suitable tool found
}
private void switchToTool(Player player, Material tool) {
PlayerInventory inventory = player.getInventory();
int toolSlot = inventory.first(tool);
if (toolSlot >= 0 && toolSlot < 9) { // If the tool is in the quickbar
inventory.setHeldItemSlot(toolSlot);
}
}
private List<Material> convertStringListToMaterial(List<String> stringList) {
return stringList.stream().map(Material::valueOf).collect(Collectors.toList());
}
}

View File

@ -1,41 +1,123 @@
package me.nvus.nvus_prison_setup;
import me.nvus.nvus_prison_setup.Configs.BannedItemsConfig;
import me.nvus.nvus_prison_setup.Listeners.PlayerArmor;
import me.nvus.nvus_prison_setup.Listeners.PlayerItems;
import me.nvus.nvus_prison_setup.Listeners.PlayerSpawn;
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
import me.nvus.nvus_prison_setup.Listeners.*;
import me.nvus.nvus_prison_setup.Configs.SettingsMenu;
import me.nvus.nvus_prison_setup.Updater.UpdateChecker;
import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.ChatColor;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public final class PrisonSetup extends JavaPlugin {
private BannedItemsConfig bannedItemsConfig;
private ConfigManager configManager;
@Override
public void onEnable() {
// Initialize the ConfigManager
configManager = new ConfigManager(this);
// Init the BannedItemsConfig
bannedItemsConfig = new BannedItemsConfig(this);
// Save the default configs, if they doesn't exist
configManager.saveDefaultConfig("config.yml");
configManager.saveDefaultConfig("banned_items.yml");
configManager.saveDefaultConfig("auto_switch.yml");
// Save banned_items.yml config if it doesn't exist
bannedItemsConfig.saveDefaultConfig();
// Update config file(s) when new updates come out and they need replaced
checkAndUpdateConfigs();
// Register event listeners
getServer().getPluginManager().registerEvents(new PlayerSpawn(configManager), this);
getServer().getPluginManager().registerEvents(new PlayerArmor(configManager), this);
getServer().getPluginManager().registerEvents(new PlayerItems(configManager), this);
getServer().getPluginManager().registerEvents(new BlockListener(this), this);
getServer().getPluginManager().registerEvents(new ToolSwitchListener(configManager), this);
this.getCommand("nvus").setExecutor(new CommandListener(this, configManager));
//new SettingsMenu(this, configManager);
getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this);
// Tool Damage
ToolDamageListener toolDamageListener = new ToolDamageListener(configManager);
getServer().getPluginManager().registerEvents(toolDamageListener, this);
getServer().getPluginManager().registerEvents(new PlayerSpawn(), this);
getServer().getPluginManager().registerEvents(new PlayerArmor(), this);
getServer().getPluginManager().registerEvents(new PlayerItems(this), this);
getLogger().info(ChatColor.translateAlternateColorCodes('&',"&a&lNVus Prison Setup has been successfully enabled!"));
new UpdateChecker(this, 12345).getVersion(version -> {
if (!this.getDescription().getVersion().equals(version)) {
getLogger().info("There is a new update available for NVus Prison Setup! Grab it from SpigotMC here: https://www.spigotmc.org/resources/nvus-prison-setup.115441/");
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.isOp() || player.hasPermission("nvus.admin")) {
player.sendMessage(ChatColor.RED + "=====================================================");
player.sendMessage(ChatColor.YELLOW + "An update for NVus Prison Setup is available! Grab it from SpigotMC here: https://www.spigotmc.org/resources/nvus-prison-setup.115441/");
player.sendMessage(ChatColor.RED + "=====================================================");
}
}
}, 20L * 60);
}
});
}
@Override
public void onDisable() {
// Saving config file, just in case it was changed prior to disabling plugin/shutdown?
bannedItemsConfig.saveConfig();
// Save the config when disabling the plugin
configManager.saveConfig("config.yml");
configManager.saveConfig("banned_items.yml");
configManager.saveConfig("auto_switch.yml");
// Log a success message
getLogger().info(ChatColor.translateAlternateColorCodes('&',"&c&lNVus Prison Setup has been successfully disabled!"));
}
public BannedItemsConfig getBannedItemsConfig() {
return bannedItemsConfig;
public ConfigManager getConfigManager() {
return configManager;
}
private void checkAndUpdateConfigs() {
File configFile = new File(getDataFolder(), "config.yml");
if (!configFile.exists()) {
saveResource("config.yml", false);
saveResource("auto_switch.yml", false);
return;
}
FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
String configVersion = config.getString("ConfigVersion", "0"); // Default to "0" if not found
if (!"1.0".equals(configVersion)) {
backupAndReplaceConfig("config.yml");
backupAndReplaceConfig("auto_switch.yml");
// After backing up and copying new ones, you might want to reload these configs into your ConfigManager
// assuming you have such a method in your ConfigManager
getConfigManager().reloadConfig("config.yml");
getConfigManager().reloadConfig("auto_switch.yml");
}
}
private void backupAndReplaceConfig(String fileName) {
File configFile = new File(getDataFolder(), fileName);
File backupFile = new File(getDataFolder(), fileName + ".BACKUP");
// Backup the old file
try {
Files.move(configFile.toPath(), backupFile.toPath());
} catch (IOException e) {
getLogger().warning("Could not backup " + fileName + ": " + e.getMessage());
}
// Copy new file from resources
saveResource(fileName, false);
}
}

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

@ -0,0 +1,57 @@
#======================================================================================#
# NVus PRISON SETUP #
# by never2nv #
# www.FNGnation.net #
# Discord: FNGnation.net/discord #
#======================================================================================#
# What blocks/ores should cause the prisoner to auto switch to a pickaxe?
PickaxeMaterials:
- STONE
- COBBLESTONE
- ANDESITE
- DIORITE
- GRANITE
- NETHERRACK
- END_STONE
- SANDSTONE
- RED_SANDSTONE
- OBSIDIAN
# Here's all the ORES that will trigger switching to a piacke:
- COAL_ORE
- IRON_ORE
- GOLD_ORE
- DIAMOND_ORE
- LAPIS_ORE
- REDSTONE_ORE
- EMERALD_ORE
- NETHER_QUARTZ_ORE
- ANCIENT_DEBRIS
# What blocks should cause the prisoner to auto switch to an axe?
AxeMaterials:
- OAK_LOG
- OAK_PLANKS
- BIRCH_LOG
- BIRCH_PLANKS
- SPRUCE_LOG
- SPRUCE_PLANKS
- JUNGLE_LOG
- JUNGLE_PLANKS
- ACACIA_LOG
- ACACIA_PLANKS
- DARK_OAK_LOG
- DARK_OAK_PLANKS
# What blocks should cause the prisoner to auto switch to a shovel?
ShovelMaterials:
- GRASS_BLOCK
- DIRT
- COARSE_DIRT
- PODZOL
- SAND
- RED_SAND
- GRAVEL
- CLAY
- SNOW
- SNOW_BLOCK

View File

@ -7,7 +7,7 @@
# Place Item(s) here that prisoners should never be able to equip in their hands or move into their quickbar
# Remember to give all prisoner ranks/groups that permission nvus.prisoner and negate that permission for any
# Remember to give all prisoner ranks/groups the permission ' nvus.prisoner ' and negate that permission for any
# players that are not or no longer considered a prisoner.
BannedItems:
- DIAMOND_PICKAXE

View File

@ -0,0 +1,34 @@
#======================================================================================#
# NVus PRISON SETUP #
# by never2nv #
# www.FNGnation.net #
# Discord: FNGnation.net/discord #
#======================================================================================#
# Remember to give prisoner ranks/groups the permission ' nvus.prisoner ' and negate that permission for any
# players that are not or no longer considered a prisoner.
# Should prisoners auto pickup blocks they have mined?
# Use /nvus autopickup true|false to toggle this in-game! (Requires permission: nvus.admin)
# DO NOT TURN THIS ON WHEN RUNNING THIS PLUGIN ON A LIVE/PRODUCTION SERVER! There may be bugs!
AutoPickup: false
# Should prisoners be able to auto switch to the correct tool for whatever they are mining?
#i.e. If hitting dirt/clay with a pickaxe, they will auto switch to a shovel (if in their quickbar)
# Use /nvus autoswitch true|false to toggle this in-game! (Requires permission: nvus.admin)
AutoSwitch: true
# Should prisoners be given a default prisoner armor set (orange leather armor) when they join the server?
PrisonerArmor: true
# Should prisoners be able to remove/change their default prisoner armor?
RestrictArmor: true
# What tools are considered Prisoner Tools? These are used for the ToolDamage toggle and for auto switching feature!
# See auto_switch.yml to set up which blocks trigger the auto switch to these tools.
PrisonerTools:
- IRON_PICKAXE
- IRON_AXE
- IRON_SHOVEL
# When set to FALSE it will prevent Prisoner Tools from receiving damage when mining etc.
ToolDamage: false
ConfigVersion: 1.0 # Do not change this value!

View File

@ -1,7 +1,23 @@
name: NVus PrisonSetup
name: NVus_PrisonSetup
version: '${project.version}'
main: me.nvus.nvus_prison_setup.PrisonSetup
api-version: '1.20'
prefix: NVus Prison
prefix: NVus Prison Lite
authors: [never2nv]
website: https://FNGnation.net
depends:
- WorldGuard
commands:
nvus:
description: Base command to view NVus Prison Setup commands.
usage: |
/nvus reload - Reloads all configuration files.
/nvus version - Shows the plugin version.
/nvus menu - Opens the settings menu (player only).
/nvus autopickup <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]