From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 25 Jul 2018 01:36:07 -0400 Subject: [PATCH] Expand Location Manipulation API Adds set(x, y, z), add(base, x, y, z), subtract(base, x, y, z); diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java index 5a6b33c6d9a68affdbd02c13fdb0854e011e327d..943c3364f6b931fe11f9a6099504590b2da34657 100644 --- a/src/main/java/org/bukkit/Location.java +++ b/src/main/java/org/bukkit/Location.java @@ -546,6 +546,54 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm public boolean isChunkLoaded() { return this.getWorld().isChunkLoaded(locToBlock(x) >> 4, locToBlock(z) >> 4); } // Paper // Paper start + + /** + * Sets the position of this Location and returns itself + * + * This mutates this object, clone first. + * @param x X coordinate + * @param y Y coordinate + * @param z Z coordinate + * @return self (not cloned) + */ + @NotNull + public Location set(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + return this; + } + + /** + * Takes the x/y/z from base and adds the specified x/y/z to it and returns self + * + * This mutates this object, clone first. + * @param base The base coordinate to modify + * @param x X coordinate to add to base + * @param y Y coordinate to add to base + * @param z Z coordinate to add to base + * @return self (not cloned) + */ + @NotNull + public Location add(@NotNull Location base, double x, double y, double z) { + return this.set(base.x + x, base.y + y, base.z + z); + } + + /** + * Takes the x/y/z from base and subtracts the specified x/y/z to it and returns self + * + * This mutates this object, clone first. + * @param base The base coordinate to modify + * @param x X coordinate to subtract from base + * @param y Y coordinate to subtract from base + * @param z Z coordinate to subtract from base + * @return self (not cloned) + */ + @NotNull + public Location subtract(@NotNull Location base, double x, double y, double z) { + return this.set(base.x - x, base.y - y, base.z - z); + } + /** * @return A new location where X/Y/Z are on the Block location (integer value of X/Y/Z) */