From 7ec0cd4f0c77f17d3c052739fa9e0314e3813601 Mon Sep 17 00:00:00 2001 From: charburgx Date: Sat, 11 Jun 2016 17:30:09 -0400 Subject: [PATCH] Added no-enderpearl regions --- .../autoreferee/listeners/EnderpearlTask.java | 34 +++++++++++++++++++ .../autoreferee/listeners/ZoneListener.java | 20 +++++++---- .../autoreferee/regions/AutoRefRegion.java | 5 +-- 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/mctourney/autoreferee/listeners/EnderpearlTask.java diff --git a/src/main/java/org/mctourney/autoreferee/listeners/EnderpearlTask.java b/src/main/java/org/mctourney/autoreferee/listeners/EnderpearlTask.java new file mode 100644 index 00000000..b52c84c7 --- /dev/null +++ b/src/main/java/org/mctourney/autoreferee/listeners/EnderpearlTask.java @@ -0,0 +1,34 @@ +package org.mctourney.autoreferee.listeners; + +import org.bukkit.Location; +import org.bukkit.entity.EnderPearl; +import org.bukkit.entity.Entity; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.mctourney.autoreferee.AutoRefMatch; +import org.mctourney.autoreferee.regions.AutoRefRegion.Flag; + +public class EnderpearlTask extends BukkitRunnable { + + private final EnderPearl enderpearl; + private final AutoRefMatch match; + + public EnderpearlTask(EnderPearl e, AutoRefMatch m) { + this.enderpearl = e; + this.match = m; + } + + @Override + public void run() { + //get enderpearl location + Location loc = enderpearl.getLocation(); + //if the enderpearl is in a no enderpearl region + if(match.hasFlag(loc, Flag.NO_ENDERPEARL)){ + //remove it from existance + enderpearl.remove(); + //stop running tasks on a removed entity + this.cancel(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/org/mctourney/autoreferee/listeners/ZoneListener.java b/src/main/java/org/mctourney/autoreferee/listeners/ZoneListener.java index 0a5958a3..e41f7d78 100644 --- a/src/main/java/org/mctourney/autoreferee/listeners/ZoneListener.java +++ b/src/main/java/org/mctourney/autoreferee/listeners/ZoneListener.java @@ -9,6 +9,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.entity.EnderPearl; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Minecart; @@ -38,6 +39,7 @@ import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; import org.mctourney.autoreferee.AutoRefMatch; import org.mctourney.autoreferee.AutoRefPlayer; import org.mctourney.autoreferee.AutoRefTeam; @@ -164,15 +166,21 @@ public void enderpearlThrow(ProjectileLaunchEvent event) if (match == null || match.getCurrentState() == MatchStatus.NONE) return; if (event.getEntityType() == EntityType.ENDER_PEARL) - { + { Player player = (Player) event.getEntity().getShooter(); AutoRefPlayer apl = match.getPlayer(player); - if (apl != null && apl.getTeam().hasFlag(player.getLocation(), Flag.NO_ENTRY)) - { - String msg = ChatColor.DARK_GRAY + apl.getDisplayName() + - ChatColor.DARK_GRAY + " has thrown an enderpearl while out of bounds."; - for (Player ref : match.getReferees()) ref.sendMessage(msg); + if (apl != null){ + if(apl.getTeam().hasFlag(player.getLocation(), Flag.NO_ENTRY)){ + String msg = ChatColor.DARK_GRAY + apl.getDisplayName() + + ChatColor.DARK_GRAY + " has thrown an enderpearl while out of bounds."; + for (Player ref : match.getReferees()) ref.sendMessage(msg); + } + + if(match.getCurrentState().inProgress()){ + EnderPearl enderpearl = (EnderPearl) event.getEntity(); + BukkitTask task = new EnderpearlTask(enderpearl, apl.getMatch()).runTaskTimer(AutoReferee.getInstance(), 0, 20); + } } } } diff --git a/src/main/java/org/mctourney/autoreferee/regions/AutoRefRegion.java b/src/main/java/org/mctourney/autoreferee/regions/AutoRefRegion.java index 53c85d72..40bb8ed3 100644 --- a/src/main/java/org/mctourney/autoreferee/regions/AutoRefRegion.java +++ b/src/main/java/org/mctourney/autoreferee/regions/AutoRefRegion.java @@ -38,10 +38,11 @@ public static enum Flag NO_ACCESS (1 << 4, false, 'a', "noaccess"), NO_TELEPORT (1 << 5, false, 't', "noteleport"), SPAWNERS_ONLY (1 << 6, false, 'w', "spawnersonly"), - NO_FLOW (1 << 7, true, 'f', "noflow"); + NO_FLOW (1 << 7, true, 'f', "noflow"), + NO_ENDERPEARL (1 << 8, false, 'p', "noenderpearl"); // generated from above values - public static final String OPTIONS = "abenstwf"; + public static final String OPTIONS = "abenstwfp"; private int value; private String name;