mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-15 07:01:36 +08:00
974b0afca9
CraftBukkit removed their implementation that caused this issue, switching to Mojang's implementation which doesn't appear to share it. I already removed the important bit in the last upstream merge, this is just unused and unnecessary now. So we remove it.
53 lines
2.7 KiB
Diff
53 lines
2.7 KiB
Diff
From 58e7452d99c66366f890d624f3ee8315fe87eb8c Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 28 Mar 2016 22:03:09 -0400
|
|
Subject: [PATCH] Prevent Waterflow BlockFromToEvent from loading chunks
|
|
|
|
Many protection plugins would unintentionally trigger chunk loads
|
|
by calling .getToBlock() on an unloaded chunk, killing performance.
|
|
|
|
Simply skip the event call. as CraftBukkit blocks changing the block
|
|
of unloaded chunks anyways.
|
|
|
|
This keeps behavior consistent, vs inconsistent flowing based on plugin triggered loads.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockFlowing.java b/src/main/java/net/minecraft/server/BlockFlowing.java
|
|
index 0a2823686..8eba70b01 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockFlowing.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockFlowing.java
|
|
@@ -96,6 +96,7 @@ public class BlockFlowing extends BlockFluids {
|
|
|
|
if (this.h(world, blockposition.down(), iblockdata2)) {
|
|
// CraftBukkit start
|
|
+ if (!canFlowTo(world, source, BlockFace.DOWN)) { return; } // Paper
|
|
BlockFromToEvent event = new BlockFromToEvent(source, BlockFace.DOWN);
|
|
world.getServer().getPluginManager().callEvent(event);
|
|
|
|
@@ -136,6 +137,7 @@ public class BlockFlowing extends BlockFluids {
|
|
EnumDirection enumdirection1 = (EnumDirection) iterator1.next();
|
|
|
|
// CraftBukkit start
|
|
+ if (!canFlowTo(world, source, org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(enumdirection1))) { continue; } // Paper
|
|
BlockFromToEvent event = new BlockFromToEvent(source, org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(enumdirection1));
|
|
world.getServer().getPluginManager().callEvent(event);
|
|
|
|
@@ -148,8 +150,14 @@ public class BlockFlowing extends BlockFluids {
|
|
|
|
}
|
|
|
|
+ // Paper start
|
|
+ private boolean canFlowTo(World world, org.bukkit.block.Block source, BlockFace face) {
|
|
+ return source.getWorld().isChunkLoaded((source.getX() + face.getModX()) >> 4, (source.getZ() + face.getModZ()) >> 4);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
private void flow(World world, BlockPosition blockposition, IBlockData iblockdata, int i) {
|
|
- if (world.isLoaded(blockposition) && this.h(world, blockposition, iblockdata)) { // CraftBukkit - add isLoaded check
|
|
+ if (/*world.isLoaded(blockposition) &&*/ this.h(world, blockposition, iblockdata)) { // CraftBukkit - add isLoaded check // Paper - Already checked before we get here for isLoaded
|
|
if (iblockdata.getMaterial() != Material.AIR) {
|
|
if (this.material == Material.LAVA) {
|
|
this.fizz(world, blockposition);
|
|
--
|
|
2.12.2.windows.2
|
|
|