From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar 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/server/FluidTypeFlowing.java b/src/main/java/net/minecraft/server/FluidTypeFlowing.java index 3099a5e654d343fba1a61d6be3477df0866feb47..376dca1889f1eca4ce9993e0e067a94eb293103d 100644 --- a/src/main/java/net/minecraft/server/FluidTypeFlowing.java +++ b/src/main/java/net/minecraft/server/FluidTypeFlowing.java @@ -178,7 +178,8 @@ public abstract class FluidTypeFlowing extends FluidType { EnumDirection enumdirection = (EnumDirection) entry.getKey(); Fluid fluid1 = (Fluid) entry.getValue(); BlockPosition blockposition1 = blockposition.shift(enumdirection); - IBlockData iblockdata1 = generatoraccess.getType(blockposition1); + IBlockData iblockdata1 = generatoraccess.getTypeIfLoaded(blockposition1); // Paper + if (iblockdata1 == null) continue; // Paper if (this.a(generatoraccess, blockposition, iblockdata, enumdirection, blockposition1, iblockdata1, generatoraccess.getFluid(blockposition1), fluid1.getType())) { // CraftBukkit start @@ -205,7 +206,8 @@ public abstract class FluidTypeFlowing extends FluidType { while (iterator.hasNext()) { EnumDirection enumdirection = (EnumDirection) iterator.next(); BlockPosition blockposition1 = blockposition.shift(enumdirection); - IBlockData iblockdata1 = iworldreader.getType(blockposition1); + IBlockData iblockdata1 = iworldreader.getTypeIfLoaded(blockposition1); // Paper + if (iblockdata1 == null) continue; // Paper Fluid fluid = iblockdata1.getFluid(); if (fluid.getType().a((FluidType) this) && this.a(enumdirection, (IBlockAccess) iworldreader, blockposition, iblockdata, blockposition1, iblockdata1)) { @@ -322,11 +324,18 @@ public abstract class FluidTypeFlowing extends FluidType { if (enumdirection1 != enumdirection) { BlockPosition blockposition2 = blockposition.shift(enumdirection1); short short0 = a(blockposition1, blockposition2); - Pair pair = (Pair) short2objectmap.computeIfAbsent(short0, (k) -> { - IBlockData iblockdata1 = iworldreader.getType(blockposition2); + // Paper start - avoid loading chunks + Pair pair = short2objectmap.get(short0); + if (pair == null) { + IBlockData iblockdatax = iworldreader.getTypeIfLoaded(blockposition2); + if (iblockdatax == null) { + continue; + } - return Pair.of(iblockdata1, iblockdata1.getFluid()); - }); + pair = Pair.of(iblockdatax, iblockdatax.getFluid()); + short2objectmap.put(short0, pair); + } + // Paper end IBlockData iblockdata1 = (IBlockData) pair.getFirst(); Fluid fluid = (Fluid) pair.getSecond(); @@ -398,11 +407,16 @@ public abstract class FluidTypeFlowing extends FluidType { EnumDirection enumdirection = (EnumDirection) iterator.next(); BlockPosition blockposition1 = blockposition.shift(enumdirection); short short0 = a(blockposition, blockposition1); - Pair pair = (Pair) short2objectmap.computeIfAbsent(short0, (j) -> { - IBlockData iblockdata1 = iworldreader.getType(blockposition1); - - return Pair.of(iblockdata1, iblockdata1.getFluid()); - }); + // Paper start + Pair pair = (Pair) short2objectmap.get(short0); + if (pair == null) { + IBlockData iblockdatax = iworldreader.getTypeIfLoaded(blockposition1); + if (iblockdatax == null) continue; + + pair = Pair.of(iblockdatax, iblockdatax.getFluid()); + short2objectmap.put(short0, pair); + } + // Paper end IBlockData iblockdata1 = (IBlockData) pair.getFirst(); Fluid fluid = (Fluid) pair.getSecond(); Fluid fluid1 = this.a(iworldreader, blockposition1, iblockdata1);