aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0174-Add-Heightmap-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0174-Add-Heightmap-API.patch')
-rw-r--r--patches/api/0174-Add-Heightmap-API.patch195
1 files changed, 195 insertions, 0 deletions
diff --git a/patches/api/0174-Add-Heightmap-API.patch b/patches/api/0174-Add-Heightmap-API.patch
new file mode 100644
index 0000000000..9c0ab69035
--- /dev/null
+++ b/patches/api/0174-Add-Heightmap-API.patch
@@ -0,0 +1,195 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Spottedleaf <[email protected]>
+Date: Sat, 1 Dec 2018 19:00:36 -0800
+Subject: [PATCH] Add Heightmap API
+
+Changed to use upstream's heightmap API - Machine_Maker
+
+diff --git a/src/main/java/com/destroystokyo/paper/HeightmapType.java b/src/main/java/com/destroystokyo/paper/HeightmapType.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..1c832d69bb3717dcfccf21e45f6f060a64eb4f11
+--- /dev/null
++++ b/src/main/java/com/destroystokyo/paper/HeightmapType.java
+@@ -0,0 +1,39 @@
++package com.destroystokyo.paper;
++
++import org.jetbrains.annotations.ApiStatus;
++
++/**
++ * Enumeration of different heightmap types maintained by the server. Generally using these maps is much faster
++ * than using an iterative search for a block in a given x, z coordinate.
++ *
++ * @deprecated Upstream has added their own API for using the game heightmaps. See {@link org.bukkit.HeightMap} and the
++ * non-deprecated getHighestBlock methods on World such as {@link org.bukkit.World#getHighestBlockAt(org.bukkit.Location, org.bukkit.HeightMap)}.
++ */
++@Deprecated(forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.21")
++public enum HeightmapType {
++
++ /**
++ * The highest block used for lighting in the world. Also the block returned by {@link org.bukkit.World#getHighestBlockYAt(int, int)}}
++ */
++ LIGHT_BLOCKING,
++
++ /**
++ * References the highest block in the world.
++ */
++ ANY,
++
++ /**
++ * References the highest solid block in a world.
++ */
++ SOLID,
++
++ /**
++ * References the highest solid or liquid block in a world.
++ */
++ SOLID_OR_LIQUID,
++
++ /**
++ * References the highest solid or liquid block in a world, excluding leaves.
++ */
++ SOLID_OR_LIQUID_NO_LEAVES;
++}
+diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java
+index f0878c7539696cc0676e6010e88914d3850acf20..c6049747fc286acb4e8053901fcc517e5170afa2 100644
+--- a/src/main/java/org/bukkit/Location.java
++++ b/src/main/java/org/bukkit/Location.java
+@@ -649,6 +649,46 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm
+ }
+ // Paper end - expand Location API
+
++ // Paper start - Add heightmap api
++ /**
++ * Returns a copy of this location except with y = getWorld().getHighestBlockYAt(this.getBlockX(), this.getBlockZ())
++ * @return A copy of this location except with y = getWorld().getHighestBlockYAt(this.getBlockX(), this.getBlockZ())
++ * @throws NullPointerException if {{@link #getWorld()}} is {@code null}
++ */
++ @NotNull
++ public Location toHighestLocation() {
++ return this.toHighestLocation(HeightMap.WORLD_SURFACE);
++ }
++
++ /**
++ * Returns a copy of this location except with y = getWorld().getHighestBlockYAt(this.getBlockX(), this.getBlockZ(), heightmap)
++ * @param heightmap The heightmap to use for finding the highest y location.
++ * @return A copy of this location except with y = getWorld().getHighestBlockYAt(this.getBlockX(), this.getBlockZ(), heightmap)
++ * @throws NullPointerException if {{@link #getWorld()}} is {@code null}
++ * @throws UnsupportedOperationException if {@link World#getHighestBlockYAt(int, int, com.destroystokyo.paper.HeightmapType)} does not support the specified heightmap
++ * @deprecated Use {@link org.bukkit.Location#toHighestLocation(HeightMap)}
++ */
++ @NotNull
++ @Deprecated(forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.21")
++ public Location toHighestLocation(@NotNull final com.destroystokyo.paper.HeightmapType heightmap) {
++ final Location ret = this.clone();
++ ret.setY(this.getWorld().getHighestBlockYAt(this, heightmap));
++ return ret;
++ }
++
++ /**
++ * Returns a copy of this location except with y = getWorld().getHighestBlockYAt(this.getBlockX(), this.getBlockZ(), heightMap)
++ * @param heightMap The heightmap to use for finding the highest y location.
++ * @return A copy of this location except with y = getWorld().getHighestBlockYAt(this.getBlockX(), this.getBlockZ(), heightMap)
++ */
++ @NotNull
++ public Location toHighestLocation(@NotNull final HeightMap heightMap) {
++ final Location ret = this.clone();
++ ret.setY(this.getWorld().getHighestBlockYAt(this, heightMap));
++ return ret;
++ }
++ // Paper end - Add heightmap api
++
+ // Paper start - Expand Explosions API
+ /**
+ * Creates explosion at this location with given power
+diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
+index a523d1725f175c924ab1a7d544d389ec81b68bcf..77314fdbd99a5cc34e7a1df4692ba8a1685ef002 100644
+--- a/src/main/java/org/bukkit/World.java
++++ b/src/main/java/org/bukkit/World.java
+@@ -153,6 +153,87 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
+ @NotNull
+ public Block getHighestBlockAt(@NotNull Location location);
+
++ // Paper start - Add heightmap API
++ /**
++ * Returns the highest block's y-coordinate at the specified block coordinates that match the specified heightmap's conditions.
++ * <p>
++ * <b>implNote:</b> Implementations are recommended to use an iterative search as a fallback before resorting to
++ * throwing an {@code UnsupportedOperationException}.
++ * </p>
++ *
++ * @param x The block's x-coordinate.
++ * @param z The block's z-coordinate.
++ * @param heightmap The specified heightmap to use. See {@link com.destroystokyo.paper.HeightmapType}
++ * @return The highest block's y-coordinate at (x, z) that matches the specified heightmap's conditions.
++ * @throws UnsupportedOperationException If the heightmap type is not supported.
++ * @deprecated Upstream has added support for this, use {@link World#getHighestBlockYAt(int, int, HeightMap)}
++ *
++ * @see com.destroystokyo.paper.HeightmapType
++ */
++ @Deprecated(forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.21")
++ public int getHighestBlockYAt(int x, int z, @NotNull com.destroystokyo.paper.HeightmapType heightmap) throws UnsupportedOperationException;
++
++ /**
++ * Returns the highest block's y-coordinate at the specified block coordinates that match the specified heightmap's conditions.
++ * Note that the y-coordinate of the specified location is ignored.
++ * <p>
++ * <b>implNote:</b> Implementations are recommended to use an iterative search as a fallback before resorting to
++ * throwing an {@code UnsupportedOperationException}.
++ * </p>
++ *
++ * @param location The specified block coordinates.
++ * @param heightmap The specified heightmap to use. See {@link com.destroystokyo.paper.HeightmapType}
++ * @return The highest block's y-coordinate at {@code location} that matches the specified heightmap's conditions.
++ * @throws UnsupportedOperationException If the heightmap type is not supported.
++ * @deprecated Upstream has added support for this, use {@link World#getHighestBlockYAt(Location, HeightMap)}
++ * @see com.destroystokyo.paper.HeightmapType
++ */
++ @Deprecated(forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.21")
++ default int getHighestBlockYAt(@NotNull Location location, @NotNull com.destroystokyo.paper.HeightmapType heightmap) throws UnsupportedOperationException {
++ return this.getHighestBlockYAt(location.getBlockX(), location.getBlockZ(), heightmap);
++ }
++
++ /**
++ * Returns the highest {@link Block} at the specified block coordinates that match the specified heightmap's conditions.
++ * <p>
++ * <b>implNote:</b> Implementations are recommended to use an iterative search as a fallback before resorting to
++ * throwing an {@code UnsupportedOperationException}.
++ * </p>
++ * @param x The block's x-coordinate.
++ * @param z The block's z-coordinate.
++ * @param heightmap The specified heightmap to use. See {@link com.destroystokyo.paper.HeightmapType}
++ * @return The highest {@link Block} at (x, z) that matches the specified heightmap's conditions.
++ * @throws UnsupportedOperationException If the heightmap type is not supported.
++ * @deprecated Upstream has added support for this, use {@link World#getHighestBlockAt(int, int, HeightMap)}
++ * @see com.destroystokyo.paper.HeightmapType
++ */
++ @Deprecated(forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.21")
++ @NotNull
++ default Block getHighestBlockAt(int x, int z, @NotNull com.destroystokyo.paper.HeightmapType heightmap) throws UnsupportedOperationException {
++ return this.getBlockAt(x, this.getHighestBlockYAt(x, z, heightmap), z);
++ }
++
++ /**
++ * Returns the highest {@link Block} at the specified block coordinates that match the specified heightmap's conditions.
++ * Note that the y-coordinate of the specified location is ignored.
++ * <p>
++ * <b>implNote:</b> Implementations are recommended to use an iterative search as a fallback before resorting to
++ * throwing an {@code UnsupportedOperationException}.
++ * </p>
++ * @param location The specified block coordinates.
++ * @param heightmap The specified heightmap to use. See {@link com.destroystokyo.paper.HeightmapType}
++ * @return The highest {@link Block} at {@code location} that matches the specified heightmap's conditions.
++ * @throws UnsupportedOperationException If the heightmap type is not supported.
++ * @deprecated Upstream has added support for this, use {@link World#getHighestBlockAt(Location, HeightMap)}
++ * @see com.destroystokyo.paper.HeightmapType
++ */
++ @Deprecated(forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.21")
++ @NotNull
++ default Block getHighestBlockAt(@NotNull Location location, @NotNull com.destroystokyo.paper.HeightmapType heightmap) throws UnsupportedOperationException {
++ return this.getHighestBlockAt(location.getBlockX(), location.getBlockZ(), heightmap);
++ }
++ // Paper end
++
+ /**
+ * Gets the highest block corresponding to the {@link HeightMap} at the
+ * given coordinates.