Paper/Spigot-API-Patches/0128-Expand-Location-Manipulation-API.patch
Aikar 7438edc9a1
Rework Async Chunks API in prep for merge, add utility
This adds a new Future based, Consumer<Chunk> based, and ability
to control whether or not to generate to the Async Chunk API.

Until Async Chunks merges, these API's are still synchronous, but
this commit will allow plugins to start using the API's in use
with the Async Chunks beta.
2018-09-21 16:56:08 -04:00

67 lines
2.3 KiB
Diff

From a05d7aa6619f01679e452a714e900a5c14f4ffdc Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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 056a4d6bb..8dcb15fb8 100644
--- a/src/main/java/org/bukkit/Location.java
+++ b/src/main/java/org/bukkit/Location.java
@@ -503,6 +503,51 @@ public class Location implements Cloneable, ConfigurationSerializable {
public boolean isChunkLoaded() { return world.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)
+ */
+ 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)
+ */
+ public Location add(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)
+ */
+ public Location subtract(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)
*/
--
2.19.0