From d79b682e828a73e539b5f59aa0fadc56ea08b0e7 Mon Sep 17 00:00:00 2001 From: RettichLP Date: Fri, 7 Aug 2026 22:26:09 +0200 Subject: [PATCH 1/2] Add option to block "Malle, I love you" sound --- .../options/MiscellaneousOptions.java | 1 + .../options/MiscellaneousOptionsScreen.java | 3 ++ .../ucutils/mixin/SoundManagerMixin.java | 29 +++++++++++++++++++ .../resources/assets/ucutils/lang/de_de.json | 2 ++ .../resources/assets/ucutils/lang/en_gb.json | 2 ++ .../resources/assets/ucutils/lang/en_us.json | 2 ++ src/main/resources/ucutils.mixins.json | 3 +- 7 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/rettichlp/ucutils/mixin/SoundManagerMixin.java diff --git a/src/main/java/de/rettichlp/ucutils/common/configuration/options/MiscellaneousOptions.java b/src/main/java/de/rettichlp/ucutils/common/configuration/options/MiscellaneousOptions.java index 18cb34db..f6fc108c 100644 --- a/src/main/java/de/rettichlp/ucutils/common/configuration/options/MiscellaneousOptions.java +++ b/src/main/java/de/rettichlp/ucutils/common/configuration/options/MiscellaneousOptions.java @@ -24,6 +24,7 @@ public class MiscellaneousOptions { private boolean autoCollectChestsFromTrashCans = false; private boolean highlightCorpses = false; // feature rejected by UnicaCity team private boolean hideDolphins = false; + private boolean blockMalleSound = false; @Getter @AllArgsConstructor diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MiscellaneousOptionsScreen.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MiscellaneousOptionsScreen.java index 40abdd6e..3c95135a 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MiscellaneousOptionsScreen.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MiscellaneousOptionsScreen.java @@ -27,6 +27,8 @@ public class MiscellaneousOptionsScreen extends OptionsScreen { private static final Component HIGHLIGHT_CORPSES_TOOLTIP = translatable("ucutils.options.highlight_corpses.tooltip").append(NEW_LINE).append(translatable("ucutils.feature_disabled").withColor(RED)); private static final Component HIDE_DOLPHINS_NAME = translatable("ucutils.options.hide_dolphins.name"); private static final Component HIDE_DOLPHINS_TOOLTIP = translatable("ucutils.options.hide_dolphins.tooltip"); + private static final Component BLOCK_MALLE_SOUND_NAME = translatable("ucutils.options.block_malle_sound.name"); + private static final Component BLOCK_MALLE_SOUND_TOOLTIP = translatable("ucutils.options.block_malle_sound.tooltip"); public MiscellaneousOptionsScreen(Screen parent) { super(parent, TEXT_MISCELLANEOUS); @@ -47,6 +49,7 @@ public void initBody() { LinearLayout directionalLayoutWidget3 = directionalLayoutWidget.addChild(horizontal().spacing(8)); renderService.addToggleButton(directionalLayoutWidget3, HIDE_DOLPHINS_NAME, HIDE_DOLPHINS_TOOLTIP, (options, value) -> options.miscellaneous().hideDolphins(value), options -> options.miscellaneous().hideDolphins(), 150); + renderService.addToggleButton(directionalLayoutWidget3, BLOCK_MALLE_SOUND_NAME, BLOCK_MALLE_SOUND_TOOLTIP, (options, value) -> options.miscellaneous().blockMalleSound(value), options -> options.miscellaneous().blockMalleSound(), 150); directionalLayoutWidget.visitWidgets(this::addRenderableWidget); } diff --git a/src/main/java/de/rettichlp/ucutils/mixin/SoundManagerMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/SoundManagerMixin.java new file mode 100644 index 00000000..d3eb5ae6 --- /dev/null +++ b/src/main/java/de/rettichlp/ucutils/mixin/SoundManagerMixin.java @@ -0,0 +1,29 @@ +package de.rettichlp.ucutils.mixin; + +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.client.sounds.SoundEngine; +import net.minecraft.client.sounds.SoundManager; +import net.minecraft.resources.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import static de.rettichlp.ucutils.UCUtils.configuration; +import static net.minecraft.client.sounds.SoundEngine.PlayResult.NOT_STARTED; +import static net.minecraft.resources.Identifier.fromNamespaceAndPath; + +@Mixin(SoundManager.class) +public abstract class SoundManagerMixin { + + @Unique + private static final Identifier MALLE_SOUND_IDENTIFIER = fromNamespaceAndPath("ucmusic", "music.malle_i_love_you"); + + @Inject(method = "play", at = @At("HEAD"), cancellable = true) + private void ucutils$playHead(SoundInstance instance, CallbackInfoReturnable cir) { + if (configuration.getOptions().miscellaneous().blockMalleSound() && MALLE_SOUND_IDENTIFIER.equals(instance.getIdentifier())) { + cir.setReturnValue(NOT_STARTED); + } + } +} diff --git a/src/main/resources/assets/ucutils/lang/de_de.json b/src/main/resources/assets/ucutils/lang/de_de.json index 47c3fd93..d334ffe4c 100644 --- a/src/main/resources/assets/ucutils/lang/de_de.json +++ b/src/main/resources/assets/ucutils/lang/de_de.json @@ -96,6 +96,8 @@ "ucutils.options.highlight_corpses.tooltip": "Lässt Leichen in der Farbe ihrer Fraktion leuchten", "ucutils.options.hide_dolphins.name": "Verstecke Delfine", "ucutils.options.hide_dolphins.tooltip": "Verhindert das Spawnen von Delfinen während des öffnens einer Schatzkiste", + "ucutils.options.block_malle_sound.name": "Malle-Sound blockieren", + "ucutils.options.block_malle_sound.tooltip": "Verhindert das Abspielen des \"Malle, I love you\"-Sounds", "ucutils.options.check_unicacity_server.name": "UnicaCity Check", "ucutils.options.check_unicacity_server.tooltip": "Überprüft ob du auf UnicaCity spielst. Wenn aktiviert sind bestimmte Funktionen nur auf UnicaCity aktiviert um Probleme mit anderen Servern zu vermeiden.", "ucutils.options.faction_chat_color.name": "Farbe des Fraktionschats", diff --git a/src/main/resources/assets/ucutils/lang/en_gb.json b/src/main/resources/assets/ucutils/lang/en_gb.json index 7c5592e3..21b5aea8 100644 --- a/src/main/resources/assets/ucutils/lang/en_gb.json +++ b/src/main/resources/assets/ucutils/lang/en_gb.json @@ -96,6 +96,8 @@ "ucutils.options.highlight_corpses.tooltip": "Makes corpses glow in their faction's colour", "ucutils.options.hide_dolphins.name": "Hide dolphins", "ucutils.options.hide_dolphins.tooltip": "Prevents dolphins from spawning while opening a treasure chest", + "ucutils.options.block_malle_sound.name": "Block Malle sound", + "ucutils.options.block_malle_sound.tooltip": "Prevents the \"Malle, I love you\" sound from playing", "ucutils.options.check_unicacity_server.name": "Check for UnicaCity", "ucutils.options.check_unicacity_server.tooltip": "Checks if you are playing on the UnicaCity server. If enabled, certain features will only be available on the UnicaCity server to prevent issues on other servers.", "ucutils.options.faction_chat_color.name": "Faction chat color", diff --git a/src/main/resources/assets/ucutils/lang/en_us.json b/src/main/resources/assets/ucutils/lang/en_us.json index 6e7910ea..0ac5eaa8 100644 --- a/src/main/resources/assets/ucutils/lang/en_us.json +++ b/src/main/resources/assets/ucutils/lang/en_us.json @@ -96,6 +96,8 @@ "ucutils.options.highlight_corpses.tooltip": "Makes corpses glow in their faction's color", "ucutils.options.hide_dolphins.name": "Hide dolphins", "ucutils.options.hide_dolphins.tooltip": "Prevents dolphins from spawning while opening a treasure chest", + "ucutils.options.block_malle_sound.name": "Block Malle sound", + "ucutils.options.block_malle_sound.tooltip": "Prevents the \"Malle, I love you\" sound from playing", "ucutils.options.check_unicacity_server.name": "Check for UnicaCity", "ucutils.options.check_unicacity_server.tooltip": "Checks if you are playing on the UnicaCity server. If enabled, certain features will only be available on the UnicaCity server to prevent issues on other servers.", "ucutils.options.faction_chat_color.name": "Faction chat color", diff --git a/src/main/resources/ucutils.mixins.json b/src/main/resources/ucutils.mixins.json index 4b77fd12..9a921fa6 100644 --- a/src/main/resources/ucutils.mixins.json +++ b/src/main/resources/ucutils.mixins.json @@ -27,6 +27,7 @@ "KeyboardHandlerMixin", "LocalPlayerMixin", "PauseScreenMixin", - "PlayerTabOverlayMixin" + "PlayerTabOverlayMixin", + "SoundManagerMixin" ] } From cdaacf7cc5298736d73acdb1207156b049eac60c Mon Sep 17 00:00:00 2001 From: RettichLP Date: Fri, 7 Aug 2026 22:48:45 +0200 Subject: [PATCH 2/2] Update README to include optional "Malle, I love you" sound toggle --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 52d9ce80..e78a0801 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ und [The Rettington Companion](https://modrinth.com/mod/the-rettington-companion - Die Nachricht, dass man keine Bandage vergeben kann, wird nur noch in der ActionBar angezeigt, da der Chat durch diese Nachrichten zugespammt wird - Beim Öffnen von Schatzkisten können die Delfine deaktiviert werden +- Der "Malle, I love you" Sound kann nun optional deaktiviert werden ### Auto