2021-06-20 06:48:30 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: dfsek <dfsek@protonmail.com>
|
|
|
|
Date: Sat, 19 Jun 2021 20:15:29 -0700
|
2021-08-28 15:43:26 +02:00
|
|
|
Subject: [PATCH] Add more LimitedRegion API
|
2021-06-20 06:48:30 +02:00
|
|
|
|
|
|
|
|
2021-08-28 15:43:26 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/generator/LimitedRegion.java b/src/main/java/org/bukkit/generator/LimitedRegion.java
|
2021-09-01 14:03:36 +02:00
|
|
|
index 85faeeeef908243aa5f172284784e7e67995ebfb..e0b249d328f7671894cea94bc00d54ab54aacd36 100644
|
2021-08-28 15:43:26 +02:00
|
|
|
--- a/src/main/java/org/bukkit/generator/LimitedRegion.java
|
|
|
|
+++ b/src/main/java/org/bukkit/generator/LimitedRegion.java
|
2021-09-01 14:03:36 +02:00
|
|
|
@@ -4,6 +4,12 @@ import java.util.List;
|
2021-08-28 15:43:26 +02:00
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.RegionAccessor;
|
2021-09-01 14:03:36 +02:00
|
|
|
import org.bukkit.block.BlockState;
|
2021-08-28 15:43:26 +02:00
|
|
|
+// Paper start
|
|
|
|
+import org.bukkit.World;
|
|
|
|
+import org.bukkit.block.BlockState;
|
|
|
|
+import org.bukkit.block.data.BlockData;
|
|
|
|
+import org.bukkit.util.Vector;
|
|
|
|
+// Paper end
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
|
|
|
/**
|
2021-09-01 14:03:36 +02:00
|
|
|
@@ -53,4 +59,137 @@ public interface LimitedRegion extends RegionAccessor {
|
2021-08-28 15:43:26 +02:00
|
|
|
*/
|
2021-09-01 14:03:36 +02:00
|
|
|
@NotNull
|
|
|
|
List<BlockState> getTileEntities();
|
|
|
|
+
|
2021-08-28 15:43:26 +02:00
|
|
|
+
|
|
|
|
+ // Paper start
|
|
|
|
+ /**
|
|
|
|
+ * Sets the block at a vector location to the provided {@link BlockData}.
|
|
|
|
+ *
|
|
|
|
+ * @param vector {@link Vector} representing the position of the block to set.
|
|
|
|
+ * @param data {@link BlockData} to set the block at the provided coordinates to.
|
|
|
|
+ */
|
|
|
|
+ default void setBlockData(@NotNull Vector vector, @NotNull BlockData data) {
|
|
|
|
+ setBlockData(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ(), data);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Sets the {@link BlockState} at a location.
|
|
|
|
+ *
|
|
|
|
+ * @param x X coordinate.
|
|
|
|
+ * @param y Y coordinate.
|
|
|
|
+ * @param z Z coordinate.
|
|
|
|
+ * @param state The block state.
|
|
|
|
+ */
|
|
|
|
+ void setBlockState(int x, int y, int z, @NotNull BlockState state);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Sets the {@link BlockState} at a location.
|
|
|
|
+ *
|
|
|
|
+ * @param location Location to set block state.
|
|
|
|
+ * @param state The block state.
|
|
|
|
+ */
|
|
|
|
+ default void setBlockState(@NotNull Vector location, @NotNull BlockState state) {
|
|
|
|
+ setBlockState(location.getBlockX(), location.getBlockY(), location.getBlockZ(), state);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the {@link BlockState} at a location.
|
|
|
|
+ *
|
|
|
|
+ * @param location Location to get block state from.
|
|
|
|
+ * @return The block state.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ default BlockState getBlockState(@NotNull Vector location) {
|
|
|
|
+ return getBlockState(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Schedules a block update at (x, y, z).
|
|
|
|
+ *
|
|
|
|
+ * @param x X coordinate
|
|
|
|
+ * @param y Y coordinate
|
|
|
|
+ * @param z Z coordinate
|
|
|
|
+ */
|
|
|
|
+ void scheduleBlockUpdate(int x, int y, int z);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Schedules a block update at a vector location.
|
|
|
|
+ *
|
|
|
|
+ * @param location {@link Vector} representing the position of the block to update.
|
|
|
|
+ */
|
|
|
|
+ default void scheduleBlockUpdate(@NotNull Vector location) {
|
|
|
|
+ scheduleBlockUpdate(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Schedules a fluid update at (x, y, z).
|
|
|
|
+ *
|
|
|
|
+ * @param x X coordinate
|
|
|
|
+ * @param y Y coordinate
|
|
|
|
+ * @param z Z coordinate
|
|
|
|
+ */
|
|
|
|
+ void scheduleFluidUpdate(int x, int y, int z);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Schedules a fluid update at a vector location.
|
|
|
|
+ *
|
|
|
|
+ * @param location {@link Vector} representing the position of the block to update.
|
|
|
|
+ */
|
|
|
|
+ default void scheduleFluidUpdate(@NotNull Vector location) {
|
|
|
|
+ scheduleFluidUpdate(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the {@link World} object this region represents.
|
|
|
|
+ * <p>
|
|
|
|
+ * Do <b>not</b> attempt to read from/write to this world! Doing so during generation <b>will cause a deadlock!</b>
|
|
|
|
+ *
|
|
|
|
+ * @return The {@link World} object that this region represents.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ World getWorld();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the {@link BlockData} of the block at the provided coordinates.
|
|
|
|
+ *
|
|
|
|
+ * @param vector {@link Vector} representing the position of the block to get.
|
|
|
|
+ * @return {@link BlockData} at the coordinates
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ default BlockData getBlockData(@NotNull Vector vector) {
|
|
|
|
+ return getBlockData(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the X-coordinate of the chunk in the center of the region.
|
|
|
|
+ *
|
|
|
|
+ * @return The center chunk's X coordinate.
|
|
|
|
+ */
|
|
|
|
+ int getCenterChunkX();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the X-coordinate of the block in the center of the region.
|
|
|
|
+ *
|
|
|
|
+ * @return The center chunk's X coordinate.
|
|
|
|
+ */
|
|
|
|
+ default int getCenterBlockX() {
|
|
|
|
+ return getCenterChunkX() << 4;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the Z-coordinate of the chunk in the center of the region.
|
|
|
|
+ *
|
|
|
|
+ * @return The center chunk's Z coordinate.
|
|
|
|
+ */
|
|
|
|
+ int getCenterChunkZ();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the Z-coordinate of the block in the center of the region.
|
|
|
|
+ *
|
|
|
|
+ * @return The center chunk's Z coordinate.
|
|
|
|
+ */
|
|
|
|
+ default int getCenterBlockZ() {
|
|
|
|
+ return getCenterChunkZ() << 4;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
}
|