Cleans the boundary bypass listener
This commit is contained in:
		@@ -2,7 +2,7 @@ package net.knarcraft.hungerarena;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
 | 
					import com.sk89q.worldedit.bukkit.WorldEditPlugin;
 | 
				
			||||||
import net.knarcraft.hungerarena.Listeners.BlockChangeListener;
 | 
					import net.knarcraft.hungerarena.Listeners.BlockChangeListener;
 | 
				
			||||||
import net.knarcraft.hungerarena.Listeners.Boundaries;
 | 
					import net.knarcraft.hungerarena.Listeners.BoundaryBypassListener;
 | 
				
			||||||
import net.knarcraft.hungerarena.Listeners.ChatListener;
 | 
					import net.knarcraft.hungerarena.Listeners.ChatListener;
 | 
				
			||||||
import net.knarcraft.hungerarena.Listeners.DeathListener;
 | 
					import net.knarcraft.hungerarena.Listeners.DeathListener;
 | 
				
			||||||
import net.knarcraft.hungerarena.Listeners.FreezeListener;
 | 
					import net.knarcraft.hungerarena.Listeners.FreezeListener;
 | 
				
			||||||
@@ -107,7 +107,7 @@ public class HungerArena extends JavaPlugin {
 | 
				
			|||||||
    final Listener BlockStorage = new BlockChangeListener(this);
 | 
					    final Listener BlockStorage = new BlockChangeListener(this);
 | 
				
			||||||
    //Listener WinGames = new WinGamesListener(this);
 | 
					    //Listener WinGames = new WinGamesListener(this);
 | 
				
			||||||
    final Listener WorldChange = new WorldChange(this);
 | 
					    final Listener WorldChange = new WorldChange(this);
 | 
				
			||||||
    final Listener Boundaries = new Boundaries(this);
 | 
					    final Listener Boundaries = new BoundaryBypassListener(this);
 | 
				
			||||||
    final Listener spawnsListener = new spawnsListener(this);
 | 
					    final Listener spawnsListener = new spawnsListener(this);
 | 
				
			||||||
    final CommandExecutor HaCommands = new HaCommands(this);
 | 
					    final CommandExecutor HaCommands = new HaCommands(this);
 | 
				
			||||||
    final CommandExecutor SponsorCommands = new SponsorCommands(this);
 | 
					    final CommandExecutor SponsorCommands = new SponsorCommands(this);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,85 +0,0 @@
 | 
				
			|||||||
package net.knarcraft.hungerarena.Listeners;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import net.knarcraft.hungerarena.HungerArena;
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.ChatColor;
 | 
					 | 
				
			||||||
import org.bukkit.Location;
 | 
					 | 
				
			||||||
import org.bukkit.World;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					 | 
				
			||||||
import org.bukkit.event.Listener;
 | 
					 | 
				
			||||||
import org.bukkit.event.block.BlockBreakEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.player.PlayerMoveEvent;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					 | 
				
			||||||
import java.util.Map.Entry;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class Boundaries implements Listener {
 | 
					 | 
				
			||||||
    public final HungerArena plugin;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public Boundaries(HungerArena m) {
 | 
					 | 
				
			||||||
        this.plugin = m;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @EventHandler
 | 
					 | 
				
			||||||
    public void boundsCheck(PlayerMoveEvent event) {
 | 
					 | 
				
			||||||
        Player p = event.getPlayer();
 | 
					 | 
				
			||||||
        boolean inGame = plugin.getArena(p) != null;
 | 
					 | 
				
			||||||
        boolean spectating = plugin.isSpectating(p);
 | 
					 | 
				
			||||||
        if (plugin.config.getBoolean("WorldEdit")) {
 | 
					 | 
				
			||||||
            if (insideBounds(p.getLocation()) && (inGame || spectating) || (!insideBounds(p.getLocation()) && inGame)) {
 | 
					 | 
				
			||||||
                event.setCancelled(true);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @EventHandler
 | 
					 | 
				
			||||||
    public void blockBounds(BlockBreakEvent event) {
 | 
					 | 
				
			||||||
        Player p = event.getPlayer();
 | 
					 | 
				
			||||||
        if (plugin.getArena(p) == null) {
 | 
					 | 
				
			||||||
            if (plugin.config.getBoolean("WorldEdit")) {
 | 
					 | 
				
			||||||
                if (insideBounds(event.getBlock().getLocation())) {
 | 
					 | 
				
			||||||
                    p.sendMessage(ChatColor.RED + "That block is protected by HungerArena!");
 | 
					 | 
				
			||||||
                    event.setCancelled(true);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public boolean insideBounds(Location l) {
 | 
					 | 
				
			||||||
        Location minl = null;
 | 
					 | 
				
			||||||
        Location maxl = null;
 | 
					 | 
				
			||||||
        if (plugin.spawns.get("Arena") != null) {
 | 
					 | 
				
			||||||
            Map<String, Object> temp = plugin.spawns.getConfigurationSection("Arena").getValues(false);
 | 
					 | 
				
			||||||
            for (Entry<String, Object> entry : temp.entrySet()) {
 | 
					 | 
				
			||||||
                if (plugin.spawns.getConfigurationSection("Arena." + entry.getKey()) != null) {
 | 
					 | 
				
			||||||
                    String[] min = (plugin.spawns.get("Arena." + entry.getKey()) + ".Min").split(",");
 | 
					 | 
				
			||||||
                    String[] max = (plugin.spawns.get("Arena." + entry.getKey()) + ".Max").split(",");
 | 
					 | 
				
			||||||
                    try {
 | 
					 | 
				
			||||||
                        World world = Bukkit.getWorld(min[0]);
 | 
					 | 
				
			||||||
                        double x = Double.parseDouble(min[1]);
 | 
					 | 
				
			||||||
                        double y = Double.parseDouble(min[2]);
 | 
					 | 
				
			||||||
                        double z = Double.parseDouble(min[3]);
 | 
					 | 
				
			||||||
                        minl = new Location(world, x, y, z);
 | 
					 | 
				
			||||||
                        World world2 = Bukkit.getWorld(max[0]);
 | 
					 | 
				
			||||||
                        double x2 = Double.parseDouble(max[1]);
 | 
					 | 
				
			||||||
                        double y2 = Double.parseDouble(max[2]);
 | 
					 | 
				
			||||||
                        double z2 = Double.parseDouble(max[3]);
 | 
					 | 
				
			||||||
                        minl = new Location(world2, x2, y2, z2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if (minl != null && maxl != null) {
 | 
					 | 
				
			||||||
                            return l.getX() >= minl.getBlockX()
 | 
					 | 
				
			||||||
                                    && l.getX() < maxl.getBlockX() + 1 && l.getY() >= minl.getBlockY()
 | 
					 | 
				
			||||||
                                    && l.getY() < maxl.getBlockY() + 1 && l.getZ() >= minl.getBlockZ()
 | 
					 | 
				
			||||||
                                    && l.getZ() < maxl.getBlockZ() + 1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    } catch (Exception e) {
 | 
					 | 
				
			||||||
                        System.out.println(e);
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -0,0 +1,123 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.hungerarena.Listeners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.hungerarena.Arena;
 | 
				
			||||||
 | 
					import net.knarcraft.hungerarena.HungerArena;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.ChatColor;
 | 
				
			||||||
 | 
					import org.bukkit.Location;
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
 | 
					import org.bukkit.event.block.BlockBreakEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.player.PlayerMoveEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A listener for players doing anything that would bypass the arena's defined boundaries
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class BoundaryBypassListener implements Listener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public final HungerArena plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public BoundaryBypassListener(HungerArena hungerArena) {
 | 
				
			||||||
 | 
					        this.plugin = hungerArena;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @EventHandler
 | 
				
			||||||
 | 
					    public void leavingBoundsListener(PlayerMoveEvent event) {
 | 
				
			||||||
 | 
					        if (event.isCancelled()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //If not restricted to a WorldEdit area, abort
 | 
				
			||||||
 | 
					        if (!plugin.config.getBoolean("WorldEdit")) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Player player = event.getPlayer();
 | 
				
			||||||
 | 
					        Arena playerArena = plugin.getArena(player);
 | 
				
			||||||
 | 
					        if (playerArena == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //If currently in bounds and in a game or spectating, and about to leave the bounds, deny movement
 | 
				
			||||||
 | 
					        if (insideBounds(event.getFrom(), playerArena.getArenaId()) &&
 | 
				
			||||||
 | 
					                !insideBounds(event.getTo(), playerArena.getArenaId())) {
 | 
				
			||||||
 | 
					            event.setCancelled(true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @EventHandler
 | 
				
			||||||
 | 
					    public void blockBounds(BlockBreakEvent event) {
 | 
				
			||||||
 | 
					        if (event.isCancelled()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //If not restricted to a WorldEdit area, abort
 | 
				
			||||||
 | 
					        if (!plugin.config.getBoolean("WorldEdit")) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Player player = event.getPlayer();
 | 
				
			||||||
 | 
					        Arena playerArena = plugin.getArena(player);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (playerArena == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (insideBounds(event.getBlock().getLocation(), playerArena.getArenaId())) {
 | 
				
			||||||
 | 
					            player.sendMessage(ChatColor.RED + "That block is protected by HungerArena!");
 | 
				
			||||||
 | 
					            event.setCancelled(true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Checks if the given location is inside the bounds of the given arena
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param location <p>The location to check</p>
 | 
				
			||||||
 | 
					     * @param arenaId  <p>The id of the arena to check</p>
 | 
				
			||||||
 | 
					     * @return <p>True if the location is inside the arena's bounds</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public boolean insideBounds(Location location, int arenaId) {
 | 
				
			||||||
 | 
					        if (plugin.spawns.get("Arena") == null) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Location minimumCorner;
 | 
				
			||||||
 | 
					        Location maximumCorner;
 | 
				
			||||||
 | 
					        if (plugin.spawns.getConfigurationSection("Arena." + arenaId) == null) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        String[] min = (plugin.spawns.get("Arena." + arenaId) + ".Min").split(",");
 | 
				
			||||||
 | 
					        String[] max = (plugin.spawns.get("Arena." + arenaId) + ".Max").split(",");
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            minimumCorner = getLocation(min);
 | 
				
			||||||
 | 
					            maximumCorner = getLocation(max);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return location.getX() >= minimumCorner.getBlockX() &&
 | 
				
			||||||
 | 
					                    location.getX() < maximumCorner.getBlockX() + 1 &&
 | 
				
			||||||
 | 
					                    location.getY() >= minimumCorner.getBlockY() &&
 | 
				
			||||||
 | 
					                    location.getY() < maximumCorner.getBlockY() + 1 &&
 | 
				
			||||||
 | 
					                    location.getZ() >= minimumCorner.getBlockZ() &&
 | 
				
			||||||
 | 
					                    location.getZ() < maximumCorner.getBlockZ() + 1;
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            System.out.println(e.getMessage());
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the location defined in the given info list (world,x,y,z)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param location <p>The string list describing the location</p>
 | 
				
			||||||
 | 
					     * @return <p>The parsed location</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private Location getLocation(String[] location) throws NumberFormatException {
 | 
				
			||||||
 | 
					        World world = Bukkit.getWorld(location[0]);
 | 
				
			||||||
 | 
					        double x = Double.parseDouble(location[1]);
 | 
				
			||||||
 | 
					        double y = Double.parseDouble(location[2]);
 | 
				
			||||||
 | 
					        double z = Double.parseDouble(location[3]);
 | 
				
			||||||
 | 
					        return new Location(world, x, y, z);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -69,7 +69,7 @@ Cannon_Death: true
 | 
				
			|||||||
# Whether players are allowed to use beds, or not!
 | 
					# Whether players are allowed to use beds, or not!
 | 
				
			||||||
DenyBedUsage: true
 | 
					DenyBedUsage: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Whether to have the arena be the world or the WorldEdit selection
 | 
					# Whether the arena is limited to the selected WorldEdit region instead of the entire world
 | 
				
			||||||
WorldEdit: false
 | 
					WorldEdit: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# What item should be used to set spawns after /startpoint [arena#]
 | 
					# What item should be used to set spawns after /startpoint [arena#]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user