Package com.epicsagaonline.bukkit.EpicZones

Source Code of com.epicsagaonline.bukkit.EpicZones.EpicZonesVehicleListener

package com.epicsagaonline.bukkit.EpicZones;

import java.awt.Point;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Vehicle;
import org.bukkit.event.vehicle.VehicleListener;
import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.util.Vector;

public class EpicZonesVehicleListener extends VehicleListener
{

  //private final EpicZones plugin;
  private final Vector zero = new Vector(0,0,0);

  public EpicZonesVehicleListener(EpicZones instance)
  {
    //plugin = instance;
  }

  public @Override void onVehicleMove(VehicleMoveEvent event)
  {

    Vehicle vehicle = event.getVehicle();
    Entity passenger = vehicle.getPassenger();

    if(passenger != null)
    {
      EpicZonePlayer ezp = General.getPlayer(passenger.getEntityId());

      if(ezp != null)
      {
        int playerHeight = event.getTo().getBlockY();
        Point playerPoint = new Point(event.getTo().getBlockX(), event.getTo().getBlockZ());

        if(General.ShouldCheckPlayer(ezp))
        {
          if(!ezp.isTeleporting())
          {
            if(ezp.getCurrentLocation() == null){ezp.setCurrentLocation(event.getFrom());}
            if(!VehicleWithinZoneLogic((Player)passenger, ezp, playerHeight, playerPoint))
            {
              ezp.setIsTeleporting(true);
              vehicle.teleportTo(ezp.getCurrentLocation());
              vehicle.setVelocity(zero);
              ezp.setIsTeleporting(false);
              //event.setTo(ezp.getCurrentLocation());
              //event.setCancelled(true);
            }
            else
            {
              ezp.setCurrentLocation(event.getFrom());
            }
          }
          ezp.Check();
        }
      }
    }
  }

  public static boolean VehicleWithinZoneLogic(Player player, EpicZonePlayer ezp, int playerHeight, Point playerPoint)
  {

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

    if(General.pointWithinBorder(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
          {
            General.WarnPlayer(player, ezp, General.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
    {
      General.WarnPlayer(player, ezp, General.NO_PERM_BORDER);
      return false;
    }

    return true;

  }

  private static 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(playerHeight, playerPoint, worldName);
    }

    return result;

  }
}
TOP

Related Classes of com.epicsagaonline.bukkit.EpicZones.EpicZonesVehicleListener

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.