aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0260-Prevent-chunk-loading-from-Fluid-Flowing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0260-Prevent-chunk-loading-from-Fluid-Flowing.patch')
-rw-r--r--patches/server/0260-Prevent-chunk-loading-from-Fluid-Flowing.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/patches/server/0260-Prevent-chunk-loading-from-Fluid-Flowing.patch b/patches/server/0260-Prevent-chunk-loading-from-Fluid-Flowing.patch
new file mode 100644
index 0000000000..8e59eff59d
--- /dev/null
+++ b/patches/server/0260-Prevent-chunk-loading-from-Fluid-Flowing.patch
@@ -0,0 +1,76 @@
+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 89296667d2ad76a706a3f5b817f3ad8c207cac2d..02be7c3d104fe3b3a2772201f5ebdfb6d16e9b49 100644
+--- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
++++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
+@@ -174,7 +174,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
++ if (iblockdata1 == null) continue; // Paper
+
+ if (this.canSpreadTo(world, pos, blockState, enumdirection, blockposition1, iblockdata1, world.getFluidState(blockposition1), fluid1.getType())) {
+ // CraftBukkit start
+@@ -201,7 +202,9 @@ 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
++ if (iblockdata1 == null) continue; // Paper
+ FluidState fluid = iblockdata1.getFluidState();
+
+ if (fluid.getType().isSame(this) && this.canPassThroughWall(enumdirection, world, pos, state, blockposition1, iblockdata1)) {
+@@ -318,11 +321,18 @@ public abstract class FlowingFluid extends Fluid {
+ if (enumdirection1 != enumdirection) {
+ BlockPos blockposition2 = blockposition.relative(enumdirection1);
+ short short0 = FlowingFluid.getCacheKey(blockposition1, blockposition2);
+- Pair<BlockState, FluidState> pair = (Pair) short2objectmap.computeIfAbsent(short0, (short1) -> {
+- BlockState iblockdata1 = world.getBlockState(blockposition2);
++ // Paper start - avoid loading chunks
++ Pair<BlockState, FluidState> pair = short2objectmap.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());
++ short2objectmap.put(short0, pair);
++ }
++ // Paper end
+ BlockState iblockdata1 = (BlockState) pair.getFirst();
+ FluidState fluid = (FluidState) pair.getSecond();
+
+@@ -394,11 +404,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
++ 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
+ BlockState iblockdata1 = (BlockState) pair.getFirst();
+ FluidState fluid = (FluidState) pair.getSecond();
+ FluidState fluid1 = this.getNewLiquid(world, blockposition1, iblockdata1);