LayeredRegistryAccess.java
net.minecraft.core.LayeredRegistryAccess
信息
- 全限定名:net.minecraft.core.LayeredRegistryAccess
- 类型:public class
- 包:net.minecraft.core
- 源码路径:src/main/java/net/minecraft/core/LayeredRegistryAccess.java
- 起始行号:L12
- 职责:
TODO
字段/常量
-
keys- 类型:
List<T> - 修饰符:
private final - 源码定位:
L13 - 说明:
TODO
- 类型:
-
values- 类型:
List<RegistryAccess.Frozen> - 修饰符:
private final - 源码定位:
L14 - 说明:
TODO
- 类型:
-
composite- 类型:
RegistryAccess.Frozen - 修饰符:
private final - 源码定位:
L15 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public LayeredRegistryAccess(List<T> keys) @ L17
- 构造器名:LayeredRegistryAccess
- 源码定位:L17
- 修饰符:public
参数:
- keys: List
说明:
TODO
private LayeredRegistryAccess(List<T> keys, List<RegistryAccess.Frozen> values) @ L25
- 构造器名:LayeredRegistryAccess
- 源码定位:L25
- 修饰符:private
参数:
- keys: List
- values: List<RegistryAccess.Frozen>
说明:
TODO
方法
下面的方法块按源码顺序生成。
private int getLayerIndexOrThrow(T layer) @ L31
- 方法名:getLayerIndexOrThrow
- 源码定位:L31
- 返回类型:int
- 修饰符:private
参数:
- layer: T
说明:
TODO
public RegistryAccess.Frozen getLayer(T layer) @ L40
- 方法名:getLayer
- 源码定位:L40
- 返回类型:RegistryAccess.Frozen
- 修饰符:public
参数:
- layer: T
说明:
TODO
public RegistryAccess.Frozen getAccessForLoading(T forLayer) @ L45
- 方法名:getAccessForLoading
- 源码定位:L45
- 返回类型:RegistryAccess.Frozen
- 修饰符:public
参数:
- forLayer: T
说明:
TODO
public RegistryAccess.Frozen getAccessFrom(T forLayer) @ L50
- 方法名:getAccessFrom
- 源码定位:L50
- 返回类型:RegistryAccess.Frozen
- 修饰符:public
参数:
- forLayer: T
说明:
TODO
private RegistryAccess.Frozen getCompositeAccessForLayers(int from, int to) @ L55
- 方法名:getCompositeAccessForLayers
- 源码定位:L55
- 返回类型:RegistryAccess.Frozen
- 修饰符:private
参数:
- from: int
- to: int
说明:
TODO
public LayeredRegistryAccess<T> replaceFrom(T fromLayer, RegistryAccess.Frozen... layers) @ L59
- 方法名:replaceFrom
- 源码定位:L59
- 返回类型:LayeredRegistryAccess
- 修饰符:public
参数:
- fromLayer: T
- layers: RegistryAccess.Frozen…
说明:
TODO
public LayeredRegistryAccess<T> replaceFrom(T fromLayer, List<RegistryAccess.Frozen> layers) @ L63
- 方法名:replaceFrom
- 源码定位:L63
- 返回类型:LayeredRegistryAccess
- 修饰符:public
参数:
- fromLayer: T
- layers: List<RegistryAccess.Frozen>
说明:
TODO
public RegistryAccess.Frozen compositeAccess() @ L84
- 方法名:compositeAccess
- 源码定位:L84
- 返回类型:RegistryAccess.Frozen
- 修饰符:public
参数:
- 无
说明:
TODO
private static Map<ResourceKey<?extends Registry<?>>,Registry<?>> collectRegistries(Stream<?extends RegistryAccess> registries) @ L88
- 方法名:collectRegistries
- 源码定位:L88
- 返回类型:Map<ResourceKey>,Registry<?>>
- 修饰符:private static
参数:
- registries: Stream<?extends RegistryAccess>
说明:
TODO
代码
public class LayeredRegistryAccess<T> {
private final List<T> keys;
private final List<RegistryAccess.Frozen> values;
private final RegistryAccess.Frozen composite;
public LayeredRegistryAccess(List<T> keys) {
this(keys, Util.make(() -> {
RegistryAccess.Frozen[] layers = new RegistryAccess.Frozen[keys.size()];
Arrays.fill(layers, RegistryAccess.EMPTY);
return Arrays.asList(layers);
}));
}
private LayeredRegistryAccess(List<T> keys, List<RegistryAccess.Frozen> values) {
this.keys = List.copyOf(keys);
this.values = List.copyOf(values);
this.composite = new RegistryAccess.ImmutableRegistryAccess(collectRegistries(values.stream())).freeze();
}
private int getLayerIndexOrThrow(T layer) {
int index = this.keys.indexOf(layer);
if (index == -1) {
throw new IllegalStateException("Can't find " + layer + " inside " + this.keys);
} else {
return index;
}
}
public RegistryAccess.Frozen getLayer(T layer) {
int index = this.getLayerIndexOrThrow(layer);
return this.values.get(index);
}
public RegistryAccess.Frozen getAccessForLoading(T forLayer) {
int index = this.getLayerIndexOrThrow(forLayer);
return this.getCompositeAccessForLayers(0, index);
}
public RegistryAccess.Frozen getAccessFrom(T forLayer) {
int index = this.getLayerIndexOrThrow(forLayer);
return this.getCompositeAccessForLayers(index, this.values.size());
}
private RegistryAccess.Frozen getCompositeAccessForLayers(int from, int to) {
return new RegistryAccess.ImmutableRegistryAccess(collectRegistries(this.values.subList(from, to).stream())).freeze();
}
public LayeredRegistryAccess<T> replaceFrom(T fromLayer, RegistryAccess.Frozen... layers) {
return this.replaceFrom(fromLayer, Arrays.asList(layers));
}
public LayeredRegistryAccess<T> replaceFrom(T fromLayer, List<RegistryAccess.Frozen> layers) {
int index = this.getLayerIndexOrThrow(fromLayer);
if (layers.size() > this.values.size() - index) {
throw new IllegalStateException("Too many values to replace");
} else {
List<RegistryAccess.Frozen> newValues = new ArrayList<>();
for (int i = 0; i < index; i++) {
newValues.add(this.values.get(i));
}
newValues.addAll(layers);
while (newValues.size() < this.values.size()) {
newValues.add(RegistryAccess.EMPTY);
}
return new LayeredRegistryAccess<>(this.keys, newValues);
}
}
public RegistryAccess.Frozen compositeAccess() {
return this.composite;
}
private static Map<ResourceKey<? extends Registry<?>>, Registry<?>> collectRegistries(Stream<? extends RegistryAccess> registries) {
Map<ResourceKey<? extends Registry<?>>, Registry<?>> result = new HashMap<>();
registries.forEach(access -> access.registries().forEach(e -> {
if (result.put(e.key(), e.value()) != null) {
throw new IllegalStateException("Duplicated registry " + e.key());
}
}));
return result;
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数/字段/方法调用/构造调用/返回值 - 关联成员:
ImmutableRegistryAccess(), RegistryAccess.ImmutableRegistryAccess()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.make()
- 引用位置: