From 1b0e93b0507bb004791e03ee768a8b24843e83e1 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Wed, 1 Jan 2020 15:14:19 +0100 Subject: [PATCH] Array bounds check for overlay layer --- .../kotlin/mods/betterfoliage/client/chunk/Overlay.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/mods/betterfoliage/client/chunk/Overlay.kt b/src/main/kotlin/mods/betterfoliage/client/chunk/Overlay.kt index 3ff6a17..ef3e9c2 100644 --- a/src/main/kotlin/mods/betterfoliage/client/chunk/Overlay.kt +++ b/src/main/kotlin/mods/betterfoliage/client/chunk/Overlay.kt @@ -92,14 +92,16 @@ object ChunkOverlayManager : IBlockUpdateListener { } class ChunkOverlayData(layers: List>) { + val BlockPos.isValid: Boolean get() = y in validYRange val rawData = layers.associateWith { emptyOverlay() } - fun get(layer: ChunkOverlayLayer, pos: BlockPos): T? = rawData[layer]?.get(pos.x and 15)?.get(pos.z and 15)?.get(pos.y) as T? - fun set(layer: ChunkOverlayLayer, pos: BlockPos, data: T) = rawData[layer]?.get(pos.x and 15)?.get(pos.z and 15)?.set(pos.y, data) - fun clear(layer: ChunkOverlayLayer, pos: BlockPos) = rawData[layer]?.get(pos.x and 15)?.get(pos.z and 15)?.set(pos.y, UNCALCULATED) + fun get(layer: ChunkOverlayLayer, pos: BlockPos): T? = if (pos.isValid) rawData[layer]?.get(pos.x and 15)?.get(pos.z and 15)?.get(pos.y) as T? else null + fun set(layer: ChunkOverlayLayer, pos: BlockPos, data: T) = if (pos.isValid) rawData[layer]?.get(pos.x and 15)?.get(pos.z and 15)?.set(pos.y, data) else null + fun clear(layer: ChunkOverlayLayer, pos: BlockPos) = if (pos.isValid) rawData[layer]?.get(pos.x and 15)?.get(pos.z and 15)?.set(pos.y, UNCALCULATED) else null companion object { val UNCALCULATED = object {} fun emptyOverlay() = Array(16) { Array(16) { Array(256) { UNCALCULATED }}} + val validYRange = 0 until 256 } }