Registry.java

net.minecraft.core.Registry

信息

  • 全限定名:net.minecraft.core.Registry
  • 类型:public interface
  • 包:net.minecraft.core
  • 源码路径:src/main/java/net/minecraft/core/Registry.java
  • 起始行号:L26
  • 继承:IdMap, Keyable, HolderLookup.RegistryLookup
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.core.Registry.PendingTags
    • 类型: interface
    • 修饰符: public
    • 源码定位: L175
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

ResourceKey<?extends Registry<T>> key() @ L27

  • 方法名:key
  • 源码定位:L27
  • 返回类型:ResourceKey<?extends Registry>
  • 修饰符:package-private

参数:

说明:

TODO

default Codec<T> byNameCodec() @ L30

  • 方法名:byNameCodec
  • 源码定位:L30
  • 返回类型:Codec
  • 修饰符:default

参数:

说明:

TODO

default Codec<Holder<T>> holderByNameCodec() @ L34

  • 方法名:holderByNameCodec
  • 源码定位:L34
  • 返回类型:Codec<Holder>
  • 修饰符:default

参数:

说明:

TODO

private Codec<Holder.Reference<T>> referenceHolderWithLifecycle() @ L38

  • 方法名:referenceHolderWithLifecycle
  • 源码定位:L38
  • 返回类型:Codec<Holder.Reference>
  • 修饰符:private

参数:

说明:

TODO

private DataResult<Holder.Reference<T>> safeCastToReference(Holder<T> holder) @ L49

  • 方法名:safeCastToReference
  • 源码定位:L49
  • 返回类型:DataResult<Holder.Reference>
  • 修饰符:private

参数:

  • holder: Holder

说明:

TODO

default <U> Stream<U> keys(DynamicOps<U> ops) @ L55

  • 方法名:keys
  • 源码定位:L55
  • 返回类型: Stream
  • 修饰符:default

参数:

  • ops: DynamicOps

说明:

TODO

Identifier getKey(T thing) @ L60

  • 方法名:getKey
  • 源码定位:L60
  • 返回类型:Identifier
  • 修饰符:package-private

参数:

  • thing: T

说明:

TODO

Optional<ResourceKey<T>> getResourceKey(T thing) @ L62

  • 方法名:getResourceKey
  • 源码定位:L62
  • 返回类型:Optional<ResourceKey>
  • 修饰符:package-private

参数:

  • thing: T

说明:

TODO

int getId(T thing) @ L64

  • 方法名:getId
  • 源码定位:L64
  • 返回类型:int
  • 修饰符:package-private

参数:

  • thing: T

说明:

TODO

T getValue(ResourceKey<T> key) @ L67

  • 方法名:getValue
  • 源码定位:L67
  • 返回类型:T
  • 修饰符:package-private

参数:

  • key: ResourceKey

说明:

TODO

T getValue(Identifier key) @ L69

  • 方法名:getValue
  • 源码定位:L69
  • 返回类型:T
  • 修饰符:package-private

参数:

  • key: Identifier

说明:

TODO

Optional<RegistrationInfo> registrationInfo(ResourceKey<T> element) @ L71

  • 方法名:registrationInfo
  • 源码定位:L71
  • 返回类型:Optional
  • 修饰符:package-private

参数:

  • element: ResourceKey

说明:

TODO

default Optional<T> getOptional(Identifier key) @ L73

  • 方法名:getOptional
  • 源码定位:L73
  • 返回类型:Optional
  • 修饰符:default

参数:

  • key: Identifier

说明:

TODO

default Optional<T> getOptional(ResourceKey<T> key) @ L77

  • 方法名:getOptional
  • 源码定位:L77
  • 返回类型:Optional
  • 修饰符:default

参数:

  • key: ResourceKey

说明:

TODO

Optional<Holder.Reference<T>> getAny() @ L81

  • 方法名:getAny
  • 源码定位:L81
  • 返回类型:Optional<Holder.Reference>
  • 修饰符:package-private

