diff --git a/patches/api/0368-Block-Ticking-API.patch b/patches/api/0368-Block-Ticking-API.patch index aba95a2d13..02fed74c9e 100644 --- a/patches/api/0368-Block-Ticking-API.patch +++ b/patches/api/0368-Block-Ticking-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Block Ticking API diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index cf9600c743e977312c0a15c455d602391797ef34..38cf77e32b76bc7d9db7523f7f21427ebb72f913 100644 +index cf9600c743e977312c0a15c455d602391797ef34..8a842840e1a2652a6356d4a56e4749a5ba36e902 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -589,6 +589,21 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr +@@ -589,6 +589,41 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr * @return true if the block was destroyed */ boolean breakNaturally(@NotNull ItemStack tool, boolean triggerEffect, boolean dropExperience); @@ -17,14 +17,34 @@ index cf9600c743e977312c0a15c455d602391797ef34..38cf77e32b76bc7d9db7523f7f21427e + * Causes the block to be ticked, this is different from {@link Block#randomTick()}, + * in that it is usually scheduled to occur, for example + * redstone components being activated, sand falling, etc. ++ *
++ * This method may directly fire events relating to block ticking. ++ * ++ * @see #fluidTick() + */ + void tick(); + + /** ++ * Causes the fluid to be ticked, this is different from {@link Block#randomTick()}, ++ * in that it is usually scheduled to occur, for example ++ * causing waterlogged blocks to spread. ++ *
++ * This method may directly fire events relating to fluid ticking. ++ * ++ * @see #tick() ++ */ ++ void fluidTick(); ++ ++ /** + * Causes the block to be ticked randomly. + * This has a chance to execute naturally if {@link BlockData#isRandomlyTicked()} is true. + *
+ * For certain blocks, this behavior may be the same as {@link Block#tick()}. ++ *
++ * This method may directly fire events relating to block random ticking.
++ *
++ * @see #tick()
++ * @see #fluidTick()
+ */
+ void randomTick();
// Paper end
diff --git a/patches/server/0773-Block-Ticking-API.patch b/patches/server/0773-Block-Ticking-API.patch
index 9afbc4d4b1..d26cc16750 100644
--- a/patches/server/0773-Block-Ticking-API.patch
+++ b/patches/server/0773-Block-Ticking-API.patch
@@ -5,28 +5,43 @@ Subject: [PATCH] Block Ticking API
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
-index 6d10396347b69d9243ab902ecc68ede93fa17b7d..0a96b00a98227714ef99005e0a223765feae8fe9 100644
+index 6d10396347b69d9243ab902ecc68ede93fa17b7d..af219df5267589300f0ad1d30fa5c81a1f50234f 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
-@@ -709,5 +709,21 @@ public class CraftBlock implements Block {
+@@ -78,6 +78,12 @@ public class CraftBlock implements Block {
+ return this.world.getBlockState(this.position);
+ }
+
++ // Paper start
++ public net.minecraft.world.level.material.FluidState getNMSFluid() {
++ return this.world.getFluidState(this.position);
++ }
++ // Paper end
++
+ public BlockPos getPosition() {
+ return this.position;
+ }
+@@ -709,5 +715,23 @@ public class CraftBlock implements Block {
public boolean isValidTool(ItemStack itemStack) {
return getDrops(itemStack).size() != 0;
}
+
+ @Override
+ public void tick() {
-+ net.minecraft.world.level.block.state.BlockState blockData = this.getNMS();
-+ net.minecraft.server.level.ServerLevel level = this.world.getMinecraftWorld();
++ final ServerLevel level = this.world.getMinecraftWorld();
++ this.getNMS().tick(level, this.position, level.random);
++ }
+
-+ blockData.getBlock().tick(blockData, level, this.position, level.random);
++
++ @Override
++ public void fluidTick() {
++ this.getNMSFluid().tick(this.world.getMinecraftWorld(), this.position);
+ }
+
+ @Override
+ public void randomTick() {
-+ net.minecraft.world.level.block.state.BlockState blockData = this.getNMS();
-+ net.minecraft.server.level.ServerLevel level = this.world.getMinecraftWorld();
-+
-+ blockData.getBlock().randomTick(blockData, level, this.position, level.random);
++ final ServerLevel level = this.world.getMinecraftWorld();
++ this.getNMS().randomTick(level, this.position, level.random);
+ }
// Paper end
}
diff --git a/patches/server/0899-Only-capture-actual-tree-growth.patch b/patches/server/0899-Only-capture-actual-tree-growth.patch
index 845e3ce577..683dad5511 100644
--- a/patches/server/0899-Only-capture-actual-tree-growth.patch
+++ b/patches/server/0899-Only-capture-actual-tree-growth.patch
@@ -60,10 +60,10 @@ index 83e6e3286d04c39d6d7ba496251aec962621f72e..3ff0d08e4964aae82d8e51d3b8bf9aa0
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
-index 0a96b00a98227714ef99005e0a223765feae8fe9..e5506a7d074a9f89d41f4d5d7549a458779bef20 100644
+index af219df5267589300f0ad1d30fa5c81a1f50234f..461a66c323a74db5a70981fafc5fa20f54f0f40d 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
-@@ -566,6 +566,7 @@ public class CraftBlock implements Block {
+@@ -572,6 +572,7 @@ public class CraftBlock implements Block {
if (!event.isCancelled()) {
for (BlockState blockstate : blocks) {
blockstate.update(true);
diff --git a/patches/server/0974-Properly-handle-experience-dropping-on-block-break.patch b/patches/server/0974-Properly-handle-experience-dropping-on-block-break.patch
index 3cc682a856..57e56e24ab 100644
--- a/patches/server/0974-Properly-handle-experience-dropping-on-block-break.patch
+++ b/patches/server/0974-Properly-handle-experience-dropping-on-block-break.patch
@@ -80,10 +80,10 @@ index e57e3a26b0fb856e1ab693df5783fe8b9bee9719..64300077fce6eb28b6bddd42b3467eaa
public List