From d4c998e311075414cee302b895e0e3b58d5dce2f Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 29 Jan 2024 12:16:46 -0800 Subject: [PATCH] Fix background music looping when it shouldn't --- .../minecraft/client/sounds/SoundEngine.java.patch | 8 ++++---- .../client/event/ForgeEventFactoryClient.java | 14 ++++++++++++++ .../minecraftforge/event/ForgeEventFactory.java | 1 - 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch b/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch index bd1ad62976..48b8ac6c23 100644 --- a/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch +++ b/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch @@ -30,22 +30,22 @@ p_194488_.setSelfPosition(vec3); p_194488_.setRelative(flag); }); -+ final SoundInstance soundinstance = p_120313_; ++ final SoundInstance soundinstance = p_120313_; if (!flag2) { this.soundBuffers.getCompleteBuffer(sound.getPath()).thenAccept((p_194501_) -> { channelaccess$channelhandle.execute((p_194495_) -> { p_194495_.attachStaticBuffer(p_194501_); p_194495_.play(); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.sound.PlaySoundSourceEvent(this, soundinstance, p_194495_)); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onPlaySoundSource(this, soundinstance, p_194495_); }); }); } else { - this.soundBuffers.getStream(sound.getPath(), flag1).thenAccept((p_194504_) -> { -+ soundinstance.getStream(this.soundBuffers, sound, flag2).thenAccept((p_194504_) -> { ++ soundinstance.getStream(this.soundBuffers, sound, flag1).thenAccept((p_194504_) -> { channelaccess$channelhandle.execute((p_194498_) -> { p_194498_.attachBufferStream(p_194504_); p_194498_.play(); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.sound.PlayStreamingSourceEvent(this, soundinstance, p_194498_)); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onPlayStreamingSource(this, soundinstance, p_194498_); }); }); } diff --git a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java index b186e01c18..2d90910bb7 100644 --- a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java +++ b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java @@ -9,13 +9,19 @@ import java.util.Map; import org.jetbrains.annotations.Nullable; +import com.mojang.blaze3d.audio.Channel; + import net.minecraft.client.MouseHandler; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider.Context; import net.minecraft.client.resources.PlayerSkin.Model; +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.client.sounds.SoundEngine; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.sound.PlaySoundSourceEvent; +import net.minecraftforge.client.event.sound.PlayStreamingSourceEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.ModLoader; @@ -91,4 +97,12 @@ public class ForgeEventFactoryClient { public static void onScreenClose(Screen screen) { post(new ScreenEvent.Closing(screen)); } + + public static void onPlaySoundSource(SoundEngine engine, SoundInstance sound, Channel channel) { + post(new PlaySoundSourceEvent(engine, sound, channel)); + } + + public static void onPlayStreamingSource(SoundEngine engine, SoundInstance sound, Channel channel) { + post(new PlayStreamingSourceEvent(engine, sound, channel)); + } } diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index e4c0beb09a..f75d06efc7 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -18,7 +18,6 @@ import com.mojang.brigadier.CommandDispatcher; import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.AdvancementProgress; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.commands.CommandBuildContext; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess;