diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/hud/MixinInGameHud.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/hud/MixinInGameHud.java index 49ce6ddde..93a971209 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/hud/MixinInGameHud.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/hud/MixinInGameHud.java @@ -20,12 +20,17 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.screen.hud; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; import de.florianmichael.viafabricplus.settings.impl.VisualSettings; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.option.Perspective; +import net.minecraft.client.render.RenderLayer; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -37,12 +42,26 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; +import java.util.function.Function; + @Mixin(InGameHud.class) public abstract class MixinInGameHud { @Unique private static final int viaFabricPlus$ARMOR_ICON_WIDTH = 8; + @Inject(method = "playBurstSound", at = @At("HEAD"), cancellable = true) + private void disableBubblePopSound(int bubble, PlayerEntity player, int burstBubbles, CallbackInfo ci) { + if (VisualSettings.global().removeBubblePopSound.getValue()) { + ci.cancel(); + } + } + + @WrapWithCondition(method = "renderAirBubbles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Ljava/util/function/Function;Lnet/minecraft/util/Identifier;IIII)V", ordinal = 2)) + private boolean disableEmptyBubbles(DrawContext instance, Function renderLayers, Identifier sprite, int x, int y, int width, int height) { + return !VisualSettings.global().hideEmptyBubbleIcons.getValue(); + } + @Redirect(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/Perspective;isFirstPerson()Z")) private boolean alwaysRenderCrosshair(Perspective instance) { if (VisualSettings.global().alwaysRenderCrosshair.isEnabled()) { diff --git a/src/main/java/de/florianmichael/viafabricplus/settings/impl/VisualSettings.java b/src/main/java/de/florianmichael/viafabricplus/settings/impl/VisualSettings.java index 849708e4d..5230a2ab3 100644 --- a/src/main/java/de/florianmichael/viafabricplus/settings/impl/VisualSettings.java +++ b/src/main/java/de/florianmichael/viafabricplus/settings/impl/VisualSettings.java @@ -40,7 +40,6 @@ public class VisualSettings extends SettingGroup { Text.translatable("base.viafabricplus.off") ); public final BooleanSetting filterNonExistingGlyphs = new BooleanSetting(this, Text.translatable("visual_settings.viafabricplus.filter_non_existing_glyphs"), true) { - @Override public void onValueChanged() { final MinecraftClient client = MinecraftClient.getInstance(); @@ -54,6 +53,10 @@ public void onValueChanged() { }; public final BooleanSetting hideModernJigsawScreenFeatures = new BooleanSetting(this, Text.translatable("visual_settings.viafabricplus.hide_modern_jigsaw_screen_features"), true); + public final BooleanSetting removeBubblePopSound = new BooleanSetting(this, Text.translatable("visual_settings.viafabricplus.remove_bubble_pop_sound"), false); + + public final BooleanSetting hideEmptyBubbleIcons = new BooleanSetting(this, Text.translatable("visual_settings.viafabricplus.hide_empty_bubble_icons"), false); + // 1.21 -> 1.20.5 public final VersionedBooleanSetting hideDownloadTerrainScreenTransitionEffects = new VersionedBooleanSetting(this, Text.translatable("visual_settings.viafabricplus.hide_download_terrain_screen_transition_effects"), VersionRange.andOlder(ProtocolVersion.v1_20_5)); diff --git a/src/main/resources/assets/viafabricplus/lang/en_us.json b/src/main/resources/assets/viafabricplus/lang/en_us.json index 6baea6198..a501739e1 100644 --- a/src/main/resources/assets/viafabricplus/lang/en_us.json +++ b/src/main/resources/assets/viafabricplus/lang/en_us.json @@ -86,6 +86,8 @@ "visual_settings.viafabricplus.change_game_menu_screen_layout": "Change game menu screen layout", "visual_settings.viafabricplus.disable_secure_chat_warning": "Disable Secure Chat warning", "visual_settings.viafabricplus.hide_signature_indicator": "Hide signature indicator", + "visual_settings.viafabricplus.remove_bubble_pop_sound": "Remove bubble pop sound", + "visual_settings.viafabricplus.hide_empty_bubble_icons": "Hide empty bubble icons", "visual_settings.viafabricplus.hide_download_terrain_screen_transition_effects": "Hide download terrain screen transition effects", "visual_settings.viafabricplus.replace_petrified_oak_slab": "Replace petrified oak slab texture with the 'unknown' texture", "visual_settings.viafabricplus.always_render_crosshair": "Always render crosshair",