From 3d0f100fec48723d291e0a75c5503c2a797f7481 Mon Sep 17 00:00:00 2001 From: MachieCodes Date: Sat, 16 May 2026 01:31:02 -0500 Subject: [PATCH 1/2] Allow all particles in ParticleListSettings --- .../ParticleTypeListSettingScreen.java | 4 ++-- .../meteorclient/mixin/ClientLevelMixin.java | 19 +++++++++++-------- .../settings/ParticleTypeListSetting.java | 2 +- .../systems/modules/render/NoRender.java | 11 ++--------- .../meteorclient/utils/misc/Names.java | 2 -- 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java index 4a03071497..4ed6e91509 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java @@ -10,8 +10,8 @@ import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.utils.misc.Names; -import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.registries.BuiltInRegistries; import java.util.List; @@ -23,7 +23,7 @@ public ParticleTypeListSettingScreen(GuiTheme theme, Setting value) { - return value instanceof ParticleOptions; + return value != ParticleTypes.FLASH; } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java index 30e72b2c2b..0ec0e73f74 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java @@ -13,6 +13,7 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -42,6 +43,16 @@ private void onRemoveEntity(int id, Entity.RemovalReason reason, CallbackInfo ci MeteorClient.EVENT_BUS.post(EntityRemovedEvent.get(getEntity(id))); } + @Inject(method = "addDestroyBlockEffect", at = @At("HEAD"), cancellable = true) + private void onAddDestroyBlockEffect(BlockPos pos, BlockState blockState, CallbackInfo ci) { + if (Modules.get().get(NoRender.class).noParticle(ParticleTypes.BLOCK)) ci.cancel(); + } + + @Inject(method = "addBreakingBlockEffect", at = @At("HEAD"), cancellable = true) + private void onAddBlockBreakingParticles(BlockPos pos, Direction direction, CallbackInfo ci) { + if (Modules.get().get(NoRender.class).noParticle(ParticleTypes.BLOCK)) ci.cancel(); + } + @ModifyArgs(method = "animateTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;doAnimateTick(IIIILnet/minecraft/util/RandomSource;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/core/BlockPos$MutableBlockPos;)V")) private void doRandomBlockDisplayTicks(Args args) { if (Modules.get().get(NoRender.class).noBarrierInvis()) { @@ -49,13 +60,5 @@ private void doRandomBlockDisplayTicks(Args args) { } } - @Inject(method = "addDestroyBlockEffect", at = @At("HEAD"), cancellable = true) - private void onAddDestroyBlockEffect(BlockPos pos, BlockState blockState, CallbackInfo ci) { - if (Modules.get().get(NoRender.class).noBlockBreakParticles()) ci.cancel(); - } - @Inject(method = "addBreakingBlockEffect", at = @At("HEAD"), cancellable = true) - private void onAddBlockBreakingParticles(BlockPos pos, Direction direction, CallbackInfo ci) { - if (Modules.get().get(NoRender.class).noBlockBreakParticles()) ci.cancel(); - } } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java index 329ccde8f2..0781ed4da8 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java @@ -37,7 +37,7 @@ protected List> parseImpl(String str) { try { for (String value : values) { ParticleType particleType = parseId(BuiltInRegistries.PARTICLE_TYPE, value); - if (particleType instanceof ParticleOptions) particleTypes.add(particleType); + if (particleType != null) particleTypes.add(particleType); } } catch (Exception _) { } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java index d25a7b6e1f..3572e7bca6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java @@ -231,13 +231,6 @@ public class NoRender extends Module { .build() ); - private final Setting noBlockBreakParticles = sgWorld.add(new BoolSetting.Builder() - .name("block-break-particles") - .description("Disables rendering of block-break particles.") - .defaultValue(false) - .build() - ); - private final Setting noBlockBreakOverlay = sgWorld.add(new BoolSetting.Builder() .name("block-break-overlay") .description("Disables rendering of block-break overlay.") @@ -512,8 +505,8 @@ public boolean noSignText() { return isActive() && noSignText.get(); } - public boolean noBlockBreakParticles() { - return isActive() && noBlockBreakParticles.get(); + public boolean noParticle(ParticleType type) { + return isActive() && particles.get().contains(type); } public boolean noBlockBreakOverlay() { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Names.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Names.java index 911adb4853..ad9897e357 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Names.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Names.java @@ -15,7 +15,6 @@ import net.minecraft.client.resources.language.I18n; import net.minecraft.client.sounds.WeighedSoundEvents; import net.minecraft.core.Holder; -import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; @@ -107,7 +106,6 @@ public static String get(EntityType entityType) { } public static String get(ParticleType type) { - if (!(type instanceof ParticleOptions)) return ""; return particleTypesNames.computeIfAbsent(type, _ -> StringUtils.capitalize(BuiltInRegistries.PARTICLE_TYPE.getKey(type).getPath().replace("_", " "))); } From f344e82f6344ae6c871dad3f7752268109e48921 Mon Sep 17 00:00:00 2001 From: MachieCodes Date: Sat, 16 May 2026 09:36:25 -0500 Subject: [PATCH 2/2] Allow block Flash Unclear why this was special cased? --- .../settings/ParticleTypeListSettingScreen.java | 6 ------ .../meteorclient/mixin/ParticleEngineMixin.java | 13 +------------ 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java index 4ed6e91509..82b0318bfb 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ParticleTypeListSettingScreen.java @@ -11,7 +11,6 @@ import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.utils.misc.Names; import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.registries.BuiltInRegistries; import java.util.List; @@ -21,11 +20,6 @@ public ParticleTypeListSettingScreen(GuiTheme theme, Setting value) { - return value != ParticleTypes.FLASH; - } - @Override protected WWidget getValueWidget(ParticleType value) { return theme.label(Names.get(value)); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ParticleEngineMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ParticleEngineMixin.java index 868fd9af3c..321deabde9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ParticleEngineMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ParticleEngineMixin.java @@ -10,28 +10,17 @@ import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleEngine; import net.minecraft.core.particles.ParticleOptions; -import net.minecraft.core.particles.ParticleTypes; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ParticleEngine.class) public abstract class ParticleEngineMixin { - @Shadow - @Nullable - protected abstract Particle makeParticle(T options, double x, double y, double z, double xa, double ya, double za); - @Inject(method = "createParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)Lnet/minecraft/client/particle/Particle;", at = @At("HEAD"), cancellable = true) private void onCreateParticle(ParticleOptions options, double x, double y, double z, double xa, double ya, double za, CallbackInfoReturnable cir) { ParticleEvent event = MeteorClient.EVENT_BUS.post(ParticleEvent.get(options)); - if (event.isCancelled()) { - if (options.getType() == ParticleTypes.FLASH) - cir.setReturnValue(makeParticle(options, x, y, z, xa, ya, za)); - else cir.cancel(); - } + if (event.isCancelled()) cir.cancel(); } }