RegistryOps.java
net.minecraft.resources.RegistryOps
信息
- 全限定名:net.minecraft.resources.RegistryOps
- 类型:public class
- 包:net.minecraft.resources
- 源码路径:src/main/java/net/minecraft/resources/RegistryOps.java
- 起始行号:L18
- 继承:DelegatingOps
- 职责:
TODO
字段/常量
lookupProvider- 类型:
RegistryOps.RegistryInfoLookup - 修饰符:
private final - 源码定位:
L19 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.resources.RegistryOps.HolderLookupAdapter- 类型:
class - 修饰符:
private static final - 源码定位:
L93 - 说明:
TODO
- 类型:
-
net.minecraft.resources.RegistryOps.RegistryInfo- 类型:
record - 修饰符:
public - 源码定位:
L121 - 说明:
TODO
- 类型:
-
net.minecraft.resources.RegistryOps.RegistryInfoLookup- 类型:
interface - 修饰符:
public - 源码定位:
L127 - 说明:
TODO
- 类型:
构造器
private RegistryOps(DynamicOps<T> parent, RegistryOps.RegistryInfoLookup lookupProvider) @ L33
- 构造器名:RegistryOps
- 源码定位:L33
- 修饰符:private
参数:
- parent: DynamicOps
- lookupProvider: RegistryOps.RegistryInfoLookup
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static <T> RegistryOps<T> create(DynamicOps<T> parent, HolderLookup.Provider lookupProvider) @ L21
- 方法名:create
- 源码定位:L21
- 返回类型:
RegistryOps - 修饰符:public static
参数:
- parent: DynamicOps
- lookupProvider: HolderLookup.Provider
说明:
TODO
public static <T> RegistryOps<T> create(DynamicOps<T> parent, RegistryOps.RegistryInfoLookup lookupProvider) @ L25
- 方法名:create
- 源码定位:L25
- 返回类型:
RegistryOps - 修饰符:public static
参数:
- parent: DynamicOps
- lookupProvider: RegistryOps.RegistryInfoLookup
说明:
TODO
public static <T> Dynamic<T> injectRegistryContext(Dynamic<T> dynamic, HolderLookup.Provider lookupProvider) @ L29
- 方法名:injectRegistryContext
- 源码定位:L29
- 返回类型:
Dynamic - 修饰符:public static
参数:
- dynamic: Dynamic
- lookupProvider: HolderLookup.Provider
说明:
TODO
public <U> RegistryOps<U> withParent(DynamicOps<U> parent) @ L38
- 方法名:withParent
- 源码定位:L38
- 返回类型: RegistryOps
- 修饰符:public
参数:
- parent: DynamicOps
说明:
TODO
public <E> Optional<HolderOwner<E>> owner(ResourceKey<?extends Registry<?extends E>> registryKey) @ L42
- 方法名:owner
- 源码定位:L42
- 返回类型:
Optional<HolderOwner > - 修饰符:public
参数:
- registryKey: ResourceKey<?extends Registry<?extends E>>
说明:
TODO
public <E> Optional<HolderGetter<E>> getter(ResourceKey<?extends Registry<?extends E>> registryKey) @ L46
- 方法名:getter
- 源码定位:L46
- 返回类型:
Optional<HolderGetter > - 修饰符:public
参数:
- registryKey: ResourceKey<?extends Registry<?extends E>>
说明:
TODO
public boolean equals(Object obj) @ L50
- 方法名:equals
- 源码定位:L50
- 返回类型:boolean
- 修饰符:public
参数:
- obj: Object
说明:
TODO
public int hashCode() @ L62
- 方法名:hashCode
- 源码定位:L62
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public static <E,O> RecordCodecBuilder<O,HolderGetter<E>> retrieveGetter(ResourceKey<?extends Registry<?extends E>> registryKey) @ L67
- 方法名:retrieveGetter
- 源码定位:L67
- 返回类型:<E,O> RecordCodecBuilder<O,HolderGetter
> - 修饰符:public static
参数:
- registryKey: ResourceKey<?extends Registry<?extends E>>
说明:
TODO
public static <E,O> RecordCodecBuilder<O,Holder.Reference<E>> retrieveElement(ResourceKey<E> key) @ L79
- 方法名:retrieveElement
- 源码定位:L79
- 返回类型:<E,O> RecordCodecBuilder<O,Holder.Reference
> - 修饰符:public static
参数:
- key: ResourceKey
说明:
TODO
代码
public class RegistryOps<T> extends DelegatingOps<T> {
private final RegistryOps.RegistryInfoLookup lookupProvider;
public static <T> RegistryOps<T> create(DynamicOps<T> parent, HolderLookup.Provider lookupProvider) {
return create(parent, new RegistryOps.HolderLookupAdapter(lookupProvider));
}
public static <T> RegistryOps<T> create(DynamicOps<T> parent, RegistryOps.RegistryInfoLookup lookupProvider) {
return new RegistryOps<>(parent, lookupProvider);
}
public static <T> Dynamic<T> injectRegistryContext(Dynamic<T> dynamic, HolderLookup.Provider lookupProvider) {
return new Dynamic<>(lookupProvider.createSerializationContext(dynamic.getOps()), dynamic.getValue());
}
private RegistryOps(DynamicOps<T> parent, RegistryOps.RegistryInfoLookup lookupProvider) {
super(parent);
this.lookupProvider = lookupProvider;
}
public <U> RegistryOps<U> withParent(DynamicOps<U> parent) {
return (RegistryOps<U>)(parent == this.delegate ? this : new RegistryOps<>(parent, this.lookupProvider));
}
public <E> Optional<HolderOwner<E>> owner(ResourceKey<? extends Registry<? extends E>> registryKey) {
return this.lookupProvider.lookup(registryKey).map(RegistryOps.RegistryInfo::owner);
}
public <E> Optional<HolderGetter<E>> getter(ResourceKey<? extends Registry<? extends E>> registryKey) {
return this.lookupProvider.lookup(registryKey).map(RegistryOps.RegistryInfo::getter);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj != null && this.getClass() == obj.getClass()) {
RegistryOps<?> ops = (RegistryOps<?>)obj;
return this.delegate.equals(ops.delegate) && this.lookupProvider.equals(ops.lookupProvider);
} else {
return false;
}
}
@Override
public int hashCode() {
return this.delegate.hashCode() * 31 + this.lookupProvider.hashCode();
}
public static <E, O> RecordCodecBuilder<O, HolderGetter<E>> retrieveGetter(ResourceKey<? extends Registry<? extends E>> registryKey) {
return ExtraCodecs.retrieveContext(
ops -> ops instanceof RegistryOps<?> registryOps
? registryOps.lookupProvider
.lookup(registryKey)
.map(r -> DataResult.success(r.getter(), r.elementsLifecycle()))
.orElseGet(() -> DataResult.error(() -> "Unknown registry: " + registryKey))
: DataResult.error(() -> "Not a registry ops")
)
.forGetter(e -> null);
}
public static <E, O> RecordCodecBuilder<O, Holder.Reference<E>> retrieveElement(ResourceKey<E> key) {
ResourceKey<? extends Registry<E>> registryKey = ResourceKey.createRegistryKey(key.registry());
return ExtraCodecs.retrieveContext(
ops -> ops instanceof RegistryOps<?> registryOps
? registryOps.lookupProvider
.lookup(registryKey)
.flatMap(r -> r.getter().get(key))
.map(DataResult::success)
.orElseGet(() -> DataResult.error(() -> "Can't find value: " + key))
: DataResult.error(() -> "Not a registry ops")
)
.forGetter(e -> null);
}
private static final class HolderLookupAdapter implements RegistryOps.RegistryInfoLookup {
private final HolderLookup.Provider lookupProvider;
private final Map<ResourceKey<? extends Registry<?>>, Optional<? extends RegistryOps.RegistryInfo<?>>> lookups = new ConcurrentHashMap<>();
public HolderLookupAdapter(HolderLookup.Provider lookupProvider) {
this.lookupProvider = lookupProvider;
}
@Override
public <E> Optional<RegistryOps.RegistryInfo<E>> lookup(ResourceKey<? extends Registry<? extends E>> registryKey) {
return (Optional<RegistryOps.RegistryInfo<E>>)this.lookups.computeIfAbsent(registryKey, this::createLookup);
}
private Optional<RegistryOps.RegistryInfo<Object>> createLookup(ResourceKey<? extends Registry<?>> key) {
return this.lookupProvider.lookup(key).map(RegistryOps.RegistryInfo::fromRegistryLookup);
}
@Override
public boolean equals(Object obj) {
return this == obj ? true : obj instanceof RegistryOps.HolderLookupAdapter adapter && this.lookupProvider.equals(adapter.lookupProvider);
}
@Override
public int hashCode() {
return this.lookupProvider.hashCode();
}
}
public record RegistryInfo<T>(HolderOwner<T> owner, HolderGetter<T> getter, Lifecycle elementsLifecycle) {
public static <T> RegistryOps.RegistryInfo<T> fromRegistryLookup(HolderLookup.RegistryLookup<T> registry) {
return new RegistryOps.RegistryInfo<>(registry, registry, registry.registryLifecycle());
}
}
public interface RegistryInfoLookup {
<T> Optional<RegistryOps.RegistryInfo<T>> lookup(ResourceKey<? extends Registry<? extends T>> registryKey);
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
ResourceKey.createRegistryKey()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExtraCodecs.retrieveContext()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置: