66import com .llamalad7 .mixinextras .injector .wrapoperation .Operation ;
77import com .llamalad7 .mixinextras .injector .wrapoperation .WrapOperation ;
88import net .minecraft .client .MinecraftClient ;
9- import net .minecraft .client .sound .MusicInstance ;
109import net .minecraft .client .sound .MusicTracker ;
1110import net .minecraft .client .sound .SoundExecutor ;
1211import net .minecraft .client .sound .SoundManager ;
1716import org .spongepowered .asm .mixin .Shadow ;
1817import org .spongepowered .asm .mixin .Unique ;
1918import org .spongepowered .asm .mixin .injection .At ;
19+ import org .spongepowered .asm .mixin .injection .Coerce ;
2020import org .spongepowered .asm .mixin .injection .Inject ;
2121import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
2222
@@ -31,23 +31,19 @@ public class MixinMusicTracker {
3131 @ Unique
3232 private CompletableFuture <Void > rsls$playFuture ;
3333
34- @ Inject (method = "play " , at = @ At ( "HEAD" ), cancellable = true )
35- private void prePlay ( MusicInstance instance , CallbackInfo ci ) {
34+ @ WrapMethod (method = { "method_4858(Lnet/minecraft/class_10383;)V " , "play" } )
35+ private void wrapPlay ( @ Coerce Object instance , Operation < Void > original ) {
3636 CompletableFuture <Void > rsls$playFuture1 = this .rsls$playFuture ;
37- if (rsls$playFuture1 == null || rsls$playFuture1 .isDone ()) {
38- ci . cancel () ;
37+ if (rsls$playFuture1 != null && ! rsls$playFuture1 .isDone ()) {
38+ return ;
3939 }
40- }
41-
42- @ WrapMethod (method = "play" )
43- private void wrapPlay (MusicInstance instance , Operation <Void > original ) {
4440 SoundManager soundManager = this .client .getSoundManager ();
4541 SoundSystem soundSystem = ((ISoundManager ) soundManager ).getSoundSystem ();
4642 SoundExecutor taskQueue = ((ISoundSystem ) soundSystem ).getTaskQueue ();
4743 this .rsls$playFuture = CompletableFuture .runAsync (() -> original .call (instance ), taskQueue ).orTimeout (15 , TimeUnit .SECONDS );
4844 }
4945
50- @ WrapOperation (method = " play" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/toast/ToastManager;onMusicTrackStart()V" ))
46+ @ WrapOperation (method = { "method_4858(Lnet/minecraft/class_10383;)V" , " play"} , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/toast/ToastManager;onMusicTrackStart()V" ))
5147 private void wrapPlayListener (ToastManager instance , Operation <Void > original ) {
5248 this .client .execute (() -> original .call (instance ));
5349 }
0 commit comments