参数:

说明:

TODO

default T getValueOrThrow(ResourceKey<T> key) @ L83

  • 方法名:getValueOrThrow
  • 源码定位:L83
  • 返回类型:T
  • 修饰符:default

参数:

  • key: ResourceKey

说明:

TODO

Set<Identifier> keySet() @ L92

  • 方法名:keySet
  • 源码定位:L92
  • 返回类型:Set
  • 修饰符:package-private

参数:

说明:

TODO

Set<Entry<ResourceKey<T>,T>> entrySet() @ L94

  • 方法名:entrySet
  • 源码定位:L94
  • 返回类型:Set<Entry<ResourceKey,T>>
  • 修饰符:package-private

参数:

说明:

TODO

Set<ResourceKey<T>> registryKeySet() @ L96

  • 方法名:registryKeySet
  • 源码定位:L96
  • 返回类型:Set<ResourceKey>
  • 修饰符:package-private

参数:

说明:

TODO

Optional<Holder.Reference<T>> getRandom(RandomSource random) @ L98

  • 方法名:getRandom
  • 源码定位:L98
  • 返回类型:Optional<Holder.Reference>
  • 修饰符:package-private

参数:

  • random: RandomSource

说明:

TODO

default Stream<T> stream() @ L100

  • 方法名:stream
  • 源码定位:L100
  • 返回类型:Stream
  • 修饰符:default

参数:

说明:

TODO

boolean containsKey(Identifier key) @ L104

  • 方法名:containsKey
  • 源码定位:L104
  • 返回类型:boolean
  • 修饰符:package-private

参数:

  • key: Identifier

说明:

TODO

boolean containsKey(ResourceKey<T> key) @ L106

  • 方法名:containsKey
  • 源码定位:L106
  • 返回类型:boolean
  • 修饰符:package-private

参数:

  • key: ResourceKey

说明:

TODO

static <T> T register(Registry<?super T> registry, String name, T value) @ L108

  • 方法名:register
  • 源码定位:L108
  • 返回类型: T
  • 修饰符:static

参数:

  • registry: Registry<?super T>
  • name: String
  • value: T

说明:

TODO

static <V,T extends V> T register(Registry<V> registry, Identifier location, T value) @ L112

  • 方法名:register
  • 源码定位:L112
  • 返回类型:<V,T extends V> T
  • 修饰符:static

参数:

  • registry: Registry
  • location: Identifier
  • value: T

说明:

TODO

static <V,T extends V> T register(Registry<V> registry, ResourceKey<V> key, T value) @ L116

  • 方法名:register
  • 源码定位:L116
  • 返回类型:<V,T extends V> T
  • 修饰符:static

参数:

  • registry: Registry
  • key: ResourceKey
  • value: T

说明:

TODO

static <R,T extends R> Holder.Reference<T> registerForHolder(Registry<R> registry, ResourceKey<R> key, T value) @ L121

  • 方法名:registerForHolder
  • 源码定位:L121
  • 返回类型:<R,T extends R> Holder.Reference
  • 修饰符:static

参数:

  • registry: Registry
  • key: ResourceKey
  • value: T

说明:

TODO

static <R,T extends R> Holder.Reference<T> registerForHolder(Registry<R> registry, Identifier location, T value) @ L125

  • 方法名:registerForHolder
  • 源码定位:L125
  • 返回类型:<R,T extends R> Holder.Reference
  • 修饰符:static

参数:

  • registry: Registry
  • location: Identifier
  • value: T

说明:

TODO

Registry<T> freeze() @ L129

  • 方法名:freeze
  • 源码定位:L129
  • 返回类型:Registry
  • 修饰符:package-private

参数:

说明:

TODO

Holder.Reference<T> createIntrusiveHolder(T value) @ L131

  • 方法名:createIntrusiveHolder
  • 源码定位:L131
  • 返回类型:Holder.Reference
  • 修饰符:package-private

