Package com.bukkit.epicsaga.EpicZones

Source Code of com.bukkit.epicsaga.EpicZones.EpicZonesPlayerListener

package com.bukkit.epicsaga.EpicZones;

import java.awt.Point;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerItemEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;

import com.bukkit.epicsaga.EpicZones.EpicZonePlayer.EpicZoneMode;
import com.bukkit.epicsaga.EpicZones.CommandHandlers.ReloadCommandHandler;
import com.bukkit.epicsaga.EpicZones.CommandHandlers.WhoCommandHandler;
import com.bukkit.epicsaga.EpicZones.CommandHandlers.ZoneCommandHandler;

//import sun.security.mscapi.KeyStore.MY;

/**
* Handle events for all Player related events
* @author jblaske
*/
public class EpicZonesPlayerListener extends PlayerListener
{
  private final EpicZones plugin;
  private static final String NO_PERM_ENTER = "You do not have permission to enter ";
  private static final String NO_PERM_BORDER = "You have reached the border of the map.";
  private static final String NO_PERM_BUCKET = "You do not have permissions to do that in this zone.";
  private static final int EMPTY_BUCKET = 325;
  private Set<Integer> bucketTypes = new HashSet<Integer>();

  public EpicZonesPlayerListener(EpicZones instance)
  {
    plugin = instance;
    bucketTypes.add(326);
    bucketTypes.add(327);
  }

  public @Override void onPlayerMove(PlayerMoveEvent event)
  {

    Player player = event.getPlayer();
    EpicZonePlayer ezp = General.getPlayer(player.getName());
    int playerHeight = event.getTo().getBlockY();
    Point playerPoint = new Point(event.getTo().getBlockX(), event.getTo().getBlockZ());

    if(ShouldCheckPlayer(ezp))
    {
      if(!ezp.isTeleporting())
      {
        if(ezp.getCurrentLocation() == null){ezp.setCurrentLocation(event.getFrom());}
        if(!PlayerWithinZoneLogic(player, ezp, playerHeight, playerPoint))
        {
          ezp.setIsTeleporting(true);
          player.teleportTo(ezp.getCurrentLocation());
          ezp.setIsTeleporting(false);
          event.setTo(ezp.getCurrentLocation());
          event.setCancelled(true);
        }
        else
        {
          ezp.setCurrentLocation(event.getFrom());
        }
      }
      ezp.Check();
    }

  }

  public @Override void onPlayerTeleport(PlayerMoveEvent event)
  {

    Player player = event.getPlayer();
    EpicZonePlayer ezp = General.getPlayer(player.getName());
    int playerHeight = event.getTo().getBlockY();
    Point playerPoint = new Point(event.getTo().getBlockX(), event.getTo().getBlockZ());

    if(ShouldCheckPlayer(ezp))
    {
      if(!ezp.isTeleporting())
      {
        if(ezp.getEntityID() != player.getEntityId()){ezp.setEntityID(player.getEntityId());}
        if(ezp.getCurrentLocation() == null){ezp.setCurrentLocation(event.getFrom());}
        if(!PlayerWithinZoneLogic(player, ezp, playerHeight, playerPoint))
        {
          ezp.setIsTeleporting(true);
          player.teleportTo(ezp.getCurrentLocation());
          ezp.setIsTeleporting(false);
          event.setTo(ezp.getCurrentLocation());
          event.setCancelled(true);
        }
        {
          ezp.setCurrentLocation(event.getTo());
        }
      }
      ezp.Check();
    }

  }
 
  private boolean PlayerWithinZoneLogic(Player player, EpicZonePlayer ezp, int playerHeight, Point playerPoint)
  {

    EpicZone foundZone = null;
    String worldName = player.getWorld().getName();

    if(playerWithinBorder(playerPoint, player))
    {

      foundZone = FindZone(player, ezp, playerHeight, playerPoint, worldName);

      if(foundZone != null)
      {

        if (ezp.getCurrentZone() == null || foundZone != ezp.getCurrentZone())
        {
          if(General.hasPermissions(player, foundZone, "entry"))
          {
            ezp.setCurrentZone(foundZone);
            if(foundZone.getEnterText().length() > 0){player.sendMessage(foundZone.getEnterText());}
          }
          else
          {
            WarnPlayer(player, ezp, NO_PERM_ENTER + foundZone.getName());
            return false;
          }
        }

      }
      else
      {
        if (ezp.getCurrentZone() != null)
        {
          if(ezp.getCurrentZone().getExitText().length() > 0){player.sendMessage(ezp.getCurrentZone().getExitText());}
          ezp.setCurrentZone(null);
        }
      }
    }
    else
    {
      WarnPlayer(player, ezp, NO_PERM_BORDER);
      return false;
    }

    return true;

  }

