diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LightOverlay.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LightOverlay.java index 63be9247c1..32b3f02be0 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LightOverlay.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LightOverlay.java @@ -93,16 +93,11 @@ private void onTick(TickEvent.Pre event) { for (Cross cross : crosses) crossPool.free(cross); crosses.clear(); + int spawnLightLevel = newMobSpawnLightLevel.get() ? 0 : 7; BlockIterator.register(horizontalRange.get(), verticalRange.get(), (blockPos, blockState) -> { - switch (BlockUtils.isValidMobSpawn(blockPos, newMobSpawnLightLevel.get())) { - case Never: - break; - case Potential: - crosses.add(crossPool.get().set(blockPos, true)); - break; - case Always: - crosses.add((crossPool.get().set(blockPos, false))); - break; + switch (BlockUtils.isValidMobSpawn(blockPos, blockState, spawnLightLevel)) { + case Potential -> crosses.add(crossPool.get().set(blockPos, true)); + case Always -> crosses.add((crossPool.get().set(blockPos, false))); } }); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java index 49066626ff..f08857d2b9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java @@ -96,8 +96,10 @@ private void onTickPre(TickEvent.Pre event) { // Find spawn locations for (BlockPos.Mutable blockPos : spawns) spawnPool.free(blockPos); spawns.clear(); + + int lightLevel = newMobSpawnLightLevel.get() ? 0 : 7; BlockIterator.register(range.get(), range.get(), (blockPos, blockState) -> { - BlockUtils.MobSpawn spawn = BlockUtils.isValidMobSpawn(blockPos, newMobSpawnLightLevel.get()); + BlockUtils.MobSpawn spawn = BlockUtils.isValidMobSpawn(blockPos, blockState, lightLevel); if ((spawn == BlockUtils.MobSpawn.Always && (mode.get() == Mode.Always || mode.get() == Mode.Both)) || spawn == BlockUtils.MobSpawn.Potential && (mode.get() == Mode.Potential || mode.get() == Mode.Both)) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java index e7a53280c3..365fd8acb2 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java @@ -244,14 +244,20 @@ public static boolean isClickable(Block block) { } public static MobSpawn isValidMobSpawn(BlockPos blockPos, boolean newMobSpawnLightLevel) { - int spawnLightLimit = newMobSpawnLightLevel ? 0 : 7; - if (!(mc.world.getBlockState(blockPos).getBlock() instanceof AirBlock) || - mc.world.getBlockState(blockPos.down()).getBlock() == Blocks.BEDROCK) return MobSpawn.Never; + return isValidMobSpawn(blockPos, mc.world.getBlockState(blockPos), newMobSpawnLightLevel ? 0 : 7); + } + + public static MobSpawn isValidMobSpawn(BlockPos blockPos, BlockState blockState, int spawnLightLimit) { + if (!(blockState.getBlock() instanceof AirBlock)) return MobSpawn.Never; + + BlockPos down = blockPos.down(); + BlockState downState = mc.world.getBlockState(down); + if (downState.getBlock() == Blocks.BEDROCK) return MobSpawn.Never; - if (!topSurface(mc.world.getBlockState(blockPos.down()))) { - if (mc.world.getBlockState(blockPos.down()).getCollisionShape(mc.world, blockPos.down()) != VoxelShapes.fullCube()) + if (!topSurface(downState)) { + if (downState.getCollisionShape(mc.world, down) != VoxelShapes.fullCube()) return MobSpawn.Never; - if (mc.world.getBlockState(blockPos.down()).isTransparent(mc.world, blockPos.down())) return MobSpawn.Never; + if (downState.isTransparent(mc.world, down)) return MobSpawn.Never; } if (mc.world.getLightLevel(blockPos, 0) <= spawnLightLimit) return MobSpawn.Potential;