参数:

  • value: T

说明:

TODO

Optional<Holder.Reference<T>> get(int id) @ L133

  • 方法名:get
  • 源码定位:L133
  • 返回类型:Optional<Holder.Reference>
  • 修饰符:package-private

参数:

  • id: int

说明:

TODO

Optional<Holder.Reference<T>> get(Identifier id) @ L135

  • 方法名:get
  • 源码定位:L135
  • 返回类型:Optional<Holder.Reference>
  • 修饰符:package-private

参数:

  • id: Identifier

说明:

TODO

Holder<T> wrapAsHolder(T value) @ L137

  • 方法名:wrapAsHolder
  • 源码定位:L137
  • 返回类型:Holder
  • 修饰符:package-private

参数:

  • value: T

说明:

TODO

default Iterable<Holder<T>> getTagOrEmpty(TagKey<T> id) @ L139

  • 方法名:getTagOrEmpty
  • 源码定位:L139
  • 返回类型:Iterable<Holder>
  • 修饰符:default

参数:

  • id: TagKey

说明:

TODO

Stream<HolderSet.Named<T>> getTags() @ L143

  • 方法名:getTags
  • 源码定位:L143
  • 返回类型:Stream<HolderSet.Named>
  • 修饰符:package-private

参数:

说明:

TODO

default IdMap<Holder<T>> asHolderIdMap() @ L145

  • 方法名:asHolderIdMap
  • 源码定位:L145
  • 返回类型:IdMap<Holder>
  • 修饰符:default

参数:

说明:

TODO

Registry.PendingTags<T> prepareTagReload(TagLoader.LoadResult<T> tags) @ L171

  • 方法名:prepareTagReload
  • 源码定位:L171
  • 返回类型:Registry.PendingTags
  • 修饰符:package-private

参数:

  • tags: TagLoader.LoadResult

说明:

TODO

DataComponentLookup<T> componentLookup() @ L173

  • 方法名:componentLookup
  • 源码定位:L173
  • 返回类型:DataComponentLookup
  • 修饰符:package-private

参数:

说明:

TODO

代码

public interface Registry<T> extends IdMap<T>, Keyable, HolderLookup.RegistryLookup<T> {
    @Override
    ResourceKey<? extends Registry<T>> key();
 
    default Codec<T> byNameCodec() {
        return this.referenceHolderWithLifecycle().flatComapMap(Holder.Reference::value, value -> this.safeCastToReference(this.wrapAsHolder((T)value)));
    }
 
    default Codec<Holder<T>> holderByNameCodec() {
        return this.referenceHolderWithLifecycle().flatComapMap(holder -> (Holder<T>)holder, this::safeCastToReference);
    }
 
    private Codec<Holder.Reference<T>> referenceHolderWithLifecycle() {
        Codec<Holder.Reference<T>> referenceCodec = Identifier.CODEC
            .comapFlatMap(
                name -> this.get(name).map(DataResult::success).orElseGet(() -> DataResult.error(() -> "Unknown registry key in " + this.key() + ": " + name)),
                holder -> holder.key().identifier()
            );
        return ExtraCodecs.overrideLifecycle(
            referenceCodec, e -> this.registrationInfo(e.key()).map(RegistrationInfo::lifecycle).orElse(Lifecycle.experimental())
        );
    }
 
    private DataResult<Holder.Reference<T>> safeCastToReference(Holder<T> holder) {
        return holder instanceof Holder.Reference<T> reference
            ? DataResult.success(reference)
            : DataResult.error(() -> "Unregistered holder in " + this.key() + ": " + holder);
    }
 
    @Override
    default <U> Stream<U> keys(DynamicOps<U> ops) {
        return this.keySet().stream().map(k -> ops.createString(k.toString()));
    }
 
    @Nullable Identifier getKey(T thing);
 
