From 863e24b7fbd5e952364ba5d08c8a9e3f02946e67 Mon Sep 17 00:00:00 2001 From: Andrew121410 Date: Mon, 9 Sep 2024 17:55:41 -0400 Subject: [PATCH] Add maxSizeOfElevator & whitelist to the config.yml --- .../mc/world16elevators/World16Elevators.java | 41 ++++++++++++++++--- .../commands/ElevatorCMD.java | 39 ++++++++++++++++++ .../commands/tabcomplete/ElevatorTab.java | 1 + src/main/resources/config.yml | 18 +++++++- 4 files changed, 93 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/andrew121410/mc/world16elevators/World16Elevators.java b/src/main/java/com/andrew121410/mc/world16elevators/World16Elevators.java index a32c7c3..67583eb 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/World16Elevators.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/World16Elevators.java @@ -7,8 +7,11 @@ import com.andrew121410.mc.world16elevators.utils.MemoryHolder; import com.andrew121410.mc.world16elevators.utils.OtherPlugins; import com.andrew121410.mc.world16utils.updater.UpdateManager; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.plugin.java.JavaPlugin; +import java.util.List; + public final class World16Elevators extends JavaPlugin { private static World16Elevators instance; @@ -18,7 +21,10 @@ public final class World16Elevators extends JavaPlugin { private OtherPlugins otherPlugins; private MemoryHolder memoryHolder; + // Global Config private boolean chunkSmartManagement = false; + private int maxSizeOfElevator; + private List elevatorCreationWhitelist; @Override public void onEnable() { @@ -26,11 +32,7 @@ public void onEnable() { this.otherPlugins = new OtherPlugins(this); this.memoryHolder = new MemoryHolder(); - this.getConfig().options().copyDefaults(true); - this.saveConfig(); - this.reloadConfig(); - - this.chunkSmartManagement = this.getConfig().getBoolean("ChunkSmartManagement"); + handleConfig(); this.elevatorManager = new ElevatorManager(this); this.elevatorManager.loadAllElevatorControllers(); @@ -45,6 +47,27 @@ public void onEnable() { UpdateManager.registerUpdater(this, new com.andrew121410.mc.world16elevators.Updater(this)); } + private void handleConfig() { + saveDefaultConfig(); // Saves the default config.yml with comments if config.yml doesn't exist + this.getConfig().options().copyDefaults(true); // Ensures all defaults are in place + this.saveConfig(); // Saves the config again + this.reloadConfig(); // Reloads the config, including any new defaults + + this.chunkSmartManagement = this.getConfig().getBoolean("ChunkSmartManagement"); + this.maxSizeOfElevator = this.getConfig().getInt("maxSizeOfElevator"); + + // Elevator Creation Whitelist + ConfigurationSection whitelistSection = this.getConfig().getConfigurationSection("whitelist"); + if (whitelistSection != null) { + boolean isEnable = whitelistSection.getBoolean("enabled"); + if (isEnable) { + this.elevatorCreationWhitelist = whitelistSection.getStringList("players"); + }else { + this.elevatorCreationWhitelist = null; + } + } + } + @Override public void onDisable() { this.elevatorManager.saveAllElevators(); @@ -77,4 +100,12 @@ public ElevatorManager getElevatorManager() { public boolean isChunkSmartManagement() { return chunkSmartManagement; } + + public int getMaxSizeOfElevator() { + return maxSizeOfElevator; + } + + public List getElevatorCreationWhitelist() { + return elevatorCreationWhitelist; + } } diff --git a/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java b/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java index 5a85df8..524a157 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/commands/ElevatorCMD.java @@ -126,6 +126,15 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String player.sendMessage(Translate.color("&bYou don't have permission to use this command.")); return true; } + + // Elevator Creation Whitelist + if (this.plugin.getElevatorCreationWhitelist() != null) { + if (!this.plugin.getElevatorCreationWhitelist().contains(player.getName())) { + player.sendMessage(Translate.miniMessage("You are not whitelisted to create an elevator controller.")); + return true; + } + } + String controllerName = args[2].toLowerCase(); if (elevatorControllerMap.get(controllerName) != null) { @@ -160,6 +169,14 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String return true; } + // Elevator Creation Whitelist + if (this.plugin.getElevatorCreationWhitelist() != null) { + if (!this.plugin.getElevatorCreationWhitelist().contains(player.getName())) { + player.sendMessage(Translate.miniMessage("You are not whitelisted to create an elevator.")); + return true; + } + } + if (args.length == 4) { Block blockPlayerIsLookingAt = PlayerUtils.getBlockPlayerIsLookingAt(player); ElevatorArguments eleArgs = getElevatorArguments(args, 2); @@ -171,6 +188,13 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String return true; } + // Check the volume of the region to make sure it's not bigger than maxSizeOfElevator + int maxSizeOfElevator = this.plugin.getMaxSizeOfElevator(); + if (region.getVolume() > maxSizeOfElevator) { + player.sendMessage(Translate.miniMessage("The region you selected is too big. The max size is: " + maxSizeOfElevator)); + return true; + } + ElevatorController elevatorController = eleArgs.getElevatorController(); if (elevatorController == null) { player.sendMessage(Translate.miniMessage("Elevator controller was not found.")); @@ -967,6 +991,21 @@ public void run() { } else { player.sendMessage(Translate.color("&6/elevator boundingbox &e &9 &eshow/shift &3")); } + } else if (args[0].equalsIgnoreCase("volume")) { // /elevator volume + if (!player.hasPermission("world16elevators.volume")) { + player.sendMessage(Translate.color("&bYou don't have permission to use this command.")); + return true; + } + + BoundingBox region = this.plugin.getOtherPlugins().getWorld16Utils().getClassWrappers().getWorldEdit().getRegion(player); + + if (region == null) { + player.sendMessage(Translate.miniMessage("You need to select a region with WorldEdit.")); + return true; + } + + double volume = region.getVolume(); + player.sendMessage(Translate.miniMessage("The volume of the region is: " + volume)); } return true; } diff --git a/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java b/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java index 8236d5f..c5f7b8e 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/commands/tabcomplete/ElevatorTab.java @@ -46,6 +46,7 @@ public ElevatorTab(World16Elevators plugin) { tabCompleteList.add("teleport"); tabCompleteList.add("realign"); tabCompleteList.add("boundingbox"); + tabCompleteList.add("volume"); this.elevatorControllerMap = this.plugin.getMemoryHolder().getElevatorControllerMap(); this.soundList = new ArrayList<>(); for (Sound value : Sound.values()) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 22e0158..ebc722f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1 +1,17 @@ -ChunkSmartManagement: false \ No newline at end of file +# When set to true, it will load elevators if the chunk they are in is loaded, and unload them if the chunk is unloaded. +ChunkSmartManagement: false + +# Maximum volume of the elevator bounding box. +# Change this value to set the max size limit of an elevator. +# Use /elevator volume with WorldEdit to find the volume of a selected WorldEdit region. +# Adjust maxSizeOfElevator based on the volume you get from /elevator volume, to fit your needs. +maxSizeOfElevator: 50 + +# Only certain players can create elevators. +# If enabled, only players in the whitelist can create elevators, no matter if they have the permission or even if they are OP. +whitelist: + enabled: false + players: + - "player1" + - "player2" + - "player3" \ No newline at end of file