PlaceholderLookupProvider.java
net.minecraft.util.PlaceholderLookupProvider
信息
- 全限定名:net.minecraft.util.PlaceholderLookupProvider
- 类型:public class
- 包:net.minecraft.util
- 源码路径:src/main/java/net/minecraft/util/PlaceholderLookupProvider.java
- 起始行号:L22
- 实现:HolderGetter.Provider
- 职责:
TODO
字段/常量
-
context- 类型:
HolderLookup.Provider - 修饰符:
private final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
lookup- 类型:
PlaceholderLookupProvider.UniversalLookup - 修饰符:
private final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
holders- 类型:
Map<ResourceKey<Object>,Holder.Reference<Object>> - 修饰符:
private final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
holderSets- 类型:
Map<TagKey<Object>,HolderSet.Named<Object>> - 修饰符:
private final - 源码定位:
L26 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.util.PlaceholderLookupProvider.UniversalLookup- 类型:
class - 修饰符:
private - 源码定位:
L82 - 说明:
TODO
- 类型:
构造器
public PlaceholderLookupProvider(HolderLookup.Provider context) @ L28
- 构造器名:PlaceholderLookupProvider
- 源码定位:L28
- 修饰符:public
参数:
- context: HolderLookup.Provider
说明:
TODO
方法
下面的方法块按源码顺序生成。
public <T> Optional<?extends HolderGetter<T>> lookup(ResourceKey<?extends Registry<?extends T>> key) @ L32
- 方法名:lookup
- 源码定位:L32
- 返回类型:
Optional<?extends HolderGetter > - 修饰符:public
参数:
- key: ResourceKey<?extends Registry<?extends T>>
说明:
TODO
public <V> RegistryOps<V> createSerializationContext(DynamicOps<V> parent) @ L37
- 方法名:createSerializationContext
- 源码定位:L37
- 返回类型:
RegistryOps - 修饰符:public
参数:
- parent: DynamicOps
说明:
TODO
public RegistryContextSwapper createSwapper() @ L64
- 方法名:createSwapper
- 源码定位:L64
- 返回类型:RegistryContextSwapper
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean hasRegisteredPlaceholders() @ L78
- 方法名:hasRegisteredPlaceholders
- 源码定位:L78
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class PlaceholderLookupProvider implements HolderGetter.Provider {
private final HolderLookup.Provider context;
private final PlaceholderLookupProvider.UniversalLookup lookup = new PlaceholderLookupProvider.UniversalLookup();
private final Map<ResourceKey<Object>, Holder.Reference<Object>> holders = new HashMap<>();
private final Map<TagKey<Object>, HolderSet.Named<Object>> holderSets = new HashMap<>();
public PlaceholderLookupProvider(HolderLookup.Provider context) {
this.context = context;
}
@Override
public <T> Optional<? extends HolderGetter<T>> lookup(ResourceKey<? extends Registry<? extends T>> key) {
return Optional.of(this.lookup.castAsLookup());
}
public <V> RegistryOps<V> createSerializationContext(DynamicOps<V> parent) {
return RegistryOps.create(
parent,
new RegistryOps.RegistryInfoLookup() {
{
Objects.requireNonNull(PlaceholderLookupProvider.this);
}
@Override
public <T> Optional<RegistryOps.RegistryInfo<T>> lookup(ResourceKey<? extends Registry<? extends T>> registryKey) {
return PlaceholderLookupProvider.this.context
.lookup(registryKey)
.map(RegistryOps.RegistryInfo::fromRegistryLookup)
.or(
() -> Optional.of(
new RegistryOps.RegistryInfo<>(
PlaceholderLookupProvider.this.lookup.castAsOwner(),
PlaceholderLookupProvider.this.lookup.castAsLookup(),
Lifecycle.experimental()
)
)
);
}
}
);
}
public RegistryContextSwapper createSwapper() {
return new RegistryContextSwapper() {
{
Objects.requireNonNull(PlaceholderLookupProvider.this);
}
@Override
public <T> DataResult<T> swapTo(Codec<T> codec, T value, HolderLookup.Provider newContext) {
return codec.encodeStart(PlaceholderLookupProvider.this.createSerializationContext(JavaOps.INSTANCE), value)
.flatMap(v -> codec.parse(newContext.createSerializationContext(JavaOps.INSTANCE), v));
}
};
}
public boolean hasRegisteredPlaceholders() {
return !this.holders.isEmpty() || !this.holderSets.isEmpty();
}
private class UniversalLookup implements HolderGetter<Object>, HolderOwner<Object> {
private UniversalLookup() {
Objects.requireNonNull(PlaceholderLookupProvider.this);
super();
}
@Override
public Optional<Holder.Reference<Object>> get(ResourceKey<Object> id) {
return Optional.of(this.getOrCreate(id));
}
@Override
public Holder.Reference<Object> getOrThrow(ResourceKey<Object> id) {
return this.getOrCreate(id);
}
private Holder.Reference<Object> getOrCreate(ResourceKey<Object> id) {
return PlaceholderLookupProvider.this.holders.computeIfAbsent(id, k -> Holder.Reference.createStandAlone(this, (ResourceKey<Object>)k));
}
@Override
public Optional<HolderSet.Named<Object>> get(TagKey<Object> id) {
return Optional.of(this.getOrCreate(id));
}
@Override
public HolderSet.Named<Object> getOrThrow(TagKey<Object> id) {
return this.getOrCreate(id);
}
private HolderSet.Named<Object> getOrCreate(TagKey<Object> id) {
return PlaceholderLookupProvider.this.holderSets.computeIfAbsent(id, k -> HolderSet.emptyNamed(this, (TagKey<Object>)k));
}
public <T> HolderGetter<T> castAsLookup() {
return (HolderGetter<T>)this;
}
public <T> HolderOwner<T> castAsOwner() {
return (HolderOwner<T>)this;
}
}
}引用的其他类
-
- 引用位置:
字段/方法调用 - 关联成员:
Holder.Reference.createStandAlone()
- 引用位置:
-
- 引用位置:
实现/返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
HolderSet.emptyNamed()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用/构造调用/返回值 - 关联成员:
RegistryInfoLookup(), RegistryOps.RegistryInfoLookup(), RegistryOps.create()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
RegistryContextSwapper()
- 引用位置: