Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 48 additions & 38 deletions src/main/java/org/me/pyke/nowindcharge/WindChargeListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,47 @@ public WindChargeListener(NoWindCharge plugin) {
this.plugin = plugin;
}

private enum ExclusionType {
WORLD, REGION, NONE
}

private ExclusionType getExclusionType(Player player) {
List<String> excludedRegions = plugin.getConfig().getStringList("excluded-regions");
List<String> 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();
Expand All @@ -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))));
}
}
}

Expand All @@ -73,40 +117,6 @@ public void onWindChargeExplosion(ExplosionPrimeEvent event) {
}

private boolean isInExcludedRegion(Player player) {
List<String> 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;
}
}
8 changes: 6 additions & 2 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
@@ -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!"
Expand Down