/[projects]/miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/WhereisCommand.java
ViewVC logotype

Annotation of /miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/WhereisCommand.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1236 - (hide annotations) (download)
Sun Mar 20 16:23:13 2011 UTC (13 years, 2 months ago) by torben
Original Path: miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/WhereisCommand.java
File size: 2706 byte(s)


1 torben 1236 package dk.thoerup.bukkit.hoeruputils;
2    
3     import org.bukkit.Location;
4     import org.bukkit.Server;
5     import org.bukkit.command.Command;
6     import org.bukkit.command.CommandExecutor;
7     import org.bukkit.command.CommandSender;
8     import org.bukkit.entity.Player;
9    
10     public class WhereisCommand implements CommandExecutor {
11    
12     Server server;
13    
14     public WhereisCommand(Server server) {
15     this.server = server;
16     }
17    
18     @Override
19     public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
20    
21     if (!(sender instanceof Player)) {
22     sender.sendMessage("Whereis: What are you");
23     return true;
24     }
25    
26     if (args.length != 1) {
27     sender.sendMessage("Usage: /whereis <playername>");
28     return true;
29     }
30    
31     Player target = server.getPlayer(args[0]);
32    
33     if (target == null) {
34     sender.sendMessage("Whereis: Could not find player: " + args[0] );
35     return true;
36     }
37    
38     Location targetLoc = target.getLocation();
39     Player player = (Player) sender;
40    
41     int dist = calcDistance(player.getLocation(), targetLoc);
42     int bearing = calcBearing(player.getLocation(), targetLoc);
43    
44    
45     target.sendMessage("Whereis: you are tracked by " + player.getName() );
46    
47     player.sendMessage("Whereis: " + target.getName() + " is at " + (int)targetLoc.getX() + "," + (int)targetLoc.getY() + "," +(int)targetLoc.getZ() );
48     player.sendMessage("Distance: " + dist + ", bearing: " + bearing + "(" + getBearingStr(bearing) + ")" );
49    
50     return true;
51     }
52    
53     public static String getBearingStr(int angle) {
54     if (angle < 22) {
55     return "N";
56     } else if (angle < 67) {
57     return "NE";
58     } else if (angle < 112) {
59     return "E";
60     } else if (angle < 157) {
61     return "SE";
62     } else if (angle < 202) {
63     return "S";
64     } else if (angle < 257) {
65     return "SW";
66     } else if (angle < 292) {
67     return "W";
68     } else if (angle < 337) {
69     return "NW";
70     } else {
71     return "N";
72     }
73     }
74    
75     public static int calcDistance(Location loc1, Location loc2) {
76     double distX = loc1.getX() - loc2.getX() ;
77     double distZ = loc1.getZ() - loc2.getZ() ;
78    
79     int dist = (int) Math.round( Math.sqrt( (distX*distX) + (distZ*distZ)) );
80    
81     return dist;
82     }
83    
84     public static int calcBearing(Location loc1, Location loc2) {
85     double distX = loc1.getX() - loc2.getX() ;
86     double distZ = loc1.getZ() - loc2.getZ() ;
87    
88     double angle = Math.toDegrees( Math.atan( distZ / distX ) );
89     if (angle < 0.0)
90     angle += 90.0;
91    
92    
93     if (distX >= 0.0 && distZ >= 0.0) { //both positive, 0-90 degrees
94     //do nothing
95     } else if (distX < 0.0 && distZ >= 0.0) { // 90-180 degrees
96     angle += 90.0;
97     } else if (distX < 0.0 && distZ < 0.0) {//Both negative 180-270 degrees
98     angle += 180.0;
99     } else {
100     angle += 270.0;
101     }
102    
103     return (int) angle;
104     }
105    
106    
107     }

  ViewVC Help
Powered by ViewVC 1.1.20