diff --git a/patches/api/Expand-FallingBlock-API.patch b/patches/api/Expand-FallingBlock-API.patch new file mode 100644 index 0000000000..521700384f --- /dev/null +++ b/patches/api/Expand-FallingBlock-API.patch @@ -0,0 +1,108 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> +Date: Sun, 5 Dec 2021 14:58:55 -0500 +Subject: [PATCH] Expand FallingBlock API + +- add auto expire setting +- add setter for block data +- add accessors for block state + +Co-authored-by: Lukas Planz + +diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/World.java ++++ b/src/main/java/org/bukkit/World.java +@@ -0,0 +0,0 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient + * @return The spawned {@link FallingBlock} instance + * @throws IllegalArgumentException if {@link Location} or {@link + * MaterialData} are null or {@link Material} of the {@link MaterialData} is not a block ++ * @deprecated Use {@link #spawn(Location, Class, Consumer)} (or a variation thereof) in combination with {@link FallingBlock#setBlockData(BlockData)} + */ + @NotNull ++ @Deprecated // Paper + public FallingBlock spawnFallingBlock(@NotNull Location location, @NotNull MaterialData data) throws IllegalArgumentException; + + /** +@@ -0,0 +0,0 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient + * @return The spawned {@link FallingBlock} instance + * @throws IllegalArgumentException if {@link Location} or {@link + * BlockData} are null ++ * @deprecated Use {@link #spawn(Location, Class, Consumer)} (or a variation thereof) in combination with {@link FallingBlock#setBlockData(BlockData)} + */ + @NotNull ++ @org.jetbrains.annotations.ApiStatus.Obsolete // Paper + public FallingBlock spawnFallingBlock(@NotNull Location location, @NotNull BlockData data) throws IllegalArgumentException; + + /** +@@ -0,0 +0,0 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient + * @return The spawned {@link FallingBlock} instance + * @throws IllegalArgumentException if {@link Location} or {@link + * Material} are null or {@link Material} is not a block +- * @deprecated Magic value ++ * @deprecated Magic value. Use {@link #spawn(Location, Class, Consumer)} (or a variation thereof) in combination with {@link FallingBlock#setBlockData(BlockData)} + */ + @Deprecated + @NotNull +diff --git a/src/main/java/org/bukkit/entity/FallingBlock.java b/src/main/java/org/bukkit/entity/FallingBlock.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/entity/FallingBlock.java ++++ b/src/main/java/org/bukkit/entity/FallingBlock.java +@@ -0,0 +0,0 @@ public interface FallingBlock extends Entity { + */ + @NotNull + BlockData getBlockData(); ++ // Paper start ++ /** ++ * Sets the data for the falling block. ++ *
++ * Any potential additional data currently stored in the falling blocks {@link #getBlockState()} will be ++ * purged by calling this setter. ++ * ++ * @param blockData the data to use as the block ++ */ ++ void setBlockData(@NotNull BlockData blockData); ++ ++ /** ++ * Get the data of the falling block represented as a {@link org.bukkit.block.BlockState BlockState} ++ * which includes potential NBT data that gets applied when the block gets placed on landing. ++ * ++ * @return the BlockState representing this block ++ */ ++ @NotNull ++ org.bukkit.block.BlockState getBlockState(); ++ ++ /** ++ * Sets the {@link BlockData} and possibly present tile entity data for the falling block. ++ * ++ * @param blockState the BlockState to use ++ */ ++ void setBlockState(@NotNull org.bukkit.block.BlockState blockState); ++ // Paper end + + /** + * Get if the falling block will break into an item if it cannot be placed. +@@ -0,0 +0,0 @@ public interface FallingBlock extends Entity { + default org.bukkit.Location getSourceLoc() { + return this.getOrigin(); + } ++ // Paper Start - Auto expire setting ++ /** ++ * Sets if this falling block should expire after: ++ * - 30 seconds ++ * - 5 seconds and is outside of the world ++ * ++ * @return if this behavior occurs ++ */ ++ boolean doesAutoExpire(); ++ ++ /** ++ * Sets if this falling block should expire after: ++ * - 30 seconds ++ * - 5 seconds and is outside of the world ++ * ++ * @param autoExpires if this behavior should occur ++ */ ++ void shouldAutoExpire(boolean autoExpires); ++ // Paper End - Auto expire setting + } diff --git a/patches/api/FallingBlock-auto-expire-setting.patch b/patches/api/FallingBlock-auto-expire-setting.patch deleted file mode 100644 index 6c613c9477..0000000000 --- a/patches/api/FallingBlock-auto-expire-setting.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> -Date: Sun, 5 Dec 2021 14:58:55 -0500 -Subject: [PATCH] FallingBlock auto expire setting - - -diff --git a/src/main/java/org/bukkit/entity/FallingBlock.java b/src/main/java/org/bukkit/entity/FallingBlock.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/org/bukkit/entity/FallingBlock.java -+++ b/src/main/java/org/bukkit/entity/FallingBlock.java -@@ -0,0 +0,0 @@ public interface FallingBlock extends Entity { - default org.bukkit.Location getSourceLoc() { - return this.getOrigin(); - } -+ // Paper Start - Auto expire setting -+ /** -+ * Sets if this falling block should expire after: -+ * - 30 seconds -+ * - 5 seconds and is outside of the world -+ * -+ * @return if this behavior occurs -+ */ -+ boolean doesAutoExpire(); -+ -+ /** -+ * Sets if this falling block should expire after: -+ * - 30 seconds -+ * - 5 seconds and is outside of the world -+ * -+ * @param autoExpires if this behavior should occur -+ */ -+ void shouldAutoExpire(boolean autoExpires); -+ // Paper End - Auto expire setting - } diff --git a/patches/api/Fix-Spigot-annotation-mistakes.patch b/patches/api/Fix-Spigot-annotation-mistakes.patch index 1cb237483a..e20f0c33cd 100644 --- a/patches/api/Fix-Spigot-annotation-mistakes.patch +++ b/patches/api/Fix-Spigot-annotation-mistakes.patch @@ -295,17 +295,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + //@Deprecated // Paper public boolean refreshChunk(int x, int z); - /** -@@ -0,0 +0,0 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient - * @return The spawned {@link FallingBlock} instance - * @throws IllegalArgumentException if {@link Location} or {@link - * MaterialData} are null or {@link Material} of the {@link MaterialData} is not a block -+ * @deprecated use {@link #spawnFallingBlock(Location, BlockData)} - */ - @NotNull -+ @Deprecated // Paper - public FallingBlock spawnFallingBlock(@NotNull Location location, @NotNull MaterialData data) throws IllegalArgumentException; - /** @@ -0,0 +0,0 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient // Paper end - view distance api diff --git a/patches/server/FallingBlock-auto-expire-setting.patch b/patches/server/Expand-FallingBlock-API.patch similarity index 65% rename from patches/server/FallingBlock-auto-expire-setting.patch rename to patches/server/Expand-FallingBlock-API.patch index 9252620a88..eff04929d9 100644 --- a/patches/server/FallingBlock-auto-expire-setting.patch +++ b/patches/server/Expand-FallingBlock-API.patch @@ -1,8 +1,16 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Sun, 5 Dec 2021 14:58:17 -0500 -Subject: [PATCH] FallingBlock auto expire setting +Subject: [PATCH] Expand FallingBlock API +- add auto expire setting +- add setter for block data +- add accessors for block state + +== AT == +public net.minecraft.world.entity.item.FallingBlockEntity blockState + +Co-authored-by: Lukas Planz diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 @@ -49,6 +57,38 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +@@ -0,0 +0,0 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { + public BlockData getBlockData() { + return CraftBlockData.fromData(this.getHandle().getBlockState()); + } ++ // Paper start ++ @Override ++ public void setBlockData(final BlockData blockData) { ++ Preconditions.checkArgument(blockData != null, "blockData"); ++ final net.minecraft.world.level.block.state.BlockState oldState = this.getHandle().blockState, newState = ((CraftBlockData) blockData).getState(); ++ this.getHandle().blockState = newState; ++ this.getHandle().blockData = null; ++ ++ if (oldState != newState) this.update(); ++ } ++ ++ @Override ++ public org.bukkit.block.BlockState getBlockState() { ++ return org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(this.getHandle().blockState, this.getHandle().blockData); ++ } ++ ++ @Override ++ public void setBlockState(final org.bukkit.block.BlockState blockState) { ++ Preconditions.checkArgument(blockState != null, "blockState"); ++ // Calls #update if needed, the block data compound tag is not synced with the client and hence can be mutated after the sync with clients. ++ // The call also clears any potential old block data. ++ this.setBlockData(blockState.getBlockData()); ++ if (blockState instanceof final org.bukkit.craftbukkit.block.CraftBlockEntityState tileEntity) this.getHandle().blockData = tileEntity.getSnapshotNBT(); ++ } ++ // Paper end + + @Override + public boolean getDropItem() { @@ -0,0 +0,0 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { this.setHurtEntities(true); }