/[projects]/miscJava/minecraft-plugins/hoeruputils/src/HoerupUtils.java
ViewVC logotype

Diff of /miscJava/minecraft-plugins/hoeruputils/src/HoerupUtils.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

miscJava/minecraft-plugins/setposplugin/src/Setpos.java revision 1170 by torben, Mon Oct 18 21:33:18 2010 UTC miscJava/minecraft-plugins/hoeruputils/src/HoerupUtils.java revision 1198 by torben, Sun Nov 28 20:48:20 2010 UTC
# Line 1  Line 1 
1    
2  import java.util.logging.*;  import java.util.logging.*;
3    import java.util.*;
4    
5  public class Setpos extends Plugin {  public class HoerupUtils extends Plugin {
6    
7          final static Logger log = Logger.getLogger("SetposPlugin");          final static Logger log = Logger.getLogger("HoerupUtils");
8    
9    
10            private void registerCommands() {
11                    etc e = etc.getInstance();
12                    e.addCommand("/setpos", "[x] [z] <height> - Teleports you to the given coordinates");
13                    e.addCommand("/whereis", "[player] - Tells you the position of another player");
14                    e.addCommand("/fillarea", "");
15                    e.addCommand("/levelarea", "");
16                    e.addCommand("/setsurface", "");
17            }
18                    
19          @Override          @Override
20          public void disable() {}          public void enable() {
21                    registerCommands();
22            }
23    
24          @Override          @Override
25          public void enable() {}          public void disable() {
26                    etc e = etc.getInstance();
27                    e.removeCommand("/setpos");
28                    e.removeCommand("/whereis");
29                    e.removeCommand("/fillarea");
30                    e.removeCommand("/levelarea");
31                    e.removeCommand("/setsurface");
32            }
33    
34                    
35          @Override          @Override
36          public void initialize() {          public void initialize() {
37                  PluginLoader loader = etc.getLoader();                  PluginLoader loader = etc.getLoader();
38                  loader.addListener( PluginLoader.Hook.COMMAND, new RealSetposPlugin(), this, PluginListener.Priority.MEDIUM );                  loader.addListener( PluginLoader.Hook.COMMAND, new HoerupUtilsPlugin(), this, PluginListener.Priority.MEDIUM );
39                    loader.addListener( PluginLoader.Hook.LOGIN, new ConnectedUsers(), this, PluginListener.Priority.MEDIUM );
40    
41                    Jail j = new Jail();
42                    loader.addListener( PluginLoader.Hook.TELEPORT, j, this, PluginListener.Priority.MEDIUM);
43                    loader.addListener( PluginLoader.Hook.COMMAND, j, this, PluginListener.Priority.MEDIUM );
44                    loader.addListener( PluginLoader.Hook.PLAYER_MOVE, j, this, PluginListener.Priority.MEDIUM );
45    
46                    AdminDestroy adm = new AdminDestroy();
47                    loader.addListener( PluginLoader.Hook.COMMAND, adm, this, PluginListener.Priority.MEDIUM);
48                    loader.addListener( PluginLoader.Hook.BLOCK_DESTROYED, adm, this, PluginListener.Priority.MEDIUM );
49                    loader.addListener( PluginLoader.Hook.DISCONNECT, adm, this, PluginListener.Priority.MEDIUM );
50    
51    
52                    registerCommands();
53            }
54    
55    
56    
57            class ConnectedUsers extends PluginListener {
58                    public void onLogin(Player player) {
59                            List<Player> players = etc.getServer().getPlayerList();
60                            int count = players.size();
61    
62                            StringBuilder sb = new StringBuilder();
63                            for (int i=0; i<count; i++) {
64                                    if (i>0)
65                                            sb.append(" ");
66                                    sb.append( players.get(i).getName() );
67                            }
68    
69                            player.sendMessage(Colors.Red + "Connected users " + count + ": " + Colors.White + sb.toString() );
70                    }
71            }
72    
73    
74            public static String getBearingStr(int angle) {
75                    if (angle < 22) {
76                            return "N";
77                    } else if (angle < 67) {
78                            return "NE";
79                    } else if (angle < 112) {
80                            return "E";
81                    } else if (angle < 157) {
82                            return "SE";
83                    } else if (angle < 202) {
84                            return "S";
85                    } else if (angle < 257) {
86                            return "SW";
87                    } else if (angle < 292) {
88                            return "W";
89                    } else if (angle < 337) {
90                            return "NW";
91                    } else {
92                            return "N";
93                    }
94            }
95    
96            public static int calcDistance(Location loc1, Location loc2) {
97                    double distX =   loc1.x - loc2.x  ;
98                    double distZ =   loc1.z - loc2.z  ;
99    
100                    int dist = (int) Math.round( Math.sqrt( (distX*distX) + (distZ*distZ)) );
101    
102                    return dist;
103          }          }
104    
105            public static int calcBearing(Location loc1, Location loc2) {
106                    double distX =   loc1.x - loc2.x  ;
107                    double distZ =   loc1.z - loc2.z  ;
108    
109                    double angle = Math.toDegrees( Math.atan( distZ / distX ) );
110                    if (angle < 0.0)
111                            angle += 90.0;
112    
113    
114                    if (distX >= 0.0 && distZ >= 0.0) { //both positive, 0-90 degrees
115                            //do nothing
116                    } else if (distX < 0.0 && distZ >= 0.0) { // 90-180 degrees
117                            angle += 90.0;
118                    } else if (distX < 0.0 && distZ < 0.0) {//Both negative 180-270 degrees
119                            angle += 180.0;
120                    } else {
121                            angle += 270.0;
122                    }
123    
124                    return (int) angle;
125            }
126    
127          public static class RealSetposPlugin extends PluginListener {          public class HoerupUtilsPlugin extends PluginListener {
128                  final static String USAGE = "Usage: /setpos <x> <z> [height]";                  final static String USAGE = "Usage: /setpos [x] [z] <height>";
129                  final static int AIRBLOCK = 0; //block id = 0 is air                  final static int BLOCK_AIR = 0; //block id = 0 is air
130                    final static int BLOCK_GRASS = 2;
131                    final static int BLOCK_DIRT = 3;
132    
133                    
134    
# Line 57  public class Setpos extends Plugin { Line 163  public class Setpos extends Plugin {
163                  private boolean isFree(int x, int y, int z) {                  private boolean isFree(int x, int y, int z) {
164                          Server srv = etc.getServer();                          Server srv = etc.getServer();
165    
166                          return  (srv.getBlockIdAt(x,y,z) == AIRBLOCK && srv.getBlockIdAt(x,y+1,z) == AIRBLOCK);                          return  (srv.getBlockIdAt(x,y,z) == BLOCK_AIR && srv.getBlockIdAt(x,y+1,z) == BLOCK_AIR);
167                  }                  }
168    
169                    public void slopeArea(Player player, java.lang.String[] split) {
170                            int radius = Integer.parseInt(split[1]);
171    
172                            System.out.println("Player " + player.getName() + " used slopearea with radius=" + radius);
173                            
174    
175                            int playerX = roundPos( player.getX() );
176                            int playerY = (int) player.getY();
177                            int playerZ = roundPos( player.getZ() );
178                            
179                            Server srv = etc.getServer();
180    
181                            for (int x=(playerX-radius); x<=(playerX+radius); x++) {
182                                    for (int z=(playerZ-radius); z<=(playerZ+radius); z++) {
183    
184    
185                                            int xdist = Math.abs(playerX-x);
186                                            int zdist = Math.abs(playerZ-z);
187    
188                                            int dist = Math.max(xdist,zdist);
189    
190                                            //for (int y=playerY; y<=playerY+radius; y++) {
191                                            for (int y=(playerY+dist); y<=128; y++) {
192                                                    srv.setBlockAt(BLOCK_AIR, x, y, z);
193                                            }
194    
195                                    }
196    
197                            }
198                    }
199    
200                  @Override                  @Override
201                  public boolean onCommand(Player player, java.lang.String[] split) {                  public boolean onCommand(Player player, java.lang.String[] split) {
202                            if (! player.canUseCommand(split[0]) ) {
203                                    return false;
204                            }
205                            
206                          if( split[0].equals("/setpos") && player.canUseCommand("/setpos") ) {                          if( split[0].equals("/setpos") && player.canUseCommand("/setpos") ) {
207                                  setPos(player, split);                                  setPos(player, split);
208                                  return true;                                  return true;
209                          } else if ( split[0].equals("/whereis" ) && player.canUseCommand("/whereis")) {                          } else if ( split[0].equals("/whereis" ) && player.canUseCommand("/whereis")) {
210                                  whereIs(player, split);                                  whereIs(player, split);
211                                  return true;                                  return true;
212                          } else if (split[0].equals("/levelarea") && player.canUseCommand("/levelarea")) {                          } else if ( (split[0].equals("/levelarea") || split[0].equals("/la"))  && player.canUseCommand("/levelarea")) {
213                                  levelArea(player, split);                                  if (validateLevelOrFill(player,split)) {
214                                            levelArea(player, split);
215                                    }
216                                    return true;
217                            } else if (split[0].equals("/slopearea") ) {
218                                    if (validateLevelOrFill(player,split)) {
219                                            slopeArea(player,split);
220                                    }
221                                    return true;
222                            } else if (split[0].equals("/fillarea") && player.canUseCommand("/fillarea")) {
223                                    if (validateLevelOrFill(player,split)) {
224                                            fillArea(player, split);
225                                    }
226                                    return true;
227                            } else if (split[0].equals("/setsurface") && player.canUseCommand("/setsurface")) {
228                                    setSurface(player,split);
229                                  return true;                                  return true;
230                          } else {                          } else {
231                                  return false;                                  return false;
# Line 79  public class Setpos extends Plugin { Line 233  public class Setpos extends Plugin {
233                    
234                  }                  }
235    
236                  private void levelArea(Player player, String[] split) {                  int roundPos(double input) {
237                          if (split.length != 2) {                          int result = (int) input;
238                                  player.sendMessage("Usage: /levelarea <radius>");                          if (input < 0.0) {
239                                    result--;
240                            }
241    
242                            return result;
243                    }
244    
245                    private void setSurface(Player player, String[] split) {
246                            int valid_block_array[] = {1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 35, 41, 42, 43, 44, 45, 46, 48, 49, 56, 57, 73, 74, 79, 80, 82} ;
247    
248                            final int BLOCK_MAX = 86;
249    
250                            if (split.length != 3) {
251                                    player.sendMessage("Usage /setsurface [radius] [blockID]");
252                                  return;                                  return;
253                          }                          }
254                            
255    
256                          int radius;                          int radius;
257                          try {                          try {
258                                  radius = Integer.parseInt(split[1]);                                  radius = Integer.parseInt(split[1]);
259                          } catch (Exception e) {                          } catch (Exception e) {
260                                  player.sendMessage("levelarea: radius must be an integer");                                  player.sendMessage("setsurface: radius must be an integer");
261                                  return;                                  return;
262                          }                          }
263    
264                          if (radius > 20) {                          if (radius > 20) {
265                                  player.sendMessage("levelarea: radius may not exceed 20");                                  player.sendMessage("setsurface: radius may not exceed 20");
266                                  return;                                  return;
267                          }                          }
268    
269    
270                            int blockid;
271                            try {
272                                    blockid = Integer.parseInt(split[2]);
273                            } catch (Exception e) {
274                                    player.sendMessage("setsurface: blockid must be an integer");
275                                    return;
276                            }
277    
278                            boolean validblock = false;
279                            for (int i=0; i<valid_block_array.length; i++) {
280                                    if (valid_block_array[i] == blockid) {
281                                            validblock = true;
282                                            break;
283                                    }
284                            }
285    
286                            if ( !validblock ) {
287                                    player.sendMessage("setsurface: block now allowed");
288                                    return;
289                            }
290    
291                            int playerX = roundPos( player.getX() );
292                            int playerY = (int) player.getY();
293                            int playerZ = roundPos( player.getZ() );
294    
295                            if(playerY <= 2 && blockid != 7) {
296                                    player.sendMessage("setsurface: at this level you may only use bedrock(id=7)");
297                                    return;
298                            }
299                            
300                            Server srv = etc.getServer();
301    
302                            for (int x=(playerX-radius); x<=(playerX+radius); x++) {
303                                    for (int z=(playerZ-radius); z<=(playerZ+radius); z++) {
304                                            int y = getGroundLevel(x,z) - 1;
305                                            srv.setBlockAt(blockid, x, y, z);
306                                    }
307                            }
308                    }
309    
310                    private boolean validateLevelOrFill(Player player, String[] split) {
311                            if (split.length < 2 || split.length > 3) {
312                                    player.sendMessage("Usage: " + split[0] + " [radius]");
313                                    return false;
314                            }
315                            
316                            int radius;
317                            try {
318                                    radius = Integer.parseInt(split[1]);
319                            } catch (Exception e) {
320                                    player.sendMessage(split[0] + ": radius must be an integer");
321                                    return false;
322                            }
323    
324                            if (radius > 20) {
325                                    player.sendMessage(split[0] + ": radius may not exceed 20");
326                                    return false;
327                            }
328                            
329                            if (split.length == 3) {
330                                    try {
331                                            Integer.parseInt( split[2] );
332                                    } catch (Exception e) {
333                                            player.sendMessage(split[0] + ": radius must be an integer");
334                                            return false;
335                                    }
336                            }
337    
338                            return true;
339                    }
340    
341                    private void fillArea(Player player, String[] split) {
342                            int radius = Integer.parseInt(split[1]);
343                            
344                            int material = BLOCK_DIRT;
345                            if (split.length == 3) {
346                                    material = Integer.parseInt( split[2] );
347                            }
348    
349                            System.out.println("Player " + player.getName() + " used fillarea with radius=" + radius);
350                            
351    
352                            int playerX = roundPos( player.getX() );
353                            int playerY = (int) player.getY();
354                            int playerZ = roundPos( player.getZ() );
355                            
356                            Server srv = etc.getServer();
357    
358                            for (int x=(playerX-radius); x<=(playerX+radius); x++) {
359                                    for (int z=(playerZ-radius); z<=(playerZ+radius); z++) {
360    
361                                            for (int y=getGroundLevel(x,z); y<playerY; y++) {
362                                                    srv.setBlockAt(material, x, y, z);
363                                            }
364    
365                                    }
366    
367                            }
368                    }
369    
370                    private void levelArea(Player player, String[] split) {
371    
372                            int radius = Integer.parseInt(split[1]);
373    
374                          System.out.println("Player " + player.getName() + " used levelarea with radius=" + radius);                          System.out.println("Player " + player.getName() + " used levelarea with radius=" + radius);
375                                                    
376    
377                          int playerX = (int) player.getX();                          int playerX = roundPos( player.getX() );
378                          int playerY = (int) player.getY();                          int playerY = (int) player.getY();
379                          int playerZ = (int) player.getZ();                          int playerZ = roundPos( player.getZ() );
380                                                    
381                          Server srv = etc.getServer();                          Server srv = etc.getServer();
382    
# Line 115  public class Setpos extends Plugin { Line 387  public class Setpos extends Plugin {
387                                          //for (int y=playerY; y<=playerY+radius; y++) {                                          //for (int y=playerY; y<=playerY+radius; y++) {
388                                          for (int y=playerY; y<=128; y++) {                                          for (int y=playerY; y<=128; y++) {
389                                                  count++;                                                  count++;
390                                                  srv.setBlockAt(0, x, y, z);                                                  srv.setBlockAt(BLOCK_AIR, x, y, z);
391                                          }                                          }
392    
393                                  }                                  }
# Line 133  public class Setpos extends Plugin { Line 405  public class Setpos extends Plugin {
405          }          }
406    
407    
         private String getBearingStr(int angle) {  
                 if (angle < 22) {  
                         return "N";  
                 } else if (angle < 67) {  
                         return "NE";  
                 } else if (angle < 112) {  
                         return "E";  
                 } else if (angle < 157) {  
                         return "SE";  
                 } else if (angle < 202) {  
                         return "S";  
                 } else if (angle < 257) {  
                         return "SW";  
                 } else if (angle < 292) {  
                         return "W";  
                 } else if (angle < 337) {  
                         return "NW";  
                 } else {  
                         return "N";  
                 }  
         }  
   
408          public void whereIs(Player p1, java.lang.String[] split) {          public void whereIs(Player p1, java.lang.String[] split) {
409                  if (split.length < 2 || split.length >3) {                  if (split.length < 2 || split.length >3) {
410                          p1.sendMessage( Colors.Rose + "usage: /whereis (playername|home|warp) [warpname]" );                          p1.sendMessage( Colors.Rose + "usage: /whereis (playername|home|warp) <warpname>" );
411                          return;                          return;
412                  }                  }
413    
# Line 200  public class Setpos extends Plugin { Line 450  public class Setpos extends Plugin {
450                          loc2 = p2.getLocation();                          loc2 = p2.getLocation();
451                          name2 = p2.getName();                          name2 = p2.getName();
452                  }                  }
                 //Location loc2 = new Location();  
                 //loc2.x = loc2.y = loc2.z = 0;  
453    
454  //System.out.println("p1: " + loc1.x + "," + loc1.z );                  int dist = calcDistance(loc1, loc2);
455  //System.out.println("p2: " + loc2.x + "," + loc2.z );                  int angle = calcBearing(loc1, loc2);
456    
                 double distX =   loc1.x - loc2.x  ;  
                 double distZ =   loc1.z - loc2.z  ;  
   
                 int dist = (int) Math.round( Math.sqrt( (distX*distX) + (distZ*distZ)) );  
 /*System.out.println("distX:" + distX );  
 System.out.println("distZ:" + distZ );  
457    
 System.out.println(">> " + (distZ / distX ) );*/  
   
                 double angle = Math.toDegrees( Math.atan( distZ / distX ) );  
                 if (angle < 0.0)  
                         angle += 90.0;  
   
   
                 if (distX >= 0.0 && distZ >= 0.0) { //both positive, 0-90 degrees  
                         //do nothing  
                 } else if (distX < 0.0 && distZ >= 0.0) { // 90-180 degrees  
                         angle += 90.0;  
                 } else if (distX < 0.0 && distZ < 0.0) {//Both negative 180-270 degrees  
                         angle += 180.0;  
                 } else {  
                         angle += 270.0;  
                 }  
458    
459                  p1.sendMessage( Colors.Yellow + name2 + " is at x:" + roundToPlaces(loc2.x, 2) + " y:" + roundToPlaces(loc2.y, 2) + " z: " + roundToPlaces(loc2.z, 2) );                  p1.sendMessage( Colors.Yellow + name2 + " is at x:" + roundToPlaces(loc2.x, 2) + " y:" + roundToPlaces(loc2.y, 2) + " z: " + roundToPlaces(loc2.z, 2) );
460                  p1.sendMessage( Colors.Yellow + "Distance is " + dist + " blocks" );                  p1.sendMessage( Colors.Yellow + "Distance is " + dist + " blocks" );
461                  p1.sendMessage( Colors.Yellow + "Bearing: " + (int) angle  + " (" + getBearingStr( (int) angle) + ")" );                  p1.sendMessage( Colors.Yellow + "Bearing: " + angle  + " (" + getBearingStr( angle) + ")" );
462    
463                                    
464    

Legend:
Removed from v.1170  
changed lines
  Added in v.1198

  ViewVC Help
Powered by ViewVC 1.1.20