001package fr.aumgn.bukkitutils.command.arg.basic; 002 003import org.bukkit.command.CommandSender; 004import org.bukkit.entity.Player; 005 006import fr.aumgn.bukkitutils.command.CommandsMessages; 007import fr.aumgn.bukkitutils.command.arg.impl.AsbtractSenderArg; 008import fr.aumgn.bukkitutils.command.exception.CommandUsageError; 009import fr.aumgn.bukkitutils.geom.Vector; 010 011public class VectorArg extends AsbtractSenderArg<Vector> { 012 013 static double parseVectorComponent(CommandsMessages messages, String component) { 014 try { 015 return Double.parseDouble(component); 016 } catch (NumberFormatException exc) { 017 throw new CommandUsageError( 018 messages.notAValidVectorComponent(component)); 019 } 020 } 021 022 private final CommandsMessages messages; 023 024 public VectorArg(CommandsMessages messages, String string) { 025 super(string); 026 this.messages = messages; 027 } 028 029 @Override 030 public Vector value() { 031 String[] splitted = string.split(","); 032 033 if (splitted.length > 3) { 034 throw new CommandUsageError(); 035 } 036 037 double x = parseVectorComponent(messages, splitted[0]); 038 double y = 0.0; 039 double z = 0.0; 040 if (splitted.length > 1) { 041 y = parseVectorComponent(messages, splitted[1]); 042 if (splitted.length > 2) { 043 z = parseVectorComponent(messages, splitted[2]); 044 } 045 } 046 047 return new Vector(x, y, z); 048 } 049 050 @Override 051 protected Vector defaultFor(CommandSender sender) { 052 if (!(sender instanceof Player)) { 053 throw new CommandUsageError(messages.positionNeeded()); 054 } 055 056 return new Vector((Player) sender); 057 } 058 059 @Override 060 protected String missingPermOtherMessage(String permission) { 061 return messages.missingPermissionForOther(permission); 062 } 063}