diff --git a/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java b/src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java index 375473c..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,10 +88,13 @@ public void onPlayerUseWindCharge(PlayerInteractEvent event) { return; } - if (isInExcludedRegion(player)) { + ExclusionType exclusionType = getExclusionType(player); + if (exclusionType != ExclusionType.NONE) { 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 area &e%area%&c!"); + player.sendMessage(plugin.formatMessage(message.replace("%area%", getAreaName(player, exclusionType)))); + } } } @@ -73,40 +117,6 @@ public void onWindChargeExplosion(ExplosionPrimeEvent event) { } private boolean isInExcludedRegion(Player player) { - List excludedRegions = plugin.getConfig().getStringList("excluded-regions"); - - 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 43e99dd..f84a6c3 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!" -deny-message: "&cYou cannot use this item in region &e%region%&c!" + +send-error-message: true # If false, deny-message will not be sent to the player +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!" startup-message: "&aNoWindCharge has been enabled!"