Finish removal of PlayerDirection, and partially added diagonal support back to commands.

This commit is contained in:
Matthew Miller 2018-11-12 12:38:13 +10:00
parent bf98dcff09
commit 24800a662a
7 changed files with 727 additions and 766 deletions

View File

@ -1,59 +0,0 @@
/*
* WorldEdit, a Minecraft world manipulation toolkit
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldEdit team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldedit;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.util.Direction;
/**
* The player's direction.
*
* <p>In the future, this class will be replaced with {@link Direction}.</p>
*/
public enum PlayerDirection {
NORTH(Vector3.at(0, 0, -1), true),
NORTH_EAST((Vector3.at(1, 0, -1)).normalize(), false),
EAST(Vector3.at(1, 0, 0), true),
SOUTH_EAST((Vector3.at(1, 0, 1)).normalize(), false),
SOUTH(Vector3.at(0, 0, 1), true),
SOUTH_WEST((Vector3.at(-1, 0, 1)).normalize(), false),
WEST(Vector3.at(-1, 0, 0), true),
NORTH_WEST((Vector3.at(-1, 0, -1)).normalize(), false),
UP(Vector3.at(0, 1, 0), true),
DOWN(Vector3.at(0, -1, 0), true);
private final Vector3 dir;
private final boolean isOrthogonal;
PlayerDirection(Vector3 vec, boolean isOrthogonal) {
this.dir = vec;
this.isOrthogonal = isOrthogonal;
}
public Vector3 vector() {
return dir;
}
public boolean isOrthogonal() {
return isOrthogonal;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -275,7 +275,7 @@ public class RegionCommands {
public void move(Player player, EditSession editSession, LocalSession session,
@Selection Region region,
@Optional("1") @Range(min = 1) int count,
@Optional(Direction.AIM) @Direction BlockVector3 direction,
@Optional(Direction.AIM) @Direction(includeDiagonals = true) BlockVector3 direction,
@Optional("air") BlockStateHolder replace,
@Switch('s') boolean moveSelection) throws WorldEditException {
@ -313,7 +313,7 @@ public class RegionCommands {
public void stack(Player player, EditSession editSession, LocalSession session,
@Selection Region region,
@Optional("1") @Range(min = 1) int count,
@Optional(Direction.AIM) @Direction BlockVector3 direction,
@Optional(Direction.AIM) @Direction(includeDiagonals = true) BlockVector3 direction,
@Switch('s') boolean moveSelection,
@Switch('a') boolean ignoreAirBlocks) throws WorldEditException {
int affected = editSession.stackCuboidRegion(region, direction, count, !ignoreAirBlocks);

View File

@ -19,13 +19,13 @@
package com.sk89q.worldedit.entity;
import com.sk89q.worldedit.PlayerDirection;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.inventory.BlockBag;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
@ -60,7 +60,7 @@ public interface Player extends Entity, Actor {
*
* @return the direction
*/
PlayerDirection getCardinalDirection(int yawOffset);
Direction getCardinalDirection(int yawOffset);
/**
* Get the item that the player is holding.
@ -240,7 +240,7 @@ public interface Player extends Entity, Actor {
*
* @return the direction
*/
PlayerDirection getCardinalDirection();
Direction getCardinalDirection();
/**
* Pass through the wall that you are looking at.

View File

@ -20,13 +20,13 @@
package com.sk89q.worldedit.extension.platform;
import com.sk89q.worldedit.NotABlockException;
import com.sk89q.worldedit.PlayerDirection;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.internal.cui.CUIEvent;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.util.TargetBlock;
@ -61,25 +61,25 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
* @param rot yaw
* @return the direction
*/
private static PlayerDirection getDirection(double rot) {
private static Direction getDirection(double rot) {
if (0 <= rot && rot < 22.5) {
return PlayerDirection.SOUTH;
return Direction.SOUTH;
} else if (22.5 <= rot && rot < 67.5) {
return PlayerDirection.SOUTH_WEST;
return Direction.SOUTHWEST;
} else if (67.5 <= rot && rot < 112.5) {
return PlayerDirection.WEST;
return Direction.WEST;
} else if (112.5 <= rot && rot < 157.5) {
return PlayerDirection.NORTH_WEST;
return Direction.NORTHWEST;
} else if (157.5 <= rot && rot < 202.5) {
return PlayerDirection.NORTH;
return Direction.NORTH;
} else if (202.5 <= rot && rot < 247.5) {
return PlayerDirection.NORTH_EAST;
return Direction.NORTHEAST;
} else if (247.5 <= rot && rot < 292.5) {
return PlayerDirection.EAST;
return Direction.EAST;
} else if (292.5 <= rot && rot < 337.5) {
return PlayerDirection.SOUTH_EAST;
return Direction.SOUTHEAST;
} else if (337.5 <= rot && rot < 360.0) {
return PlayerDirection.SOUTH;
return Direction.SOUTH;
} else {
return null;
}
@ -345,17 +345,17 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
}
@Override
public PlayerDirection getCardinalDirection() {
public Direction getCardinalDirection() {
return getCardinalDirection(0);
}
@Override
public PlayerDirection getCardinalDirection(int yawOffset) {
public Direction getCardinalDirection(int yawOffset) {
if (getLocation().getPitch() > 67.5) {
return PlayerDirection.DOWN;
return Direction.DOWN;
}
if (getLocation().getPitch() < -67.5) {
return PlayerDirection.UP;
return Direction.UP;
}
// From hey0's code

View File

@ -35,4 +35,5 @@ public @interface Direction {
String AIM = "me";
boolean includeDiagonals() default false;
}

View File

@ -264,7 +264,11 @@ public class WorldEditBinding extends BindingHelper {
public BlockVector3 getDirection(ArgumentStack context, Direction direction)
throws ParameterException, UnknownDirectionException {
Player sender = getPlayer(context);
return worldEdit.getDirection(sender, context.next());
if (direction.includeDiagonals()) {
return worldEdit.getDiagonalDirection(sender, context.next());
} else {
return worldEdit.getDirection(sender, context.next());
}
}
/**