|
|
|
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
|
|
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
|
|
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
|
|
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
|
|
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
|
|
|
// Magicbane Emulator Project © 2013 - 2022
|
|
|
|
// www.magicbane.com
|
|
|
|
|
|
|
|
|
|
|
|
package engine.devcmd.cmds;
|
|
|
|
|
|
|
|
import engine.Enum.GameObjectType;
|
|
|
|
import engine.devcmd.AbstractDevCmd;
|
|
|
|
import engine.math.Vector3fImmutable;
|
|
|
|
import engine.objects.AbstractGameObject;
|
|
|
|
import engine.objects.Building;
|
|
|
|
import engine.objects.PlayerCharacter;
|
|
|
|
|
|
|
|
public class GotoBoundsCmd extends AbstractDevCmd {
|
|
|
|
|
|
|
|
public GotoBoundsCmd() {
|
|
|
|
super("gotobounds");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void _doCmd(PlayerCharacter player, String[] words,
|
|
|
|
AbstractGameObject target) {
|
|
|
|
|
|
|
|
String corner = words[0];
|
|
|
|
Vector3fImmutable targetLoc = Vector3fImmutable.ZERO;
|
|
|
|
|
|
|
|
if (target == null || !target.getObjectType().equals(GameObjectType.Building)) {
|
|
|
|
this.throwbackError(player, "No Building Selected");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Building building = (Building) target;
|
|
|
|
|
|
|
|
if (building.getBounds() == null) {
|
|
|
|
this.throwbackInfo(player, "No valid Bounds for building UUID " + building.getObjectUUID());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
float x = building.getBounds().getHalfExtents().x;
|
|
|
|
float z = building.getBounds().getHalfExtents().y;
|
|
|
|
|
|
|
|
if (building.getBlueprint() != null) {
|
|
|
|
x = building.getBlueprint().getExtents().x;
|
|
|
|
z = building.getBlueprint().getExtents().y;
|
|
|
|
}
|
|
|
|
|
|
|
|
float topLeftX = building.getLoc().x - x;
|
|
|
|
float topLeftY = building.getLoc().z - z;
|
|
|
|
|
|
|
|
float topRightX = building.getLoc().x + x;
|
|
|
|
float topRightY = building.getLoc().z - z;
|
|
|
|
|
|
|
|
float bottomLeftX = building.getLoc().x - x;
|
|
|
|
float bottomLeftY = building.getLoc().z + z;
|
|
|
|
|
|
|
|
float bottomRightX = building.getLoc().x + x;
|
|
|
|
float bottomRightY = building.getLoc().z + z;
|
|
|
|
|
|
|
|
|
|
|
|
switch (corner) {
|
|
|
|
case "topleft":
|
|
|
|
targetLoc = new Vector3fImmutable(topLeftX, 0, topLeftY);
|
|
|
|
break;
|
|
|
|
case "topright":
|
|
|
|
targetLoc = new Vector3fImmutable(topRightX, 0, topRightY);
|
|
|
|
break;
|
|
|
|
case "bottomleft":
|
|
|
|
targetLoc = new Vector3fImmutable(bottomLeftX, 0, bottomLeftY);
|
|
|
|
break;
|
|
|
|
case "bottomright":
|
|
|
|
targetLoc = new Vector3fImmutable(bottomRightX, 0, bottomRightY);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
this.throwbackInfo(player, "wrong corner name. use topleft , topright , bottomleft , bottomright");
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
targetLoc = Vector3fImmutable.transform(building.getLoc(), targetLoc, building.getBounds().getRotationDegrees());
|
|
|
|
|
|
|
|
// Teleport player
|
|
|
|
|
|
|
|
if (targetLoc == Vector3fImmutable.ZERO) {
|
|
|
|
this.throwbackError(player, "Failed to locate UUID");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
player.teleport(targetLoc);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected String _getHelpString() {
|
|
|
|
return "Teleports player to a UUID";
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected String _getUsageString() {
|
|
|
|
return "' /gotoobj <UID>'";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|