Search in sources :

Example 1 with CREInvalidWorldException

use of com.laytonsmith.core.exceptions.CRE.CREInvalidWorldException in project CommandHelper by EngineHub.

the class ObjectGenerator method location.

/**
 * Given a Location Object, returns a MCLocation. If the optional world is not specified in the object, the world
 * provided is used instead. Location "objects" are MethodScript arrays that represent a location in game. There are
 * 4 usages: <ul> <li>(x, y, z)</li> <li>(x, y, z, world)</li> <li>(x, y, z, yaw, pitch)</li> <li>(x, y, z, world,
 * yaw, pitch)</li> </ul> In all cases, the pitch and yaw default to 0, and the world defaults to the specified
 * world. <em>More conveniently: ([world], x, y, z, [yaw, pitch])</em>
 */
public MCLocation location(Construct c, MCWorld w, Target t) {
    if (!(c instanceof CArray)) {
        throw new CREFormatException("Expecting an array, received " + c.getCType(), t);
    }
    CArray array = (CArray) c;
    MCWorld world = w;
    double x = 0;
    double y = 0;
    double z = 0;
    float yaw = 0;
    float pitch = 0;
    if (!array.inAssociativeMode()) {
        if (array.size() == 3) {
            // Just the xyz, with default yaw and pitch, and given world
            x = Static.getNumber(array.get(0, t), t);
            y = Static.getNumber(array.get(1, t), t);
            z = Static.getNumber(array.get(2, t), t);
        } else if (array.size() == 4) {
            // x, y, z, world
            x = Static.getNumber(array.get(0, t), t);
            y = Static.getNumber(array.get(1, t), t);
            z = Static.getNumber(array.get(2, t), t);
            world = Static.getServer().getWorld(array.get(3, t).val());
        } else if (array.size() == 5) {
            // x, y, z, yaw, pitch, with given world
            x = Static.getNumber(array.get(0, t), t);
            y = Static.getNumber(array.get(1, t), t);
            z = Static.getNumber(array.get(2, t), t);
            yaw = (float) Static.getNumber(array.get(3, t), t);
            pitch = (float) Static.getNumber(array.get(4, t), t);
        } else if (array.size() == 6) {
            // All have been given
            x = Static.getNumber(array.get(0, t), t);
            y = Static.getNumber(array.get(1, t), t);
            z = Static.getNumber(array.get(2, t), t);
            world = Static.getServer().getWorld(array.get(3, t).val());
            yaw = (float) Static.getNumber(array.get(4, t), t);
            pitch = (float) Static.getNumber(array.get(5, t), t);
        } else {
            throw new CREFormatException("Expecting a Location array, but the array did not meet the format specifications", t);
        }
    } else {
        if (array.containsKey("x")) {
            x = Static.getNumber(array.get("x", t), t);
        }
        if (array.containsKey("y")) {
            y = Static.getNumber(array.get("y", t), t);
        }
        if (array.containsKey("z")) {
            z = Static.getNumber(array.get("z", t), t);
        }
        if (array.containsKey("world")) {
            world = Static.getServer().getWorld(array.get("world", t).val());
        }
        if (array.containsKey("yaw")) {
            yaw = (float) Static.getDouble(array.get("yaw", t), t);
        }
        if (array.containsKey("pitch")) {
            pitch = (float) Static.getDouble(array.get("pitch", t), t);
        }
    }
    // If world is still null at this point, it's an error
    if (world == null) {
        throw new CREInvalidWorldException("The specified world doesn't exist, or no world was provided", t);
    }
    return StaticLayer.GetLocation(world, x, y, z, yaw, pitch);
}
Also used : CREInvalidWorldException(com.laytonsmith.core.exceptions.CRE.CREInvalidWorldException) CArray(com.laytonsmith.core.constructs.CArray) CREFormatException(com.laytonsmith.core.exceptions.CRE.CREFormatException) MCWorld(com.laytonsmith.abstraction.MCWorld)

Aggregations

MCWorld (com.laytonsmith.abstraction.MCWorld)1 CArray (com.laytonsmith.core.constructs.CArray)1 CREFormatException (com.laytonsmith.core.exceptions.CRE.CREFormatException)1 CREInvalidWorldException (com.laytonsmith.core.exceptions.CRE.CREInvalidWorldException)1