Skip to content

Commit 1d3c865

Browse files
committed
Fix intentionally_empty & missing main menu music
1 parent c941446 commit 1d3c865

File tree

3 files changed

+29
-13
lines changed

3 files changed

+29
-13
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ modId=meret
1414
modName=Meret
1515
modDescription=Soundtrack areas for mapmakers. Powered by Area Lib.
1616
authors=hama, Tomate0613
17-
contributors=Sisby folk
17+
contributors=Sisby folk, Ampflower
1818
license=CC0-1.0
1919
# Mod Version
20-
baseVersion=0.2.0
20+
baseVersion=0.2.1
2121
# Branch Metadata
2222
branch=1.21.7
2323
tagBranch=1.21.7

src/main/java/symbolics/division/meret/client/MeretClient.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package symbolics.division.meret.client;
22

3-
import com.mojang.authlib.minecraft.client.MinecraftClient;
43
import dev.doublekekse.area_lib.Area;
54
import dev.doublekekse.area_lib.data.AreaClientData;
65
import dev.doublekekse.area_lib.data.AreaSavedData;
76
import net.fabricmc.api.ClientModInitializer;
87
import net.minecraft.client.Minecraft;
98
import net.minecraft.client.player.LocalPlayer;
10-
import net.minecraft.core.Holder;
119
import net.minecraft.sounds.Music;
12-
import net.minecraft.sounds.SoundEvents;
1310
import net.minecraft.sounds.SoundSource;
1411
import org.slf4j.Logger;
1512
import org.slf4j.LoggerFactory;
@@ -19,7 +16,6 @@
1916
import java.util.Optional;
2017

2118
public class MeretClient implements ClientModInitializer {
22-
public static final Music EMPTY = new Music(Holder.direct(SoundEvents.EMPTY), 10, 10, false);
2319
public static final Logger LOGGER = LoggerFactory.getLogger(Meret.ID);
2420

2521
@Override
Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,41 @@
11
package symbolics.division.meret.mixin.client;
22

3-
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
43
import net.minecraft.client.Minecraft;
4+
import net.minecraft.client.player.LocalPlayer;
5+
import net.minecraft.client.sounds.MusicInfo;
6+
import net.minecraft.sounds.Music;
57
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Shadow;
69
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
712
import symbolics.division.meret.Meret;
813
import symbolics.division.meret.client.MeretClient;
914

15+
import java.util.Optional;
16+
1017
@Mixin(Minecraft.class)
1118
public class MinecraftMixin {
12-
@ModifyExpressionValue(
19+
@Shadow
20+
private LocalPlayer player;
21+
22+
@Inject(
1323
method = "getSituationalMusic",
14-
at = @At(value = "INVOKE", target = "Lnet/minecraft/Optionull;map(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;")
24+
at = @At(
25+
value = "INVOKE",
26+
target = "Lnet/minecraft/client/player/LocalPlayer;level()Lnet/minecraft/world/level/Level;",
27+
shift = At.Shift.BEFORE),
28+
cancellable = true
1529
)
16-
public Object meretSituationalMusic(Object original) {
17-
if (original != null) return original; // Preserve screen music.
18-
Minecraft self = (Minecraft) (Object) this;
19-
return MeretClient.getOverride(self.player).orElse(Meret.CONFIG.overrideAll ? MeretClient.EMPTY : null);
30+
private void meretSituationalMusic(CallbackInfoReturnable<MusicInfo> cir) {
31+
final Optional<Music> music = MeretClient.getOverride(this.player);
32+
33+
// overrideAll prevents the regular level music from playing.
34+
if (music.isPresent() || Meret.CONFIG.overrideAll) {
35+
// A null music instance is safe.
36+
// The 1.21.6+ MusicManager shorts circuits null as a no-op, max time 100 frames,
37+
// and the same check has been mimicked in Music Moods.
38+
cir.setReturnValue(new MusicInfo(music.orElse(null)));
39+
}
2040
}
2141
}

0 commit comments

Comments
 (0)