Public Repository for the Magicbane Shadowbane Emulator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.2 KiB

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// 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>'";
}
}