53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.sounds;
 | |
| 
 | |
| import com.google.common.collect.Lists;
 | |
| import it.unimi.dsi.fastutil.floats.FloatConsumer;
 | |
| import java.nio.ByteBuffer;
 | |
| import java.util.List;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.util.Mth;
 | |
| import org.lwjgl.BufferUtils;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class ChunkedSampleByteBuf implements FloatConsumer {
 | |
| 	private final List<ByteBuffer> buffers = Lists.<ByteBuffer>newArrayList();
 | |
| 	private final int bufferSize;
 | |
| 	private int byteCount;
 | |
| 	private ByteBuffer currentBuffer;
 | |
| 
 | |
| 	public ChunkedSampleByteBuf(int bufferSize) {
 | |
| 		this.bufferSize = bufferSize + 1 & -2;
 | |
| 		this.currentBuffer = BufferUtils.createByteBuffer(bufferSize);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public void accept(float f) {
 | |
| 		if (this.currentBuffer.remaining() == 0) {
 | |
| 			this.currentBuffer.flip();
 | |
| 			this.buffers.add(this.currentBuffer);
 | |
| 			this.currentBuffer = BufferUtils.createByteBuffer(this.bufferSize);
 | |
| 		}
 | |
| 
 | |
| 		int i = Mth.clamp((int)(f * 32767.5F - 0.5F), -32768, 32767);
 | |
| 		this.currentBuffer.putShort((short)i);
 | |
| 		this.byteCount += 2;
 | |
| 	}
 | |
| 
 | |
| 	public ByteBuffer get() {
 | |
| 		this.currentBuffer.flip();
 | |
| 		if (this.buffers.isEmpty()) {
 | |
| 			return this.currentBuffer;
 | |
| 		} else {
 | |
| 			ByteBuffer byteBuffer = BufferUtils.createByteBuffer(this.byteCount);
 | |
| 			this.buffers.forEach(byteBuffer::put);
 | |
| 			byteBuffer.put(this.currentBuffer);
 | |
| 			byteBuffer.flip();
 | |
| 			return byteBuffer;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public int size() {
 | |
| 		return this.byteCount;
 | |
| 	}
 | |
| }
 |