RegistryAccess.java

net.minecraft.core.RegistryAccess

信息

  • 全限定名:net.minecraft.core.RegistryAccess
  • 类型:public interface
  • 包:net.minecraft.core
  • 源码路径:src/main/java/net/minecraft/core/RegistryAccess.java
  • 起始行号:L15
  • 继承:HolderLookup.Provider
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: package-private
    • 源码定位: L16
    • 说明:

      TODO

  • EMPTY

    • 类型: RegistryAccess.Frozen
    • 修饰符: package-private
    • 源码定位: L17
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.core.RegistryAccess.FrozenAccess

    • 类型: class
    • 修饰符: package-private
    • 源码定位: L54
    • 说明:

      TODO

  • net.minecraft.core.RegistryAccess.Frozen

    • 类型: interface
    • 修饰符: public
    • 源码定位: L64
    • 说明:

      TODO

  • net.minecraft.core.RegistryAccess.ImmutableRegistryAccess

    • 类型: class
    • 修饰符: public static
    • 源码定位: L67
    • 说明:

      TODO

  • net.minecraft.core.RegistryAccess.RegistryEntry

    • 类型: record
    • 修饰符: public
    • 源码定位: L93
    • 说明:

      TODO

构造器

方法

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

<E> Optional<Registry<E>> lookup(ResourceKey<?extends Registry<?extends E>> registryKey) @ L19

  • 方法名:lookup
  • 源码定位:L19
  • 返回类型: Optional<Registry>
  • 修饰符:package-private

参数:

  • registryKey: ResourceKey<?extends Registry<?extends E>>

说明:

TODO

default <E> Registry<E> lookupOrThrow(ResourceKey<?extends Registry<?extends E>> name) @ L22

  • 方法名:lookupOrThrow
  • 源码定位:L22
  • 返回类型: Registry
  • 修饰符:default

参数:

  • name: ResourceKey<?extends Registry<?extends E>>

说明:

TODO

Stream<RegistryAccess.RegistryEntry<?>> registries() @ L26

  • 方法名:registries
  • 源码定位:L26
  • 返回类型:Stream<RegistryAccess.RegistryEntry<?>>
  • 修饰符:package-private

参数:

说明:

TODO

default Stream<ResourceKey<?extends Registry<?>>> listRegistryKeys() @ L28

  • 方法名:listRegistryKeys
  • 源码定位:L28
  • 返回类型:Stream<ResourceKey>>
  • 修饰符:default

参数:

说明:

TODO

static RegistryAccess.Frozen fromRegistryOfRegistries(Registry<?extends Registry<?>> registries) @ L33

  • 方法名:fromRegistryOfRegistries
  • 源码定位:L33
  • 返回类型:RegistryAccess.Frozen
  • 修饰符:static

参数:

  • registries: Registry>

说明:

TODO

default RegistryAccess.Frozen freeze() @ L53

  • 方法名:freeze
  • 源码定位:L53
  • 返回类型:RegistryAccess.Frozen
  • 修饰符:default

参数:

说明:

TODO

代码

public interface RegistryAccess extends HolderLookup.Provider {
    Logger LOGGER = LogUtils.getLogger();
    RegistryAccess.Frozen EMPTY = new RegistryAccess.ImmutableRegistryAccess(Map.of()).freeze();
 
    @Override
    <E> Optional<Registry<E>> lookup(final ResourceKey<? extends Registry<? extends E>> registryKey);
 
    default <E> Registry<E> lookupOrThrow(ResourceKey<? extends Registry<? extends E>> name) {
        return this.lookup(name).orElseThrow(() -> new IllegalStateException("Missing registry: " + name));
    }
 
    Stream<RegistryAccess.RegistryEntry<?>> registries();
 
    @Override
    default Stream<ResourceKey<? extends Registry<?>>> listRegistryKeys() {
        return this.registries().map(e -> e.key);
    }
 
    static RegistryAccess.Frozen fromRegistryOfRegistries(Registry<? extends Registry<?>> registries) {
        return new RegistryAccess.Frozen() {
            @Override
            public <T> Optional<Registry<T>> lookup(ResourceKey<? extends Registry<? extends T>> registryKey) {
                Registry<Registry<T>> registry = (Registry<Registry<T>>)registries;
                return registry.getOptional((ResourceKey<Registry<T>>)registryKey);
            }
 
            @Override
            public Stream<RegistryAccess.RegistryEntry<?>> registries() {
                return registries.entrySet().stream().map(RegistryAccess.RegistryEntry::fromMapEntry);
            }
 
            @Override
            public RegistryAccess.Frozen freeze() {
                return this;
            }
        };
    }
 
    default RegistryAccess.Frozen freeze() {
        class FrozenAccess extends RegistryAccess.ImmutableRegistryAccess implements RegistryAccess.Frozen {
            protected FrozenAccess(Stream<RegistryAccess.RegistryEntry<?>> entries) {
                Objects.requireNonNull(RegistryAccess.this);
                super(entries);
            }
        }
 
        return new FrozenAccess(this.registries().map(RegistryAccess.RegistryEntry::freeze));
    }
 
    public interface Frozen extends RegistryAccess {
    }
 
    public static class ImmutableRegistryAccess implements RegistryAccess {
        private final Map<? extends ResourceKey<? extends Registry<?>>, ? extends Registry<?>> registries;
 
        public ImmutableRegistryAccess(List<? extends Registry<?>> registries) {
            this.registries = registries.stream().collect(Collectors.toUnmodifiableMap(Registry::key, v -> v));
        }
 
        public ImmutableRegistryAccess(Map<? extends ResourceKey<? extends Registry<?>>, ? extends Registry<?>> registries) {
            this.registries = Map.copyOf(registries);
        }
 
        public ImmutableRegistryAccess(Stream<RegistryAccess.RegistryEntry<?>> entries) {
            this.registries = entries.collect(ImmutableMap.toImmutableMap(RegistryAccess.RegistryEntry::key, RegistryAccess.RegistryEntry::value));
        }
 
        @Override
        public <E> Optional<Registry<E>> lookup(ResourceKey<? extends Registry<? extends E>> registryKey) {
            return Optional.ofNullable(this.registries.get(registryKey)).map(r -> (Registry<E>)r);
        }
 
        @Override
        public Stream<RegistryAccess.RegistryEntry<?>> registries() {
            return this.registries.entrySet().stream().map(RegistryAccess.RegistryEntry::fromMapEntry);
        }
    }
 
    public record RegistryEntry<T>(ResourceKey<? extends Registry<T>> key, Registry<T> value) {
        private static <T, R extends Registry<? extends T>> RegistryAccess.RegistryEntry<T> fromMapEntry(
            Entry<? extends ResourceKey<? extends Registry<?>>, R> e
        ) {
            return fromUntyped((ResourceKey<? extends Registry<?>>)e.getKey(), e.getValue());
        }
 
        private static <T> RegistryAccess.RegistryEntry<T> fromUntyped(ResourceKey<? extends Registry<?>> key, Registry<?> value) {
            return new RegistryAccess.RegistryEntry<>((ResourceKey<? extends Registry<T>>)key, (Registry<T>)value);
        }
 
        private RegistryAccess.RegistryEntry<T> freeze() {
            return new RegistryAccess.RegistryEntry<>(this.key, this.value.freeze());
        }
    }
}

引用的其他类