diff --git a/src/main/java/dan200/computercraft/client/SoundManager.java b/src/main/java/dan200/computercraft/client/SoundManager.java index 2c8730140..4e6fd4339 100644 --- a/src/main/java/dan200/computercraft/client/SoundManager.java +++ b/src/main/java/dan200/computercraft/client/SoundManager.java @@ -61,6 +61,7 @@ public class SoundManager setPosition( position ); this.volume = volume; this.pitch = pitch; + attenuation = ISound.AttenuationType.LINEAR; } void setPosition( Vector3d position ) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 127dc0ad6..aef164db3 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -176,7 +176,8 @@ public abstract class SpeakerPeripheral implements IPeripheral World world = getWorld(); Vector3d pos = getPosition(); - float range = MathHelper.clamp( volume, 1.0f, 3.0f ) * 16; + float actualVolume = MathHelper.clamp( volume, 0.0f, 3.0f ); + float range = actualVolume * 16; context.issueMainThreadTask( () -> { MinecraftServer server = world.getServer(); @@ -186,13 +187,13 @@ public abstract class SpeakerPeripheral implements IPeripheral { server.getPlayerList().broadcast( null, pos.x, pos.y, pos.z, range, world.dimension(), - new SPlaySoundPacket( name, SoundCategory.RECORDS, pos, range, pitch ) + new SPlaySoundPacket( name, SoundCategory.RECORDS, pos, actualVolume, pitch ) ); } else { NetworkHandler.sendToAllAround( - new SpeakerPlayClientMessage( getSource(), pos, name, range, pitch ), + new SpeakerPlayClientMessage( getSource(), pos, name, actualVolume, pitch ), world, pos, range ); }