Package com.sijobe.spc.command

Source Code of com.sijobe.spc.command.Waypoint

package com.sijobe.spc.command;

import com.sijobe.spc.util.FontColour;
import com.sijobe.spc.util.Settings;
import com.sijobe.spc.validation.Parameter;
import com.sijobe.spc.validation.ParameterString;
import com.sijobe.spc.validation.Parameters;
import com.sijobe.spc.wrapper.CommandException;
import com.sijobe.spc.wrapper.CommandSender;
import com.sijobe.spc.wrapper.Coordinate;
import com.sijobe.spc.wrapper.Player;

import java.text.DecimalFormat;
import java.util.List;

/**
* Commands that control waypoints, settings, removing and using them.
* Waypoints are saved per player
*
* @author simo_415
* @version 1.0
*/
public class Waypoint extends MultipleCommands {

   public static final String PREFIX = "waypoint-";
  
   /**
    * The parameters of the command
    */
   private static final Parameters PARAMETERS = new Parameters (
      new Parameter[] {
         new ParameterString("<NAME>",false),
      }
   );
  
   public Waypoint(String name) {
      super(name);
   }
  
   @Override
   public boolean isEnabled() {
      return true;
   }

   @Override
   public String[] getCommands() {
      return new String[] {"set", "rem", "goto"};
   }

   @Override
   public void execute(CommandSender sender, List<?> params) throws CommandException {
      Player player = super.getSenderAsPlayer(sender);
      if (getName().equalsIgnoreCase("set")) {
         setWaypoint((String)params.get(0), player);
         player.sendChatMessage("Waypoint was set at " + FontColour.AQUA + getLocationAsString(player.getPosition()));
      } else if (getName().equalsIgnoreCase("rem")) {
         if (removeWaypoint((String)params.get(0), player)) {
            player.sendChatMessage("Waypoint was removed.");
         } else {
            throw new CommandException("Waypoint does not exist.");
         }
      } else if (getName().equalsIgnoreCase("goto")) {
         if (gotoWaypoint((String)params.get(0), player)) {
            player.sendChatMessage("Whoosh");
         } else {
            throw new CommandException("Waypoint does not exist.");
         }
      } else {
         assert false : "Unexpected call not being handled: " + params.get(0);
      }
      super.loadSettings(player).save();
   }
  
   private String getLocationAsString(Coordinate c) {
      if (c == null) {
         return "N/A";
      }
      DecimalFormat twodd = new DecimalFormat("#.##");
      return twodd.format(c.getX()) + "," + twodd.format(c.getY()) + "," + twodd.format(c.getZ());
   }
  
   /**
    * Sets a waypoint at the location the player is currently standing in.
    *
    * @param name - The name of the waypoint
    * @param player - The player to add the waypoint for
    */
   public void setWaypoint(String name, Player player) {
      if (name == null || player == null) {
         return;
      }
      Settings config = super.loadSettings(player);
      Coordinate position = player.getPosition();
      String value = position.getX() + "," +
                     position.getY() + "," +
                     position.getZ() + "," +
                     player.getYaw() + "," +
                     player.getPitch();
      config.set((PREFIX + name).toLowerCase(), value);
   }
  
   /**
    * Removes the specified waypoint from the player.
    *
    * @param name - The name of the waypoint
    * @param player - The player to remove the waypoint from
    * @return True if the waypoint existed and was removed
    */
   public boolean removeWaypoint(String name, Player player) {
      if (name == null || player == null) {
         return false;
      }
      Settings config = super.loadSettings(player);
      return config.remove((PREFIX + name).toLowerCase()) != null;
   }
  
   public boolean gotoWaypoint(String name, Player player) {
      if (name == null || player == null) {
         return false;
      }
      Settings config = super.loadSettings(player);
      String waypoint = config.getString((PREFIX + name).toLowerCase(), null);
      if (waypoint == null) {
         return false;
      }
      String parts[] = waypoint.split(",");
      if (parts.length != 5) {
         return false;
      }
      double x = Double.parseDouble(parts[0]);
      double y = Double.parseDouble(parts[1]);
      double z = Double.parseDouble(parts[2]);
      float yaw = Float.parseFloat(parts[3]);
      float pitch = Float.parseFloat(parts[4]);
      player.setPosition(new Coordinate(x, y, z));
      player.setYaw(yaw);
      player.setPitch(pitch);
      return true;
   }

   @Override
   public Parameters getParameters() {
      return PARAMETERS;
   }
}
TOP

Related Classes of com.sijobe.spc.command.Waypoint

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.