Changed /descend to be a little more accurate, to not drop players from a high distance, and to not drop players into the void.

This commit is contained in:
sk89q 2010-10-16 17:08:56 -07:00
parent ad0bb92c8f
commit 3a940ba936

View File

@ -36,7 +36,7 @@ public abstract class WorldEditPlayer {
public WorldEditPlayer() { public WorldEditPlayer() {
server = WorldEdit.getServer(); server = WorldEdit.getServer();
} }
/** /**
* Get the name of the player. * Get the name of the player.
* *
@ -51,13 +51,13 @@ public abstract class WorldEditPlayer {
public abstract Vector getBlockOn(); public abstract Vector getBlockOn();
/** /**
* Get the point of the block that is being stood in. * Get the point of the block that is being stood in.
* *
* @return point * @return point
*/ */
public abstract Vector getBlockIn(); public abstract Vector getBlockIn();
/** /**
* Get the player's position. * Get the player's position.
* *
* @return point * @return point
*/ */
public abstract Vector getPosition(); public abstract Vector getPosition();
@ -75,7 +75,7 @@ public abstract class WorldEditPlayer {
public abstract double getYaw(); public abstract double getYaw();
/** /**
* Get the ID of the item that the player is holding. * Get the ID of the item that the player is holding.
* *
* @return * @return
*/ */
public abstract int getItemInHand(); public abstract int getItemInHand();
@ -93,7 +93,7 @@ public abstract class WorldEditPlayer {
/** /**
* Get the player's cardinal direction (N, W, NW, etc.). * Get the player's cardinal direction (N, W, NW, etc.).
* *
* @return * @return
*/ */
public abstract String getCardinalDirection(); public abstract String getCardinalDirection();
@ -204,14 +204,14 @@ public abstract class WorldEditPlayer {
* @return true if a spot was found * @return true if a spot was found
*/ */
public boolean descendLevel() { public boolean descendLevel() {
Vector pos = getPosition(); Vector pos = getBlockIn();
int x = pos.getBlockX(); int x = pos.getBlockX();
int y = pos.getBlockY() - 1; int y = pos.getBlockY() - 1;
int z = pos.getBlockZ(); int z = pos.getBlockZ();
byte free = 0; byte free = 0;
while (y >= 0) { while (y >= 1) {
if (server.getBlockType(new Vector(x, y, z)) == 0) { if (server.getBlockType(new Vector(x, y, z)) == 0) {
free++; free++;
} else { } else {
@ -219,8 +219,20 @@ public abstract class WorldEditPlayer {
} }
if (free == 2) { if (free == 2) {
setPosition(new Vector(x + 0.5, y, z + 0.5)); // So we've found a spot, but we have to drop the player
return true; // lightly and also check to see if there's something to
// stand upon
while (y >= 0) {
if (server.getBlockType(new Vector(x, y, z)) != 0) {
// Found a block!
setPosition(new Vector(x + 0.5, y + 1, z + 0.5));
return true;
}
y--;
}
return false;
} }
y--; y--;
@ -231,7 +243,7 @@ public abstract class WorldEditPlayer {
/** /**
* Gives the player an item. * Gives the player an item.
* *
* @param type * @param type
* @param amt * @param amt
*/ */
@ -239,7 +251,7 @@ public abstract class WorldEditPlayer {
/** /**
* Returns true if equal. * Returns true if equal.
* *
* @param other * @param other
* @return whether the other object is equivalent * @return whether the other object is equivalent
*/ */