Spaces:
Build error
Build error
File size: 2,077 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
package net.minecraft.client.sounds;
import java.io.BufferedInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import javax.sound.sampled.AudioFormat;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class LoopingAudioStream implements AudioStream {
private final LoopingAudioStream.AudioStreamProvider provider;
private AudioStream stream;
private final BufferedInputStream bufferedInputStream;
public LoopingAudioStream(LoopingAudioStream.AudioStreamProvider p_120163_, InputStream p_120164_) throws IOException {
this.provider = p_120163_;
this.bufferedInputStream = new BufferedInputStream(p_120164_);
this.bufferedInputStream.mark(Integer.MAX_VALUE);
this.stream = p_120163_.create(new LoopingAudioStream.NoCloseBuffer(this.bufferedInputStream));
}
@Override
public AudioFormat getFormat() {
return this.stream.getFormat();
}
@Override
public ByteBuffer read(int p_120167_) throws IOException {
ByteBuffer bytebuffer = this.stream.read(p_120167_);
if (!bytebuffer.hasRemaining()) {
this.stream.close();
this.bufferedInputStream.reset();
this.stream = this.provider.create(new LoopingAudioStream.NoCloseBuffer(this.bufferedInputStream));
bytebuffer = this.stream.read(p_120167_);
}
return bytebuffer;
}
@Override
public void close() throws IOException {
this.stream.close();
this.bufferedInputStream.close();
}
@FunctionalInterface
@OnlyIn(Dist.CLIENT)
public interface AudioStreamProvider {
AudioStream create(InputStream p_120170_) throws IOException;
}
@OnlyIn(Dist.CLIENT)
static class NoCloseBuffer extends FilterInputStream {
NoCloseBuffer(InputStream p_120172_) {
super(p_120172_);
}
@Override
public void close() {
}
}
} |