diff --git a/src/main/java/eu/mhsl/minecraft/pixelpics/render/render/DefaultScreenRenderer.java b/src/main/java/eu/mhsl/minecraft/pixelpics/render/render/DefaultScreenRenderer.java index 2f3f09a..65fbda7 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelpics/render/render/DefaultScreenRenderer.java +++ b/src/main/java/eu/mhsl/minecraft/pixelpics/render/render/DefaultScreenRenderer.java @@ -39,7 +39,9 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import java.util.stream.IntStream; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.util.Vector; @@ -167,8 +169,15 @@ public class DefaultScreenRenderer { return SnapshotBuilder.chunkArea(eyeLocation, FrustumBounds.of(eyeLocation, rayMap, MAX_DISTANCE), 2); } + /** The fluid at the eye; an unloaded chunk counts as air (never loads one, see {@link SnapshotBuilder}). */ private static int cameraFluid(Location eye) { - return FluidRenderer.cameraFluid(eye.getWorld()::getBlockData, eye.getX(), eye.getY(), eye.getZ()); + World world = eye.getWorld(); + BlockData air = Material.AIR.createBlockData(); + return FluidRenderer.cameraFluid( + (x, y, z) -> world.isChunkLoaded(x >> 4, z >> 4) ? world.getBlockData(x, y, z) : air, + eye.getX(), + eye.getY(), + eye.getZ()); } private static RayMap rayMap(Location eye, int width, int height, int cameraFluid) {