From 4c05e20af26a58f56a2731de5544ba96860210d0 Mon Sep 17 00:00:00 2001 From: Martix Date: Sun, 25 Oct 2026 16:46:40 +0100 Subject: [PATCH 1/4] Add files via upload --- .../meteordevelopment/meteorclient/systems/modules/Modules.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index 99cdcb14e2b..96d817f2810 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -506,6 +506,7 @@ private void initMovement() { } private void initRender() { + add(new BarrierVision()); add(new BetterTab()); add(new BetterTooltips()); add(new BlockESP()); From a196129b0ba9b05ace72a3daa33bfe7f69a30558 Mon Sep 17 00:00:00 2001 From: Martix Date: Sun, 25 Oct 2026 16:47:50 +0100 Subject: [PATCH 2/4] New module --- .../systems/modules/render/BarrierVision.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java new file mode 100644 index 00000000000..0264c077550 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java @@ -0,0 +1,86 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.systems.modules.render; + +import meteordevelopment.meteorclient.events.world.TickEvent; +import meteordevelopment.meteorclient.settings.IntSetting; +import meteordevelopment.meteorclient.settings.Setting; +import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.systems.modules.Categories; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + +import static meteordevelopment.meteorclient.MeteorClient.mc; + +public class BarrierVision extends Module { + private static final List TARGETS = List.of(Blocks.BARRIER, Blocks.LIGHT, Blocks.STRUCTURE_VOID); + + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private final Setting range = sgGeneral.add(new IntSetting.Builder() + .name("range") + .description("Zasięg wyszukiwania bloków (w blokach).") + .defaultValue(24) + .min(1) + .sliderRange(5, 48) + .build() + ); + + private int timer = 0; + + public BarrierVision() { + super(Categories.Render, "barrier-vision", "Makes invisible visible."); + } + + @Override + public void onActivate() { + timer = Integer.MAX_VALUE / 2; + } + + @EventHandler + private void onTick(TickEvent.Post event) { + if (mc.level == null || mc.player == null) return; + + if (++timer < 40) return; + timer = 0; + + int r = range.get(); + int spawned = 0; + + BlockPos center = mc.player.blockPosition(); + int minY = Math.max(center.getY() - r, mc.level.getMinY()); + int maxY = Math.min(center.getY() + r, mc.level.getMinY() + mc.level.getHeight() - 1); + + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = center.getX() - r; x <= center.getX() + r; x++) { + for (int z = center.getZ() - r; z <= center.getZ() + r; z++) { + for (int y = minY; y <= maxY; y++) { + pos.set(x, y, z); + + BlockState state = mc.level.getBlockState(pos); + if (state.isAir() || !TARGETS.contains(state.getBlock())) continue; + + mc.level.addParticle( + new BlockParticleOption(ParticleTypes.BLOCK_MARKER, state), + x + 0.5, y + 0.5, z + 0.5, + 0, 0, 0 + ); + + if (++spawned >= 5000) return; + } + } + } + } +} From 9c1fa902f4d277a67d0e1dba39f707bc2e83e248 Mon Sep 17 00:00:00 2001 From: Martix Date: Sun, 25 Oct 2026 17:37:38 +0100 Subject: [PATCH 3/4] Update to English --- .../meteorclient/systems/modules/render/BarrierVision.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java index 0264c077550..6cc05de6140 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java @@ -30,7 +30,8 @@ public class BarrierVision extends Module { private final Setting range = sgGeneral.add(new IntSetting.Builder() .name("range") - .description("Zasięg wyszukiwania bloków (w blokach).") + .description("The block search range (in blocks).") + .defaultValue(24) .min(1) .sliderRange(5, 48) From 3515924ccf1bc1e6197fd6c7b882bcadc192d099 Mon Sep 17 00:00:00 2001 From: Martix Date: Mon, 2 Nov 2026 19:06:01 +0100 Subject: [PATCH 4/4] Refactor BarrierVision for improved performance --- .../systems/modules/render/BarrierVision.java | 48 +++++++------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java index 6cc05de6140..f4500f2408a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierVision.java @@ -11,13 +11,12 @@ import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.world.BlockIterator; import meteordevelopment.orbit.EventHandler; -import net.minecraft.core.BlockPos; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; import java.util.List; @@ -25,13 +24,14 @@ public class BarrierVision extends Module { private static final List TARGETS = List.of(Blocks.BARRIER, Blocks.LIGHT, Blocks.STRUCTURE_VOID); + private static final int MAX_PARTICLES = 5000; + private static final int SCAN_INTERVAL = 40; private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final Setting range = sgGeneral.add(new IntSetting.Builder() .name("range") .description("The block search range (in blocks).") - .defaultValue(24) .min(1) .sliderRange(5, 48) @@ -39,6 +39,7 @@ public class BarrierVision extends Module { ); private int timer = 0; + private int spawned = 0; public BarrierVision() { super(Categories.Render, "barrier-vision", "Makes invisible visible."); @@ -46,42 +47,29 @@ public BarrierVision() { @Override public void onActivate() { - timer = Integer.MAX_VALUE / 2; + // Forces a scan on the first tick after enabling + timer = SCAN_INTERVAL; } @EventHandler - private void onTick(TickEvent.Post event) { + private void onTick(TickEvent.Pre event) { if (mc.level == null || mc.player == null) return; - - if (++timer < 40) return; + if (++timer < SCAN_INTERVAL) return; timer = 0; + spawned = 0; int r = range.get(); - int spawned = 0; - - BlockPos center = mc.player.blockPosition(); - int minY = Math.max(center.getY() - r, mc.level.getMinY()); - int maxY = Math.min(center.getY() + r, mc.level.getMinY() + mc.level.getHeight() - 1); - - BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); - - for (int x = center.getX() - r; x <= center.getX() + r; x++) { - for (int z = center.getZ() - r; z <= center.getZ() + r; z++) { - for (int y = minY; y <= maxY; y++) { - pos.set(x, y, z); - BlockState state = mc.level.getBlockState(pos); - if (state.isAir() || !TARGETS.contains(state.getBlock())) continue; + BlockIterator.register(r, r, (pos, state) -> { + if (!TARGETS.contains(state.getBlock())) return; - mc.level.addParticle( - new BlockParticleOption(ParticleTypes.BLOCK_MARKER, state), - x + 0.5, y + 0.5, z + 0.5, - 0, 0, 0 - ); + mc.level.addParticle( + new BlockParticleOption(ParticleTypes.BLOCK_MARKER, state), + pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, + 0, 0, 0 + ); - if (++spawned >= 5000) return; - } - } - } + if (++spawned >= MAX_PARTICLES) BlockIterator.disableCurrent(); + }); } }