From b26ca7281ccad794dc1728cae9fedb47162f827c Mon Sep 17 00:00:00 2001 From: Semmieboy YT Date: Wed, 24 Apr 2024 11:17:49 +0200 Subject: [PATCH] Simplify and improve omnidirectional note block sounds --- .../OmnidirectionalSoundInstance.java | 39 ------------------- .../disc_jockey/mixin/ClientWorldMixin.java | 5 ++- .../disc_jockey/mixin/SoundSystemMixin.java | 32 --------------- src/main/resources/disc_jockey.mixins.json | 3 +- 4 files changed, 4 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/semmiedev/disc_jockey/OmnidirectionalSoundInstance.java delete mode 100644 src/main/java/semmiedev/disc_jockey/mixin/SoundSystemMixin.java diff --git a/src/main/java/semmiedev/disc_jockey/OmnidirectionalSoundInstance.java b/src/main/java/semmiedev/disc_jockey/OmnidirectionalSoundInstance.java deleted file mode 100644 index 7df6e7d..0000000 --- a/src/main/java/semmiedev/disc_jockey/OmnidirectionalSoundInstance.java +++ /dev/null @@ -1,39 +0,0 @@ -package semmiedev.disc_jockey; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.Camera; -import net.minecraft.client.sound.AbstractSoundInstance; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.random.Random; - -public class OmnidirectionalSoundInstance extends AbstractSoundInstance { - private final Camera camera = MinecraftClient.getInstance().gameRenderer.getCamera(); - - public OmnidirectionalSoundInstance(SoundEvent sound, SoundCategory category, float volume, float pitch, Random random) { - super(sound, category, random); - this.volume = volume; - this.pitch = pitch; - this.attenuationType = AttenuationType.NONE; - } - - @Override - public double getX() { - return getPos().x; - } - - @Override - public double getY() { - return getPos().y; - } - - @Override - public double getZ() { - return getPos().z; - } - - private Vec3d getPos() { - return camera.getPos(); - } -} diff --git a/src/main/java/semmiedev/disc_jockey/mixin/ClientWorldMixin.java b/src/main/java/semmiedev/disc_jockey/mixin/ClientWorldMixin.java index a8d8adc..05bbb19 100644 --- a/src/main/java/semmiedev/disc_jockey/mixin/ClientWorldMixin.java +++ b/src/main/java/semmiedev/disc_jockey/mixin/ClientWorldMixin.java @@ -1,6 +1,8 @@ package semmiedev.disc_jockey.mixin; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.sound.PositionedSoundInstance; +import net.minecraft.client.sound.SoundInstance; import net.minecraft.client.world.ClientWorld; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; @@ -12,7 +14,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import semmiedev.disc_jockey.Main; -import semmiedev.disc_jockey.OmnidirectionalSoundInstance; @Mixin(ClientWorld.class) public class ClientWorldMixin { @@ -22,7 +23,7 @@ public class ClientWorldMixin { private void makeNoteBlockSoundsOmnidirectional(double x, double y, double z, SoundEvent event, SoundCategory category, float volume, float pitch, boolean useDistance, long seed, CallbackInfo ci) { if (((Main.config.omnidirectionalNoteBlockSounds && Main.SONG_PLAYER.running) || Main.PREVIEWER.running) && event.getId().getPath().startsWith("block.note_block")) { ci.cancel(); - client.getSoundManager().play(new OmnidirectionalSoundInstance(event, category, volume, pitch, Random.create(seed))); + client.getSoundManager().play(new PositionedSoundInstance(event.getId(), category, volume, pitch, Random.create(seed), false, 0, SoundInstance.AttenuationType.NONE, 0, 0, 0, true)); } } } diff --git a/src/main/java/semmiedev/disc_jockey/mixin/SoundSystemMixin.java b/src/main/java/semmiedev/disc_jockey/mixin/SoundSystemMixin.java deleted file mode 100644 index 0e70d64..0000000 --- a/src/main/java/semmiedev/disc_jockey/mixin/SoundSystemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package semmiedev.disc_jockey.mixin; - -import net.minecraft.client.render.Camera; -import net.minecraft.client.sound.Channel; -import net.minecraft.client.sound.SoundInstance; -import net.minecraft.client.sound.SoundSystem; -import net.minecraft.util.math.Vec3d; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import semmiedev.disc_jockey.OmnidirectionalSoundInstance; - -import java.util.Map; - -@Mixin(SoundSystem.class) -public class SoundSystemMixin { - @Shadow @Final private Map sources; - - @Inject(method = "updateListenerPosition", at = @At("TAIL")) - private void updateOmnidirectionalSoundInstances(Camera camera, CallbackInfo ci) { - Vec3d pos = camera.getPos(); - - sources.forEach((soundInstance, sourceManager) -> { - if (!(soundInstance instanceof OmnidirectionalSoundInstance)) return; - - sourceManager.run(source -> source.setPosition(pos)); - }); - } -} diff --git a/src/main/resources/disc_jockey.mixins.json b/src/main/resources/disc_jockey.mixins.json index 21654ea..bc1a23f 100644 --- a/src/main/resources/disc_jockey.mixins.json +++ b/src/main/resources/disc_jockey.mixins.json @@ -4,8 +4,7 @@ "package": "semmiedev.disc_jockey.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "ClientWorldMixin", - "SoundSystemMixin" + "ClientWorldMixin" ], "injectors": { "defaultRequire": 1