mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 09:47:38 +00:00
Made /up and /ceil benefit from fly mode.
This avoids littering the world with floating glass blocks when possible.
This commit is contained in:
parent
90e1788781
commit
dcd1c7cee8
@ -236,6 +236,17 @@ public abstract class LocalPlayer {
|
|||||||
* @return whether the player was moved
|
* @return whether the player was moved
|
||||||
*/
|
*/
|
||||||
public boolean ascendToCeiling(int clearance) {
|
public boolean ascendToCeiling(int clearance) {
|
||||||
|
return ascendToCeiling(clearance, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ascend to the ceiling above.
|
||||||
|
*
|
||||||
|
* @param clearance How many blocks to leave above the player's head
|
||||||
|
* @param alwaysGlass Always put glass under the player
|
||||||
|
* @return whether the player was moved
|
||||||
|
*/
|
||||||
|
public boolean ascendToCeiling(int clearance, boolean alwaysGlass) {
|
||||||
Vector pos = getBlockIn();
|
Vector pos = getBlockIn();
|
||||||
int x = pos.getBlockX();
|
int x = pos.getBlockX();
|
||||||
int initialY = Math.max(0, pos.getBlockY());
|
int initialY = Math.max(0, pos.getBlockY());
|
||||||
@ -252,7 +263,7 @@ public abstract class LocalPlayer {
|
|||||||
// Found a ceiling!
|
// Found a ceiling!
|
||||||
if (!BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
|
if (!BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
|
||||||
int platformY = Math.max(initialY, y - 3 - clearance);
|
int platformY = Math.max(initialY, y - 3 - clearance);
|
||||||
floatAt(x, platformY + 1, z);
|
floatAt(x, platformY + 1, z, alwaysGlass);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,6 +280,17 @@ public abstract class LocalPlayer {
|
|||||||
* @return whether the player was moved
|
* @return whether the player was moved
|
||||||
*/
|
*/
|
||||||
public boolean ascendUpwards(int distance) {
|
public boolean ascendUpwards(int distance) {
|
||||||
|
return ascendUpwards(distance, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Just go up.
|
||||||
|
*
|
||||||
|
* @param distance How far up to teleport
|
||||||
|
* @param alwaysGlass Always put glass under the player
|
||||||
|
* @return whether the player was moved
|
||||||
|
*/
|
||||||
|
public boolean ascendUpwards(int distance, boolean alwaysGlass) {
|
||||||
final Vector pos = getBlockIn();
|
final Vector pos = getBlockIn();
|
||||||
final int x = pos.getBlockX();
|
final int x = pos.getBlockX();
|
||||||
final int initialY = Math.max(0, pos.getBlockY());
|
final int initialY = Math.max(0, pos.getBlockY());
|
||||||
@ -283,7 +305,7 @@ public abstract class LocalPlayer {
|
|||||||
} else if (y > maxY + 1) {
|
} else if (y > maxY + 1) {
|
||||||
break;
|
break;
|
||||||
} else if (y == maxY + 1) {
|
} else if (y == maxY + 1) {
|
||||||
floatAt(x, y - 1, z);
|
floatAt(x, y - 1, z, alwaysGlass);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +322,7 @@ public abstract class LocalPlayer {
|
|||||||
* @param y The Y coordinate of the block to float in
|
* @param y The Y coordinate of the block to float in
|
||||||
* @param z The Z coordinate of the block to float in
|
* @param z The Z coordinate of the block to float in
|
||||||
*/
|
*/
|
||||||
private void floatAt(int x, int y, int z) {
|
public void floatAt(int x, int y, int z, boolean alwaysGlass) {
|
||||||
getPosition().getWorld().setBlockType(new Vector(x, y - 1, z), BlockID.GLASS);
|
getPosition().getWorld().setBlockType(new Vector(x, y - 1, z), BlockID.GLASS);
|
||||||
setPosition(new Vector(x + 0.5, y, z + 0.5));
|
setPosition(new Vector(x + 0.5, y, z + 0.5));
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.bukkit;
|
package com.sk89q.worldedit.bukkit;
|
||||||
|
|
||||||
|
import com.sk89q.worldedit.blocks.BlockID;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -150,4 +151,15 @@ public class BukkitPlayer extends LocalPlayer {
|
|||||||
public boolean hasCreativeMode() {
|
public boolean hasCreativeMode() {
|
||||||
return player.getGameMode() == GameMode.CREATIVE;
|
return player.getGameMode() == GameMode.CREATIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void floatAt(int x, int y, int z, boolean alwaysGlass) {
|
||||||
|
if (alwaysGlass || !player.getAllowFlight()) {
|
||||||
|
super.floatAt(x, y, z, alwaysGlass);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPosition(new Vector(x + 0.5, y, z + 0.5));
|
||||||
|
player.setFlying(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,6 +118,7 @@ public class NavigationCommands {
|
|||||||
aliases = { "ceil" },
|
aliases = { "ceil" },
|
||||||
usage = "[clearance]",
|
usage = "[clearance]",
|
||||||
desc = "Go to the celing",
|
desc = "Go to the celing",
|
||||||
|
flags = "g",
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1
|
max = 1
|
||||||
)
|
)
|
||||||
@ -129,7 +130,8 @@ public class NavigationCommands {
|
|||||||
int clearence = args.argsLength() > 0 ?
|
int clearence = args.argsLength() > 0 ?
|
||||||
Math.max(0, args.getInteger(0)) : 0;
|
Math.max(0, args.getInteger(0)) : 0;
|
||||||
|
|
||||||
if (player.ascendToCeiling(clearence)) {
|
final boolean alwaysGlass = args.hasFlag('g');
|
||||||
|
if (player.ascendToCeiling(clearence, alwaysGlass)) {
|
||||||
player.print("Whoosh!");
|
player.print("Whoosh!");
|
||||||
} else {
|
} else {
|
||||||
player.printError("No free spot above you found.");
|
player.printError("No free spot above you found.");
|
||||||
@ -177,6 +179,7 @@ public class NavigationCommands {
|
|||||||
aliases = { "up" },
|
aliases = { "up" },
|
||||||
usage = "<block>",
|
usage = "<block>",
|
||||||
desc = "Go upwards some distance",
|
desc = "Go upwards some distance",
|
||||||
|
flags = "g",
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1
|
max = 1
|
||||||
)
|
)
|
||||||
@ -187,7 +190,8 @@ public class NavigationCommands {
|
|||||||
|
|
||||||
int distance = args.getInteger(0);
|
int distance = args.getInteger(0);
|
||||||
|
|
||||||
if (player.ascendUpwards(distance)) {
|
final boolean alwaysGlass = args.hasFlag('g');
|
||||||
|
if (player.ascendUpwards(distance, alwaysGlass)) {
|
||||||
player.print("Whoosh!");
|
player.print("Whoosh!");
|
||||||
} else {
|
} else {
|
||||||
player.printError("You would hit something above you.");
|
player.printError("You would hit something above you.");
|
||||||
|
Loading…
Reference in New Issue
Block a user