    Optional<ResourceKey<T>> getResourceKey(T thing);
 
    @Override
    int getId(@Nullable T thing);
 
    @Nullable T getValue(@Nullable ResourceKey<T> key);
 
    @Nullable T getValue(@Nullable Identifier key);
 
    Optional<RegistrationInfo> registrationInfo(ResourceKey<T> element);
 
    default Optional<T> getOptional(@Nullable Identifier key) {
        return Optional.ofNullable(this.getValue(key));
    }
 
    default Optional<T> getOptional(@Nullable ResourceKey<T> key) {
        return Optional.ofNullable(this.getValue(key));
    }
 
    Optional<Holder.Reference<T>> getAny();
 
    default T getValueOrThrow(ResourceKey<T> key) {
        T value = this.getValue(key);
        if (value == null) {
            throw new IllegalStateException("Missing key in " + this.key() + ": " + key);
        } else {
            return value;
        }
    }
 
    Set<Identifier> keySet();
 
    Set<Entry<ResourceKey<T>, T>> entrySet();
 
    Set<ResourceKey<T>> registryKeySet();
 
    Optional<Holder.Reference<T>> getRandom(RandomSource random);
 
    default Stream<T> stream() {
        return StreamSupport.stream(this.spliterator(), false);
    }
 
    boolean containsKey(Identifier key);
 
    boolean containsKey(ResourceKey<T> key);
 
    static <T> T register(Registry<? super T> registry, String name, T value) {
        return register(registry, Identifier.parse(name), value);
    }
 
    static <V, T extends V> T register(Registry<V> registry, Identifier location, T value) {
        return register(registry, ResourceKey.create(registry.key(), location), value);
    }
 
    static <V, T extends V> T register(Registry<V> registry, ResourceKey<V> key, T value) {
        ((WritableRegistry)registry).register(key, (V)value, RegistrationInfo.BUILT_IN);
        return value;
    }
 
    static <R, T extends R> Holder.Reference<T> registerForHolder(Registry<R> registry, ResourceKey<R> key, T value) {
        return ((WritableRegistry)registry).register(key, (R)value, RegistrationInfo.BUILT_IN);
    }
 
    static <R, T extends R> Holder.Reference<T> registerForHolder(Registry<R> registry, Identifier location, T value) {
        return registerForHolder(registry, ResourceKey.create(registry.key(), location), value);
    }
 
    Registry<T> freeze();
 
    Holder.Reference<T> createIntrusiveHolder(T value);
 
    Optional<Holder.Reference<T>> get(int id);
 
    Optional<Holder.Reference<T>> get(Identifier id);
 
    Holder<T> wrapAsHolder(T value);
 
    default Iterable<Holder<T>> getTagOrEmpty(TagKey<T> id) {
        return DataFixUtils.orElse(this.get(id), List.of());
    }
 
    Stream<HolderSet.Named<T>> getTags();
 
    default IdMap<Holder<T>> asHolderIdMap() {
        return new IdMap<Holder<T>>() {
            {
                Objects.requireNonNull(Registry.this);
            }
 
            public int getId(Holder<T> thing) {
                return Registry.this.getId(thing.value());
            }
 
            public @Nullable Holder<T> byId(int id) {
                return (Holder<T>)Registry.this.get(id).orElse(null);
            }
 
            @Override
            public int size() {
                return Registry.this.size();
            }
 
            @Override
            public Iterator<Holder<T>> iterator() {
                return Registry.this.listElements().map(e -> (Holder<T>)e).iterator();
            }
        };
    }
 
    Registry.PendingTags<T> prepareTagReload(TagLoader.LoadResult<T> tags);
 
    DataComponentLookup<T> componentLookup();
 
    public interface PendingTags<T> {
        ResourceKey<? extends Registry<? extends T>> key();
 
        HolderLookup.RegistryLookup<T> lookup();
 
        void apply();
 
        int size();
    }
}

引用的其他类