Simplify and improve omnidirectional note block sounds
This commit is contained in:
parent
0141bdb7cd
commit
b26ca7281c
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,8 @@
|
|||||||
package semmiedev.disc_jockey.mixin;
|
package semmiedev.disc_jockey.mixin;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
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.client.world.ClientWorld;
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.sound.SoundEvent;
|
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.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import semmiedev.disc_jockey.Main;
|
import semmiedev.disc_jockey.Main;
|
||||||
import semmiedev.disc_jockey.OmnidirectionalSoundInstance;
|
|
||||||
|
|
||||||
@Mixin(ClientWorld.class)
|
@Mixin(ClientWorld.class)
|
||||||
public class ClientWorldMixin {
|
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) {
|
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")) {
|
if (((Main.config.omnidirectionalNoteBlockSounds && Main.SONG_PLAYER.running) || Main.PREVIEWER.running) && event.getId().getPath().startsWith("block.note_block")) {
|
||||||
ci.cancel();
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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<SoundInstance, Channel.SourceManager> 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));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,8 +4,7 @@
|
|||||||
"package": "semmiedev.disc_jockey.mixin",
|
"package": "semmiedev.disc_jockey.mixin",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"ClientWorldMixin",
|
"ClientWorldMixin"
|
||||||
"SoundSystemMixin"
|
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user