  private EpicZone FindZone(Player player, EpicZonePlayer ezp, int playerHeight, Point playerPoint, String worldName)
  {
   
    EpicZone result = null;
   
    if(ezp.getCurrentZone() != null)
    {

      String resultTag;
      result = ezp.getCurrentZone();
      resultTag = General.isPointInZone(result, playerHeight, playerPoint, worldName);
      if(resultTag.length() > 0)
      {
        if(!resultTag.equalsIgnoreCase(ezp.getCurrentZone().getTag()))
        {
          result = General.myZones.get(resultTag);
        }
      }
      else
      {
        result = null;
      }

    }
    else
    {
      result = General.getZoneForPoint(player, ezp, playerHeight, playerPoint, worldName);
    }
   
    return result;
   
  }
 
  private void WarnPlayer(Player player, EpicZonePlayer ezp, String message)
  {
    if (ezp.getLastWarned().before(new Date()))
    {
      player.sendMessage(message);
      ezp.Warn();
    }
  }

  private boolean ShouldCheckPlayer(EpicZonePlayer ezp)
  {
    if (ezp.getLastCheck().before(new Date()))
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  public @Override void onPlayerLogin(PlayerLoginEvent event)
  {
    if(event.getResult() != Result.ALLOWED)
      return;

    General.addPlayer(event.getPlayer().getEntityId(), event.getPlayer().getName());
  }

  public @Override void onPlayerQuit(PlayerEvent event)
  {
    General.removePlayer(event.getPlayer().getEntityId());
  }

  public @Override void onPlayerCommand(PlayerChatEvent event)
  {
    if(!event.isCancelled())
    {
      String[] split = event.getMessage().split("\\s");
      if (split[0].equalsIgnoreCase("/who")){WhoCommandHandler.Process(split, event);}
      else if (split[0].equalsIgnoreCase("/reloadez")){ReloadCommandHandler.Process(split, event, plugin);}
      else if (split[0].equalsIgnoreCase("/zone")){ZoneCommandHandler.Process(split, event);}
    }
  }

  public @Override void onPlayerItem(PlayerItemEvent event)
  {

    if (bucketTypes.contains((event.getPlayer().getItemInHand().getTypeId())))
    {

      Player player = event.getPlayer();
      EpicZonePlayer ezp = General.getPlayer(player.getName());
      Point blockPoint = new Point(event.getBlockClicked().getLocation().getBlockX(), event.getBlockClicked().getLocation().getBlockZ());
      String worldName = player.getWorld().getName();
      int blockHeight = event.getBlockClicked().getLocation().getBlockY();
      boolean hasPerms = false;

      EpicZone currentZone = null;

      currentZone = General.getZoneForPoint(player, ezp, blockHeight, blockPoint, worldName);
      hasPerms = General.hasPermissions(player, currentZone, "build");

      if(!hasPerms)
      {
        if (ezp.getLastWarned().before(new Date()))
        {
          player.sendMessage(NO_PERM_BUCKET);
          ezp.Warn();
        }
        event.setCancelled(true);
      }

    }
    else if(event.getPlayer().getItemInHand().getTypeId() == EMPTY_BUCKET)
    {
      Player player = event.getPlayer();
      EpicZonePlayer ezp = General.getPlayer(player.getName());
      Point blockPoint = new Point(event.getBlockClicked().getLocation().getBlockX(), event.getBlockClicked().getLocation().getBlockZ());
      String worldName = player.getWorld().getName();
      int blockHeight = event.getBlockClicked().getLocation().getBlockY();
      boolean hasPerms = false;

      EpicZone currentZone = null;

      currentZone = General.getZoneForPoint(player, ezp, blockHeight, blockPoint, worldName);
      hasPerms = General.hasPermissions(player, currentZone, "destroy");

      if(!hasPerms)
      {
        if (ezp.getLastWarned().before(new Date()))
        {
          player.sendMessage(NO_PERM_BUCKET);
          ezp.Warn();
        }
        event.setCancelled(true);
      }
    }
    else if(event.getPlayer().getItemInHand().getTypeId() == General.config.zoneTool)
    {
      if(General.getPlayer(event.getPlayer().getEntityId()).getMode() == EpicZoneMode.ZoneDraw)
      {
        Point point = new Point(event.getBlockClicked().getLocation().getBlockX(), event.getBlockClicked().getLocation().getBlockZ());
        General.getPlayer(event.getPlayer().getEntityId()).getEditZone().addPoint(point);
        event.getPlayer().sendMessage("Point " + point.x + ":" + point.y + " added to zone.");
      }
    }

  }

  private boolean playerWithinBorder(Point point, Player player)
  {

    EpicZonePlayer ezp = General.getPlayer(player.getName());
    double xsquared = point.x * point.x;
    double ysquared = point.y * point.y;
    double distanceFromCenter = Math.sqrt(xsquared + ysquared);

    ezp.setDistanceFromCenter((int)distanceFromCenter);

    if(General.config.enableRadius && !EpicZones.permissions.has(player, "epiczones.ignoremapradius"))
    {

      //WarnPlayer(player, ezp, "Distance From Center: " + distanceFromCenter);
      if(distanceFromCenter <= General.config.mapRadius)
      {
        return true;
      }
      else
      {
        return false;
      }

    }
    else
    {
      return true;
    }
  }
}
TOP

Related Classes of com.bukkit.epicsaga.EpicZones.EpicZonesPlayerListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.