diff options
Diffstat (limited to 'patches/server/0253-Prevent-chunk-loading-from-Fluid-Flowing.patch')
-rw-r--r-- | patches/server/0253-Prevent-chunk-loading-from-Fluid-Flowing.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/patches/server/0253-Prevent-chunk-loading-from-Fluid-Flowing.patch b/patches/server/0253-Prevent-chunk-loading-from-Fluid-Flowing.patch new file mode 100644 index 0000000000..50c82e5d54 --- /dev/null +++ b/patches/server/0253-Prevent-chunk-loading-from-Fluid-Flowing.patch @@ -0,0 +1,75 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Mon, 10 Sep 2018 23:36:16 -0400 +Subject: [PATCH] Prevent chunk loading from Fluid Flowing + + +diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +index b67bc6d6a02fdac377f32a766fd8cc2c5fc43488..3a2ae2bca410708736da64560e74b8010444f2dc 100644 +--- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java ++++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +@@ -176,7 +176,8 @@ public abstract class FlowingFluid extends Fluid { + Direction enumdirection = (Direction) entry.getKey(); + FluidState fluid1 = (FluidState) entry.getValue(); + BlockPos blockposition1 = pos.relative(enumdirection); +- BlockState iblockdata1 = world.getBlockState(blockposition1); ++ BlockState iblockdata1 = world.getBlockStateIfLoaded(blockposition1); // Paper - Prevent chunk loading from fluid flowing ++ if (iblockdata1 == null) continue; // Paper - Prevent chunk loading from fluid flowing + + if (this.canSpreadTo(world, pos, blockState, enumdirection, blockposition1, iblockdata1, world.getFluidState(blockposition1), fluid1.getType())) { + // CraftBukkit start +@@ -203,7 +204,8 @@ public abstract class FlowingFluid extends Fluid { + while (iterator.hasNext()) { + Direction enumdirection = (Direction) iterator.next(); + BlockPos blockposition1 = pos.relative(enumdirection); +- BlockState iblockdata1 = world.getBlockState(blockposition1); ++ BlockState iblockdata1 = world.getBlockStateIfLoaded(blockposition1); // Paper - Prevent chunk loading from fluid flowing ++ if (iblockdata1 == null) continue; // Paper - Prevent chunk loading from fluid flowing + FluidState fluid = iblockdata1.getFluidState(); + + if (fluid.getType().isSame(this) && this.canPassThroughWall(enumdirection, world, pos, state, blockposition1, iblockdata1)) { +@@ -320,11 +322,18 @@ public abstract class FlowingFluid extends Fluid { + if (enumdirection1 != direction) { + BlockPos blockposition2 = pos.relative(enumdirection1); + short short0 = FlowingFluid.getCacheKey(fromPos, blockposition2); +- Pair<BlockState, FluidState> pair = (Pair) stateCache.computeIfAbsent(short0, (short1) -> { +- BlockState iblockdata1 = world.getBlockState(blockposition2); ++ // Paper start - Prevent chunk loading from fluid flowing ++ Pair<BlockState, FluidState> pair = stateCache.get(short0); ++ if (pair == null) { ++ BlockState iblockdatax = world.getBlockStateIfLoaded(blockposition2); ++ if (iblockdatax == null) { ++ continue; ++ } + +- return Pair.of(iblockdata1, iblockdata1.getFluidState()); +- }); ++ pair = Pair.of(iblockdatax, iblockdatax.getFluidState()); ++ stateCache.put(short0, pair); ++ } ++ // Paper end - Prevent chunk loading from fluid flowing + BlockState iblockdata1 = (BlockState) pair.getFirst(); + FluidState fluid = (FluidState) pair.getSecond(); + +@@ -396,11 +405,16 @@ public abstract class FlowingFluid extends Fluid { + Direction enumdirection = (Direction) iterator.next(); + BlockPos blockposition1 = pos.relative(enumdirection); + short short0 = FlowingFluid.getCacheKey(pos, blockposition1); +- Pair<BlockState, FluidState> pair = (Pair) short2objectmap.computeIfAbsent(short0, (short1) -> { +- BlockState iblockdata1 = world.getBlockState(blockposition1); +- +- return Pair.of(iblockdata1, iblockdata1.getFluidState()); +- }); ++ // Paper start - Prevent chunk loading from fluid flowing ++ Pair pair = (Pair) short2objectmap.get(short0); ++ if (pair == null) { ++ BlockState iblockdatax = world.getBlockStateIfLoaded(blockposition1); ++ if (iblockdatax == null) continue; ++ ++ pair = Pair.of(iblockdatax, iblockdatax.getFluidState()); ++ short2objectmap.put(short0, pair); ++ } ++ // Paper end - Prevent chunk loading from fluid flowing + BlockState iblockdata1 = (BlockState) pair.getFirst(); + FluidState fluid = (FluidState) pair.getSecond(); + FluidState fluid1 = this.getNewLiquid(world, blockposition1, iblockdata1); |