Skip to content

Commit 681cecf

Browse files
committed
refactor: Rename mixin-accessors to accessors
1 parent cf57bd7 commit 681cecf

18 files changed

+291
-279
lines changed

fabric/src/main/java/vakiliner/musicpack/fabric/gui/HidersMusicSlider.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
import java.util.Map;
66
import net.minecraft.client.Minecraft;
77
import net.minecraft.client.resources.sounds.SoundInstance;
8-
import net.minecraft.client.sounds.ChannelAccess.ChannelHandle;
8+
import net.minecraft.client.sounds.ChannelAccess;
99
import net.minecraft.network.chat.TranslatableComponent;
1010
import vakiliner.musicpack.fabric.MusicPack;
1111
import vakiliner.musicpack.fabric.MusicPackSound;
12-
import vakiliner.musicpack.fabric.mixin.SoundEngineMixin;
13-
import vakiliner.musicpack.fabric.mixin.SoundManagerMixin;
12+
import vakiliner.musicpack.fabric.mixin.SoundEngineAccessor;
13+
import vakiliner.musicpack.fabric.mixin.SoundManagerAccessor;
1414

1515
@Environment(EnvType.CLIENT)
1616
public class HidersMusicSlider extends Slider {
@@ -24,16 +24,16 @@ public static TranslatableComponent getComponent() {
2424

2525
protected void applyValue() {
2626
MusicPack.getConfig().hidersMusicVolume(this.value);
27-
SoundEngineMixin soundEngineMixin = (SoundEngineMixin) ((SoundManagerMixin) Minecraft.getInstance().getSoundManager()).getSoundEngine();
28-
Map<SoundInstance, ChannelHandle> instanceToChannel = soundEngineMixin.getInstanceToChannel();
29-
ChannelHandle channelHandle0 = instanceToChannel.get(MusicPackSound.hideLvl0);
30-
ChannelHandle channelHandle1 = instanceToChannel.get(MusicPackSound.hideLvl1);
31-
ChannelHandle channelHandle2 = instanceToChannel.get(MusicPackSound.hideLvl2);
32-
ChannelHandle channelHandleG = instanceToChannel.get(MusicPackSound.hideGlow);
33-
if (channelHandle0 != null) channelHandle0.execute((channel) -> channel.setVolume(soundEngineMixin.calculateVolume(MusicPackSound.hideLvl0)));
34-
if (channelHandle1 != null) channelHandle1.execute((channel) -> channel.setVolume(soundEngineMixin.calculateVolume(MusicPackSound.hideLvl1)));
35-
if (channelHandle2 != null) channelHandle2.execute((channel) -> channel.setVolume(soundEngineMixin.calculateVolume(MusicPackSound.hideLvl2)));
36-
if (channelHandleG != null) channelHandleG.execute((channel) -> channel.setVolume(soundEngineMixin.calculateVolume(MusicPackSound.hideGlow)));
27+
SoundEngineAccessor accessor = (SoundEngineAccessor) ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundEngine();
28+
Map<SoundInstance, ChannelAccess.ChannelHandle> instanceToChannel = accessor.getInstanceToChannel();
29+
ChannelAccess.ChannelHandle channelHandle0 = instanceToChannel.get(MusicPackSound.hideLvl0);
30+
ChannelAccess.ChannelHandle channelHandle1 = instanceToChannel.get(MusicPackSound.hideLvl1);
31+
ChannelAccess.ChannelHandle channelHandle2 = instanceToChannel.get(MusicPackSound.hideLvl2);
32+
ChannelAccess.ChannelHandle channelHandleG = instanceToChannel.get(MusicPackSound.hideGlow);
33+
if (channelHandle0 != null) channelHandle0.execute((channel) -> channel.setVolume(accessor.calculateVolume(MusicPackSound.hideLvl0)));
34+
if (channelHandle1 != null) channelHandle1.execute((channel) -> channel.setVolume(accessor.calculateVolume(MusicPackSound.hideLvl1)));
35+
if (channelHandle2 != null) channelHandle2.execute((channel) -> channel.setVolume(accessor.calculateVolume(MusicPackSound.hideLvl2)));
36+
if (channelHandleG != null) channelHandleG.execute((channel) -> channel.setVolume(accessor.calculateVolume(MusicPackSound.hideGlow)));
3737
}
3838

3939
protected void updateMessage() {

fabric/src/main/java/vakiliner/musicpack/fabric/gui/MainSettingsScreen.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
import vakiliner.musicpack.base.ModConfig;
1414
import vakiliner.musicpack.fabric.MusicPack;
1515
import vakiliner.musicpack.fabric.MusicPackSound;
16-
import vakiliner.musicpack.fabric.mixin.SoundEngineMixin;
17-
import vakiliner.musicpack.fabric.mixin.SoundManagerMixin;
16+
import vakiliner.musicpack.fabric.mixin.SoundEngineAccessor;
17+
import vakiliner.musicpack.fabric.mixin.SoundManagerAccessor;
1818

1919
@Environment(EnvType.CLIENT)
2020
public class MainSettingsScreen extends Screen {
@@ -81,7 +81,7 @@ public void onClose() {
8181
}
8282
this.minecraft.setScreen(this.parent);
8383
boolean enabled = config.enabled();
84-
((SoundEngineMixin) ((SoundManagerMixin) this.minecraft.getSoundManager()).getSoundEngine()).getInstanceToChannel().forEach((soundInstance, channelHandle) -> {
84+
((SoundEngineAccessor) ((SoundManagerAccessor) this.minecraft.getSoundManager()).getSoundEngine()).getInstanceToChannel().forEach((soundInstance, channelHandle) -> {
8585
if (soundInstance.getSource() == SoundSource.MUSIC) switch (soundInstance.getLocation().getNamespace()) {
8686
case MusicPack.MOD_ID:
8787
if (!enabled

fabric/src/main/java/vakiliner/musicpack/fabric/gui/SeekersMusicSlider.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import net.minecraft.network.chat.TranslatableComponent;
88
import vakiliner.musicpack.fabric.MusicPack;
99
import vakiliner.musicpack.fabric.MusicPackSound;
10-
import vakiliner.musicpack.fabric.mixin.SoundEngineMixin;
11-
import vakiliner.musicpack.fabric.mixin.SoundManagerMixin;
10+
import vakiliner.musicpack.fabric.mixin.SoundEngineAccessor;
11+
import vakiliner.musicpack.fabric.mixin.SoundManagerAccessor;
1212

1313
@Environment(EnvType.CLIENT)
1414
public class SeekersMusicSlider extends Slider {
@@ -22,9 +22,9 @@ public static TranslatableComponent getComponent() {
2222

2323
protected void applyValue() {
2424
MusicPack.getConfig().seekersMusicVolume(this.value);
25-
SoundEngineMixin soundEngineMixin = (SoundEngineMixin) ((SoundManagerMixin) Minecraft.getInstance().getSoundManager()).getSoundEngine();
26-
ChannelHandle channelHandle = soundEngineMixin.getInstanceToChannel().get(MusicPackSound.seek);
27-
if (channelHandle != null) channelHandle.execute((channel) -> channel.setVolume(soundEngineMixin.calculateVolume(MusicPackSound.seek)));
25+
SoundEngineAccessor accessor = (SoundEngineAccessor) ((SoundManagerAccessor) Minecraft.getInstance().getSoundManager()).getSoundEngine();
26+
ChannelHandle channelHandle = accessor.getInstanceToChannel().get(MusicPackSound.seek);
27+
if (channelHandle != null) channelHandle.execute((channel) -> channel.setVolume(accessor.calculateVolume(MusicPackSound.seek)));
2828
}
2929

3030
protected void updateMessage() {

fabric/src/main/java/vakiliner/musicpack/fabric/mixin/AbstractSoundInstanceMixin.java renamed to fabric/src/main/java/vakiliner/musicpack/fabric/mixin/AbstractSoundInstanceAccessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import net.minecraft.client.resources.sounds.AbstractSoundInstance;
66

77
@Mixin(AbstractSoundInstance.class)
8-
public interface AbstractSoundInstanceMixin {
8+
public interface AbstractSoundInstanceAccessor {
99
@Accessor("volume")
1010
float getVolume();
1111
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package vakiliner.musicpack.fabric.mixin;
2+
3+
import java.util.Map;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.gen.Accessor;
6+
import org.spongepowered.asm.mixin.gen.Invoker;
7+
import net.minecraft.client.resources.sounds.SoundInstance;
8+
import net.minecraft.client.sounds.ChannelAccess;
9+
import net.minecraft.client.sounds.SoundEngine;
10+
11+
@Mixin(SoundEngine.class)
12+
public interface SoundEngineAccessor {
13+
@Accessor("instanceToChannel")
14+
Map<SoundInstance, ChannelAccess.ChannelHandle> getInstanceToChannel();
15+
16+
@Invoker("calculateVolume")
17+
float calculateVolume(SoundInstance soundInstance);
18+
}
Lines changed: 103 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,111 @@
11
package vakiliner.musicpack.fabric.mixin;
22

3-
import java.util.Map;
4-
import org.spongepowered.asm.mixin.Mixin;
5-
import org.spongepowered.asm.mixin.gen.Accessor;
6-
import org.spongepowered.asm.mixin.gen.Invoker;
3+
import vakiliner.musicpack.base.ModConfig;
4+
import vakiliner.musicpack.fabric.MusicPack;
5+
import vakiliner.musicpack.fabric.MusicPackSound;
6+
import net.minecraft.client.Minecraft;
77
import net.minecraft.client.resources.sounds.SoundInstance;
8+
import net.minecraft.client.sounds.ChannelAccess;
89
import net.minecraft.client.sounds.SoundEngine;
9-
import net.minecraft.client.sounds.ChannelAccess.ChannelHandle;
10+
import net.minecraft.client.sounds.SoundManager;
11+
import net.minecraft.resources.ResourceLocation;
12+
import net.minecraft.sounds.SoundSource;
13+
import java.util.Map;
14+
import org.jetbrains.annotations.Nullable;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.Shadow;
17+
import org.spongepowered.asm.mixin.injection.At;
18+
import org.spongepowered.asm.mixin.injection.Inject;
19+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1020

1121
@Mixin(SoundEngine.class)
12-
public interface SoundEngineMixin {
13-
@Accessor("instanceToChannel")
14-
Map<SoundInstance, ChannelHandle> getInstanceToChannel();
22+
abstract class SoundEngineMixin {
23+
@Shadow
24+
public Map<SoundInstance, ChannelAccess.ChannelHandle> instanceToChannel;
25+
26+
@Shadow
27+
public abstract float calculateVolume(SoundInstance soundInstance);
28+
29+
@Inject(at = @At("HEAD"), method = "play", cancellable = true)
30+
void play(SoundInstance soundInstance, CallbackInfo callbackInfo) {
31+
ModConfig config = MusicPack.getConfig();
32+
if (config.enabled() && soundInstance.getSource() == SoundSource.MUSIC) {
33+
switch (soundInstance.getLocation().getNamespace()) {
34+
case "minecraft": {
35+
if (config.disableDefaultMusic()) callbackInfo.cancel();
36+
break;
37+
}
38+
case "music": {
39+
callbackInfo.cancel();
40+
String[] path = soundInstance.getLocation().getPath().split("\\.");
41+
SoundManager soundManager = Minecraft.getInstance().getSoundManager();
42+
if (path.length > 0) switch (path[0]) {
43+
case "seek":
44+
if (path.length == 1) {
45+
if (config.seekersMusicEnabled()) soundManager.play(MusicPackSound.seek);
46+
}
47+
break;
48+
case "hide":
49+
if (path.length > 2) {
50+
short tick = Short.parseShort(path[2]);
51+
MusicPackSound sound = MusicPackSound.getSound(path[1]);
52+
if (sound != null) {
53+
if (config.hidersMusicEnabled()) {
54+
if (tick == 1) {
55+
if (!soundManager.isActive(MusicPackSound.hideLvl0)) soundManager.play(MusicPackSound.hideLvl0.resetVolume());
56+
if (!soundManager.isActive(MusicPackSound.hideLvl1)) soundManager.play(MusicPackSound.hideLvl1.resetVolume());
57+
if (!soundManager.isActive(MusicPackSound.hideLvl2)) soundManager.play(MusicPackSound.hideLvl2.resetVolume());
58+
if (!soundManager.isActive(MusicPackSound.hideGlow)) soundManager.play(MusicPackSound.hideGlow.resetVolume());
59+
}
60+
ChannelAccess.ChannelHandle channelHandle = this.instanceToChannel.get(sound);
61+
if (channelHandle != null) channelHandle.execute((channel) -> channel.setVolume(this.calculateVolume(sound.setVolume(((AbstractSoundInstanceAccessor) soundInstance).getVolume()).tick(tick))));
62+
} else {
63+
if (soundManager.isActive(MusicPackSound.hideLvl0)) soundManager.stop(MusicPackSound.hideLvl0);
64+
if (soundManager.isActive(MusicPackSound.hideLvl1)) soundManager.stop(MusicPackSound.hideLvl1);
65+
if (soundManager.isActive(MusicPackSound.hideLvl2)) soundManager.stop(MusicPackSound.hideLvl2);
66+
if (soundManager.isActive(MusicPackSound.hideGlow)) soundManager.stop(MusicPackSound.hideGlow);
67+
}
68+
}
69+
}
70+
break;
71+
}
72+
break;
73+
}
74+
}
75+
}
76+
}
1577

16-
@Invoker("calculateVolume")
17-
float calculateVolume(SoundInstance soundInstance);
78+
@Inject(at = @At(value = "HEAD"), method = "stop(Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/sounds/SoundSource;)V", cancellable = true)
79+
void stop(@Nullable ResourceLocation resourceLocation, @Nullable SoundSource soundSource, CallbackInfo callbackInfo) {
80+
ModConfig config = MusicPack.getConfig();
81+
if (config.enabled() && resourceLocation != null && soundSource == SoundSource.MUSIC && resourceLocation.getNamespace().equals("music")) {
82+
callbackInfo.cancel();
83+
String[] path = resourceLocation.getPath().split("\\.");
84+
SoundManager soundManager = Minecraft.getInstance().getSoundManager();
85+
if (path.length > 0) switch (path[0]) {
86+
case "seek":
87+
if (path.length == 1) soundManager.stop(MusicPackSound.seek);
88+
break;
89+
case "hide":
90+
if (path.length > 2) {
91+
short tick = Short.parseShort(path[2]);
92+
MusicPackSound sound = MusicPackSound.getSound(path[1]);
93+
if (soundManager.isActive(sound)) {
94+
if (config.hidersMusicEnabled()) {
95+
ChannelAccess.ChannelHandle channelHandle = this.instanceToChannel.get(sound);
96+
if (channelHandle != null && sound.equalsTick(tick)) new Thread(() -> {
97+
try {
98+
Thread.sleep(5);
99+
} catch (InterruptedException err) {
100+
err.printStackTrace();
101+
}
102+
if (sound.equalsTick(tick)) channelHandle.execute((channel) -> channel.setVolume(this.calculateVolume(sound.resetVolume())));
103+
}).start();
104+
} else soundManager.stop(sound);
105+
}
106+
}
107+
break;
108+
}
109+
}
110+
}
18111
}

fabric/src/main/java/vakiliner/musicpack/fabric/mixin/SoundEngineMixin2.java

Lines changed: 0 additions & 103 deletions
This file was deleted.

fabric/src/main/java/vakiliner/musicpack/fabric/mixin/SoundManagerMixin.java renamed to fabric/src/main/java/vakiliner/musicpack/fabric/mixin/SoundManagerAccessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import net.minecraft.client.sounds.SoundManager;
77

88
@Mixin(SoundManager.class)
9-
public interface SoundManagerMixin {
9+
public interface SoundManagerAccessor {
1010
@Accessor("soundEngine")
1111
SoundEngine getSoundEngine();
1212
}

fabric/src/main/resources/mixins.musicpack.fabric.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
"package": "vakiliner.musicpack.fabric.mixin",
55
"compatibilityLevel": "JAVA_8",
66
"client": [
7-
"AbstractSoundInstanceMixin",
7+
"AbstractSoundInstanceAccessor",
8+
"SoundEngineAccessor",
89
"SoundEngineMixin",
9-
"SoundEngineMixin2",
10-
"SoundManagerMixin"
10+
"SoundManagerAccessor"
1111
],
1212
"injectors": {
1313
"defaultRequire": 1

0 commit comments

Comments
 (0)