From e65e2ff6232117c296e5474e85c979ef77440be6 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Wed, 21 Jan 2026 20:30:05 +0100 Subject: [PATCH 01/10] Add option to blacklist mending for armor and elytra --- .../systems/modules/player/AutoMend.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index 569400a272..dba812cdb8 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -39,6 +39,13 @@ public class AutoMend extends Module { .build() ); + private final Setting blacklistArmorWearableItems = sgGeneral.add(new BoolSetting.Builder() + .name("blacklist-armor") + .description("Don't mend armor (and elytra).") + .defaultValue(true) + .build() + ); + private final Setting autoDisable = sgGeneral.add(new BoolSetting.Builder() .name("auto-disable") .description("Automatically disables when there are no more items to repair.") @@ -96,6 +103,18 @@ private int getSlot() { for (int i = 0; i < mc.player.getInventory().getMainStacks().size(); i++) { ItemStack itemStack = mc.player.getInventory().getStack(i); if (blacklist.get().contains(itemStack.getItem())) continue; + if (blacklistArmorWearableItems.get()) { + int[] armorSlots = {36, 37, 38, 39}; + boolean isArmor = false; + + for (int slot : armorSlots) { + if (itemStack.getItem() == mc.player.getInventory().getStack(slot).getItem()) { + isArmor = true; + break; + } + } + if (isArmor) continue; + } if (Utils.hasEnchantments(itemStack, Enchantments.MENDING) && itemStack.getDamage() > 0) { return i; From 0ce400913c6b78a29cded245092f8d0fe3b45d28 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Wed, 21 Jan 2026 20:34:05 +0100 Subject: [PATCH 02/10] Disable AutoMend if no mending items are found in inventory --- .../meteorclient/systems/modules/player/AutoMend.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index dba812cdb8..90414376d6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -62,6 +62,11 @@ public AutoMend() { @Override public void onActivate() { didMove = false; + + if (getSlot() == -1) { + info("No mending items to repair found in inventory, disabling"); + toggle(); + } } @EventHandler From 0794f2cad6c754e5c2c164c03d6710fa6d96b6c1 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Fri, 23 Jan 2026 21:02:15 +0100 Subject: [PATCH 03/10] Revert "Add option to blacklist mending for armor and elytra" This reverts commit e65e2ff6232117c296e5474e85c979ef77440be6. --- .../systems/modules/player/AutoMend.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index 90414376d6..d3b267ece4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -39,13 +39,6 @@ public class AutoMend extends Module { .build() ); - private final Setting blacklistArmorWearableItems = sgGeneral.add(new BoolSetting.Builder() - .name("blacklist-armor") - .description("Don't mend armor (and elytra).") - .defaultValue(true) - .build() - ); - private final Setting autoDisable = sgGeneral.add(new BoolSetting.Builder() .name("auto-disable") .description("Automatically disables when there are no more items to repair.") @@ -108,18 +101,6 @@ private int getSlot() { for (int i = 0; i < mc.player.getInventory().getMainStacks().size(); i++) { ItemStack itemStack = mc.player.getInventory().getStack(i); if (blacklist.get().contains(itemStack.getItem())) continue; - if (blacklistArmorWearableItems.get()) { - int[] armorSlots = {36, 37, 38, 39}; - boolean isArmor = false; - - for (int slot : armorSlots) { - if (itemStack.getItem() == mc.player.getInventory().getStack(slot).getItem()) { - isArmor = true; - break; - } - } - if (isArmor) continue; - } if (Utils.hasEnchantments(itemStack, Enchantments.MENDING) && itemStack.getDamage() > 0) { return i; From 6cf6f6dfecbec7942f71937f5bb4724355eb2f4c Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Fri, 23 Jan 2026 21:08:17 +0100 Subject: [PATCH 04/10] Disable only when the auto-disable option is enabled --- .../meteorclient/systems/modules/player/AutoMend.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index d3b267ece4..c7e8046aaa 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -56,7 +56,7 @@ public AutoMend() { public void onActivate() { didMove = false; - if (getSlot() == -1) { + if (autoDisable.get() && getSlot() == -1) { info("No mending items to repair found in inventory, disabling"); toggle(); } From 6dc9115b46cfc62bee6d6ad10e6402fe86e8f2a6 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Sat, 25 Apr 2026 14:23:09 +0200 Subject: [PATCH 05/10] Add BarrierTweaks --- .../meteorclient/systems/modules/Modules.java | 1 + .../systems/modules/render/BarrierTweaks.java | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index fbb4ed2319..e9e5c60bad 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -493,6 +493,7 @@ private void initMovement() { } private void initRender() { + add(new BarrierTweaks()); add(new BetterTab()); add(new BetterTooltips()); add(new BlockESP()); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java new file mode 100644 index 0000000000..f3950f46f8 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java @@ -0,0 +1,47 @@ +package meteordevelopment.meteorclient.systems.modules.render; + +import meteordevelopment.meteorclient.events.world.TickEvent; +import meteordevelopment.meteorclient.settings.*; +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.block.Blocks; +import net.minecraft.client.particle.Particle; +import net.minecraft.particle.BlockStateParticleEffect; +import net.minecraft.particle.ParticleTypes; + +public class BarrierTweaks extends Module { + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private final Setting range = sgGeneral.add(new IntSetting.Builder() + .name("range") + .description("The radius to search for barrier blocks. WARNING: High values may lag") + .defaultValue(32) + .min(1) + .sliderMax(64) + .build() + ); + + public BarrierTweaks() { + super(Categories.Render, "barrier-tweaks", "Displays barriers without distance-based flickering."); + } + + @EventHandler + private void onTick(TickEvent.Pre event) { + if (mc.player == null || mc.world == null) return; + + BlockIterator.register(range.get(), range.get(), (pos, blockState) -> { + if (blockState.isOf(Blocks.BARRIER)) { + // To remove flickering, we spawn the particle every tick. + Particle particle = mc.particleManager.addParticle( + new BlockStateParticleEffect(ParticleTypes.BLOCK_MARKER, Blocks.BARRIER.getDefaultState()), + pos.getX() + 0.5, + pos.getY() + 0.5, + pos.getZ() + 0.5, + 0.0, 0.0, 0.0 + ); + } + }); + } +} From 78d24579bdc1c218fde2e1d2e2b13c056ee0ab39 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Sat, 25 Apr 2026 14:24:36 +0200 Subject: [PATCH 06/10] Revert "Disable only when the auto-disable option is enabled" This reverts commit 6cf6f6dfecbec7942f71937f5bb4724355eb2f4c. --- .../meteorclient/systems/modules/player/AutoMend.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index c7e8046aaa..d3b267ece4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -56,7 +56,7 @@ public AutoMend() { public void onActivate() { didMove = false; - if (autoDisable.get() && getSlot() == -1) { + if (getSlot() == -1) { info("No mending items to repair found in inventory, disabling"); toggle(); } From d6266bc883fff1f168f56fa5cbe5d74c8e9bccfe Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Sat, 25 Apr 2026 14:26:50 +0200 Subject: [PATCH 07/10] Revert "Disable AutoMend if no mending items are found in inventory" This reverts commit 0ce400913c6b78a29cded245092f8d0fe3b45d28. --- .../meteorclient/systems/modules/player/AutoMend.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index d3b267ece4..569400a272 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -55,11 +55,6 @@ public AutoMend() { @Override public void onActivate() { didMove = false; - - if (getSlot() == -1) { - info("No mending items to repair found in inventory, disabling"); - toggle(); - } } @EventHandler From 4b5668a307ad334e171959bf7c562c780145334f Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Sun, 26 Apr 2026 11:36:52 +0200 Subject: [PATCH 08/10] Add mode to BarrierTweaks --- .../systems/modules/render/BarrierTweaks.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java index f3950f46f8..9485c5d1b8 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java @@ -22,6 +22,12 @@ public class BarrierTweaks extends Module { .sliderMax(64) .build() ); + private final Setting mode = sgGeneral.add(new EnumSetting.Builder() + .name("mode") + .description("The mode to use for displaying barriers.") + .defaultValue(ListMode.Always) + .build() + ); public BarrierTweaks() { super(Categories.Render, "barrier-tweaks", "Displays barriers without distance-based flickering."); @@ -30,6 +36,7 @@ public BarrierTweaks() { @EventHandler private void onTick(TickEvent.Pre event) { if (mc.player == null || mc.world == null) return; + if (mode.get() == ListMode.WhenHoldingBarrier && !mc.player.getMainHandStack().isOf(Blocks.BARRIER.asItem())) return; BlockIterator.register(range.get(), range.get(), (pos, blockState) -> { if (blockState.isOf(Blocks.BARRIER)) { @@ -44,4 +51,9 @@ private void onTick(TickEvent.Pre event) { } }); } + + public enum ListMode { + Always, + WhenHoldingBarrier + } } From c4f78ccea278814d7d86dae72aa7a8d512a97447 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Sun, 26 Apr 2026 12:19:59 +0200 Subject: [PATCH 09/10] add a max age option to barrier tweaks --- .../mixin/BlockMarkerParticleMixin.java | 29 +++++++++++++++++++ .../systems/modules/render/BarrierTweaks.java | 8 +++++ src/main/resources/meteor-client.mixins.json | 1 + 3 files changed, 38 insertions(+) create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/BlockMarkerParticleMixin.java diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockMarkerParticleMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockMarkerParticleMixin.java new file mode 100644 index 0000000000..32f705deb2 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockMarkerParticleMixin.java @@ -0,0 +1,29 @@ +package meteordevelopment.meteorclient.mixin; + +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.render.BarrierTweaks; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.client.particle.BlockMarkerParticle; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.world.ClientWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(BlockMarkerParticle.class) +public abstract class BlockMarkerParticleMixin extends Particle { + protected BlockMarkerParticleMixin(ClientWorld world, double x, double y, double z) { + super(world, x, y, z); + } + + @Inject(method = "", at = @At("RETURN")) + private void onInit(ClientWorld world, double x, double y, double z, BlockState state, CallbackInfo ci) { + BarrierTweaks module = Modules.get().get(BarrierTweaks.class); + + if (module != null && module.isActive() && state.isOf(Blocks.BARRIER)) { + this.maxAge = module.maxAge.get(); + } + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java index 9485c5d1b8..ebcd886ae2 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java @@ -28,6 +28,14 @@ public class BarrierTweaks extends Module { .defaultValue(ListMode.Always) .build() ); + public final Setting maxAge = sgGeneral.add(new IntSetting.Builder() + .name("max-age") + .description("Changes the delay in ticks of the particle being deleted after breaking the block.") + .defaultValue(20) + .min(0) + .sliderMax(100) + .build() + ); public BarrierTweaks() { super(Categories.Render, "barrier-tweaks", "Displays barriers without distance-based flickering."); diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 660f9529d5..11ea5c30f0 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -27,6 +27,7 @@ "BlockEntityRenderManagerMixin", "BlockHitResultAccessor", "BlockItemMixin", + "BlockMarkerParticleMixin", "BlockMixin", "BlockModelRendererMixin", "BlockRenderLayersMixin", From d6431fd5e805a58debf3543a491794083217ee87 Mon Sep 17 00:00:00 2001 From: zyrafaq Date: Sun, 26 Apr 2026 12:31:46 +0200 Subject: [PATCH 10/10] change barrier tweaks description --- .../meteorclient/systems/modules/render/BarrierTweaks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java index ebcd886ae2..a923a389f3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BarrierTweaks.java @@ -38,7 +38,7 @@ public class BarrierTweaks extends Module { ); public BarrierTweaks() { - super(Categories.Render, "barrier-tweaks", "Displays barriers without distance-based flickering."); + super(Categories.Render, "barrier-tweaks", "Changes how barrier blocks are displayed."); } @EventHandler