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