From 67e73ecdf65fae740b170b43a88fb0aa7c35e1e1 Mon Sep 17 00:00:00 2001 From: TreemanK Date: Sun, 5 Oct 2025 20:06:52 +1100 Subject: [PATCH 1/2] feat: add support for excluding worlds from Wind Charge use Introduces an 'excluded-worlds' config option to disable Wind Charge in specified worlds. Also adds a 'send-error-message' config option to control whether denial messages are sent to players. Updates logic in WindChargeListener to respect these new configuration options. --- .../org/me/pyke/nowindcharge/WindChargeListener.java | 12 ++++++++++-- src/main/resources/config.yml | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java b/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java index 375473c..01cec62 100644 --- a/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java +++ b/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java @@ -49,8 +49,10 @@ public void onPlayerUseWindCharge(PlayerInteractEvent event) { if (isInExcludedRegion(player)) { event.setCancelled(true); - String message = plugin.getConfig().getString("deny-message", "&cYou cannot use this item in region &e%region%&c!"); - player.sendMessage(plugin.formatMessage(message.replace("%region%", getRegionName(player)))); + if (plugin.getConfig().getBoolean("send-error-message", true)) { + String message = plugin.getConfig().getString("deny-message", "&cYou cannot use this item in region &e%region%&c!"); + player.sendMessage(plugin.formatMessage(message.replace("%region%", getRegionName(player)))); + } } } @@ -74,6 +76,12 @@ public void onWindChargeExplosion(ExplosionPrimeEvent event) { private boolean isInExcludedRegion(Player player) { List excludedRegions = plugin.getConfig().getStringList("excluded-regions"); + List excludedWorlds = plugin.getConfig().getStringList("excluded-worlds"); + + // Check if the player's world is in the excluded worlds list + if (excludedWorlds.contains(player.getWorld().getName())) { + return true; + } RegionManager regionManager = com.sk89q.worldguard.WorldGuard.getInstance() .getPlatform() diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 43e99dd..259d60c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,12 +1,16 @@ - disable-completely: true excluded-regions: # Requires WorldGuard - spawn - pvp-arena +excluded-worlds: [] # Add world names here to disable Wind Charge in those worlds + completely-disabled-message: "&cWIND_CHARGE usage is completely disabled!" + +send-error-message: true # If false, deny-message will not be sent to the player deny-message: "&cYou cannot use this item in region &e%region%&c!" + reload-message: "&aConfiguration reloaded!" no-permission-message: "&cYou don't have permission to use this command!" startup-message: "&aNoWindCharge has been enabled!" From a3980148ab8295690349d37516ed340b30a2530b Mon Sep 17 00:00:00 2001 From: TreemanK Date: Sun, 5 Oct 2025 21:21:05 +1100 Subject: [PATCH 2/2] Refactor: exclusion logic and update deny message Refactored region/world exclusion checks into a unified ExclusionType system and updated the deny message to use a generic %area% placeholder instead of %region%. This improves clarity for users and simplifies the code by removing redundant methods. --- .../pyke/nowindcharge/WindChargeListener.java | 90 ++++++++++--------- src/main/resources/config.yml | 2 +- 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java b/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java index 01cec62..6efb276 100644 --- a/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java +++ b/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java @@ -24,6 +24,47 @@ public WindChargeListener(NoWindCharge plugin) { this.plugin = plugin; } + private enum ExclusionType { + WORLD, REGION, NONE + } + + private ExclusionType getExclusionType(Player player) { + List excludedRegions = plugin.getConfig().getStringList("excluded-regions"); + List excludedWorlds = plugin.getConfig().getStringList("excluded-worlds"); + if (excludedWorlds.contains(player.getWorld().getName())) { + return ExclusionType.WORLD; + } + RegionManager regionManager = com.sk89q.worldguard.WorldGuard.getInstance() + .getPlatform() + .getRegionContainer() + .get(BukkitAdapter.adapt(player.getWorld())); + if (regionManager == null) return ExclusionType.NONE; + ApplicableRegionSet regions = regionManager.getApplicableRegions(BukkitAdapter.asBlockVector(player.getLocation())); + for (ProtectedRegion region : regions) { + if (excludedRegions.contains(region.getId())) { + return ExclusionType.REGION; + } + } + return ExclusionType.NONE; + } + + private String getAreaName(Player player, ExclusionType type) { + if (type == ExclusionType.WORLD) { + return player.getWorld().getName(); + } else if (type == ExclusionType.REGION) { + RegionManager regionManager = com.sk89q.worldguard.WorldGuard.getInstance() + .getPlatform() + .getRegionContainer() + .get(BukkitAdapter.adapt(player.getWorld())); + if (regionManager == null) return "unknown"; + ApplicableRegionSet regions = regionManager.getApplicableRegions(BukkitAdapter.asBlockVector(player.getLocation())); + for (ProtectedRegion region : regions) { + return region.getId(); + } + } + return "unknown"; + } + @EventHandler public void onPlayerUseWindCharge(PlayerInteractEvent event) { Player player = event.getPlayer(); @@ -47,11 +88,12 @@ public void onPlayerUseWindCharge(PlayerInteractEvent event) { return; } - if (isInExcludedRegion(player)) { + ExclusionType exclusionType = getExclusionType(player); + if (exclusionType != ExclusionType.NONE) { event.setCancelled(true); if (plugin.getConfig().getBoolean("send-error-message", true)) { - String message = plugin.getConfig().getString("deny-message", "&cYou cannot use this item in region &e%region%&c!"); - player.sendMessage(plugin.formatMessage(message.replace("%region%", getRegionName(player)))); + String message = plugin.getConfig().getString("deny-message", "&cYou cannot use this item in area &e%area%&c!"); + player.sendMessage(plugin.formatMessage(message.replace("%area%", getAreaName(player, exclusionType)))); } } } @@ -75,46 +117,6 @@ public void onWindChargeExplosion(ExplosionPrimeEvent event) { } private boolean isInExcludedRegion(Player player) { - List excludedRegions = plugin.getConfig().getStringList("excluded-regions"); - List excludedWorlds = plugin.getConfig().getStringList("excluded-worlds"); - - // Check if the player's world is in the excluded worlds list - if (excludedWorlds.contains(player.getWorld().getName())) { - return true; - } - - RegionManager regionManager = com.sk89q.worldguard.WorldGuard.getInstance() - .getPlatform() - .getRegionContainer() - .get(BukkitAdapter.adapt(player.getWorld())); - - if (regionManager == null) return false; - - ApplicableRegionSet regions = regionManager.getApplicableRegions(BukkitAdapter.asBlockVector(player.getLocation())); - - for (ProtectedRegion region : regions) { - if (excludedRegions.contains(region.getId())) { - return true; - } - } - - return false; - } - - private String getRegionName(Player player) { - RegionManager regionManager = com.sk89q.worldguard.WorldGuard.getInstance() - .getPlatform() - .getRegionContainer() - .get(BukkitAdapter.adapt(player.getWorld())); - - if (regionManager == null) return "unknown"; - - ApplicableRegionSet regions = regionManager.getApplicableRegions(BukkitAdapter.asBlockVector(player.getLocation())); - - for (ProtectedRegion region : regions) { - return region.getId(); - } - - return "unknown"; + return getExclusionType(player) != ExclusionType.NONE; } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 259d60c..f84a6c3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,7 +9,7 @@ excluded-worlds: [] # Add world names here to disable Wind Charge in those world completely-disabled-message: "&cWIND_CHARGE usage is completely disabled!" send-error-message: true # If false, deny-message will not be sent to the player -deny-message: "&cYou cannot use this item in region &e%region%&c!" +deny-message: "&cYou cannot use this item in area &e%area%&c!" reload-message: "&aConfiguration reloaded!" no-permission-message: "&cYou don't have permission to use this command!"