SoundBufferLibrary.java
net.minecraft.client.sounds.SoundBufferLibrary
信息
- 全限定名:net.minecraft.client.sounds.SoundBufferLibrary
- 类型:public class
- 包:net.minecraft.client.sounds
- 源码路径:src/main/java/net/minecraft/client/sounds/SoundBufferLibrary.java
- 起始行号:L21
- 职责:
TODO
字段/常量
-
resourceManager- 类型:
ResourceProvider - 修饰符:
private final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
cache- 类型:
Map<Identifier,CompletableFuture<SoundBuffer>> - 修饰符:
private final - 源码定位:
L23 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.sounds.SoundBufferLibrary.DebugOutput- 类型:
interface - 修饰符:
public - 源码定位:
L78 - 说明:
TODO
- 类型:
-
net.minecraft.client.sounds.SoundBufferLibrary.DebugOutput.Counter- 类型:
class - 修饰符:
public static - 源码定位:
L82 - 说明:
TODO
- 类型:
构造器
public SoundBufferLibrary(ResourceProvider resourceProvider) @ L25
- 构造器名:SoundBufferLibrary
- 源码定位:L25
- 修饰符:public
参数:
- resourceProvider: ResourceProvider
说明:
TODO
方法
下面的方法块按源码顺序生成。
public CompletableFuture<SoundBuffer> getCompleteBuffer(Identifier location) @ L29
- 方法名:getCompleteBuffer
- 源码定位:L29
- 返回类型:CompletableFuture
- 修饰符:public
参数:
- location: Identifier
说明:
TODO
public CompletableFuture<AudioStream> getStream(Identifier location, boolean looping) @ L48
- 方法名:getStream
- 源码定位:L48
- 返回类型:CompletableFuture
- 修饰符:public
参数:
- location: Identifier
- looping: boolean
说明:
TODO
public void clear() @ L59
- 方法名:clear
- 源码定位:L59
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public CompletableFuture<?> preload(Collection<Sound> sounds) @ L64
- 方法名:preload
- 源码定位:L64
- 返回类型:CompletableFuture<?>
- 修饰符:public
参数:
- sounds: Collection
说明:
TODO
public void enumerate(SoundBufferLibrary.DebugOutput debugOutput) @ L68
- 方法名:enumerate
- 源码定位:L68
- 返回类型:void
- 修饰符:public
参数:
- debugOutput: SoundBufferLibrary.DebugOutput
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class SoundBufferLibrary {
private final ResourceProvider resourceManager;
private final Map<Identifier, CompletableFuture<SoundBuffer>> cache = Maps.newHashMap();
public SoundBufferLibrary(ResourceProvider resourceProvider) {
this.resourceManager = resourceProvider;
}
public CompletableFuture<SoundBuffer> getCompleteBuffer(Identifier location) {
return this.cache.computeIfAbsent(location, l -> CompletableFuture.supplyAsync(() -> {
try {
SoundBuffer x2;
try (
InputStream is = this.resourceManager.open(l);
FiniteAudioStream as = new JOrbisAudioStream(is);
) {
ByteBuffer data = as.readAll();
x2 = new SoundBuffer(data, as.getFormat());
}
return x2;
} catch (IOException var10) {
throw new CompletionException(var10);
}
}, Util.nonCriticalIoPool()));
}
public CompletableFuture<AudioStream> getStream(Identifier location, boolean looping) {
return CompletableFuture.supplyAsync(() -> {
try {
InputStream is = this.resourceManager.open(location);
return (AudioStream)(looping ? new LoopingAudioStream(JOrbisAudioStream::new, is) : new JOrbisAudioStream(is));
} catch (IOException var4) {
throw new CompletionException(var4);
}
}, Util.nonCriticalIoPool());
}
public void clear() {
this.cache.values().forEach(future -> future.thenAccept(SoundBuffer::discardAlBuffer));
this.cache.clear();
}
public CompletableFuture<?> preload(Collection<Sound> sounds) {
return CompletableFuture.allOf(sounds.stream().map(sound -> this.getCompleteBuffer(sound.getPath())).toArray(CompletableFuture[]::new));
}
public void enumerate(SoundBufferLibrary.DebugOutput debugOutput) {
this.cache.forEach((id, bufferFuture) -> {
SoundBuffer buffer = bufferFuture.getNow(null);
if (buffer != null && buffer.isValid()) {
debugOutput.accountBuffer(id, buffer.size(), buffer.format());
}
});
}
@OnlyIn(Dist.CLIENT)
public interface DebugOutput {
void accountBuffer(Identifier id, int size, AudioFormat format);
@OnlyIn(Dist.CLIENT)
public static class Counter implements SoundBufferLibrary.DebugOutput {
private int totalCount;
private long totalSize;
@Override
public void accountBuffer(Identifier id, int size, AudioFormat format) {
this.totalCount++;
this.totalSize += size;
}
public int totalCount() {
return this.totalCount;
}
public long totalSize() {
return this.totalSize;
}
}
}
}引用的其他类
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
SoundBuffer()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
JOrbisAudioStream()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
LoopingAudioStream()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.nonCriticalIoPool()
- 引用位置: