ResourceKey.java

net.minecraft.resources.ResourceKey

信息

  • 全限定名:net.minecraft.resources.ResourceKey
  • 类型:public class
  • 包:net.minecraft.resources
  • 源码路径:src/main/java/net/minecraft/resources/ResourceKey.java
  • 起始行号:L12
  • 职责:

    TODO

字段/常量

  • VALUES

    • 类型: ConcurrentMap<ResourceKey.InternKey,ResourceKey<?>>
    • 修饰符: private static final
    • 源码定位: L13
    • 说明:

      TODO

  • registryName

    • 类型: Identifier
    • 修饰符: private final
    • 源码定位: L14
    • 说明:

      TODO

  • identifier

    • 类型: Identifier
    • 修饰符: private final
    • 源码定位: L15
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.resources.ResourceKey.InternKey
    • 类型: record
    • 修饰符: private
    • 源码定位: L67
    • 说明:

      TODO

构造器

private ResourceKey(Identifier registryName, Identifier identifier) @ L37

  • 构造器名:ResourceKey
  • 源码定位:L37
  • 修饰符:private

参数:

  • registryName: Identifier
  • identifier: Identifier

说明:

TODO

方法

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

public static <T> Codec<ResourceKey<T>> codec(ResourceKey<?extends Registry<T>> registryName) @ L17

  • 方法名:codec
  • 源码定位:L17
  • 返回类型: Codec<ResourceKey>
  • 修饰符:public static

参数:

  • registryName: ResourceKey<?extends Registry>

说明:

TODO

public static <T> StreamCodec<ByteBuf,ResourceKey<T>> streamCodec(ResourceKey<?extends Registry<T>> registryName) @ L21

  • 方法名:streamCodec
  • 源码定位:L21
  • 返回类型: StreamCodec<ByteBuf,ResourceKey>
  • 修饰符:public static

参数:

  • registryName: ResourceKey<?extends Registry>

说明:

TODO

public static <T> ResourceKey<T> create(ResourceKey<?extends Registry<T>> registryName, Identifier location) @ L25

  • 方法名:create
  • 源码定位:L25
  • 返回类型: ResourceKey
  • 修饰符:public static

参数:

  • registryName: ResourceKey<?extends Registry>
  • location: Identifier

说明:

TODO

public static <T> ResourceKey<Registry<T>> createRegistryKey(Identifier identifier) @ L29

  • 方法名:createRegistryKey
  • 源码定位:L29
  • 返回类型: ResourceKey<Registry>
  • 修饰符:public static

参数:

  • identifier: Identifier

说明:

TODO

private static <T> ResourceKey<T> create(Identifier registryName, Identifier identifier) @ L33

  • 方法名:create
  • 源码定位:L33
  • 返回类型: ResourceKey
  • 修饰符:private static

参数:

  • registryName: Identifier
  • identifier: Identifier

说明:

TODO

public String toString() @ L42

  • 方法名:toString
  • 源码定位:L42
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public boolean isFor(ResourceKey<?extends Registry<?>> registry) @ L47

  • 方法名:isFor
  • 源码定位:L47
  • 返回类型:boolean
  • 修饰符:public

参数:

  • registry: ResourceKey>

说明:

TODO

public <E> Optional<ResourceKey<E>> cast(ResourceKey<?extends Registry<E>> registry) @ L51

  • 方法名:cast
  • 源码定位:L51
  • 返回类型: Optional<ResourceKey>
  • 修饰符:public

参数:

  • registry: ResourceKey<?extends Registry>

说明:

TODO

public Identifier identifier() @ L55

  • 方法名:identifier
  • 源码定位:L55
  • 返回类型:Identifier
  • 修饰符:public

参数:

说明:

TODO

public Identifier registry() @ L59

  • 方法名:registry
  • 源码定位:L59
  • 返回类型:Identifier
  • 修饰符:public

参数:

说明:

TODO

public ResourceKey<Registry<T>> registryKey() @ L63

  • 方法名:registryKey
  • 源码定位:L63
  • 返回类型:ResourceKey<Registry>
  • 修饰符:public

参数:

说明:

TODO

代码

public class ResourceKey<T> {
    private static final ConcurrentMap<ResourceKey.InternKey, ResourceKey<?>> VALUES = new MapMaker().weakValues().makeMap();
    private final Identifier registryName;
    private final Identifier identifier;
 
    public static <T> Codec<ResourceKey<T>> codec(ResourceKey<? extends Registry<T>> registryName) {
        return Identifier.CODEC.xmap(name -> create(registryName, name), ResourceKey::identifier);
    }
 
    public static <T> StreamCodec<ByteBuf, ResourceKey<T>> streamCodec(ResourceKey<? extends Registry<T>> registryName) {
        return Identifier.STREAM_CODEC.map(name -> create(registryName, name), ResourceKey::identifier);
    }
 
    public static <T> ResourceKey<T> create(ResourceKey<? extends Registry<T>> registryName, Identifier location) {
        return create(registryName.identifier, location);
    }
 
    public static <T> ResourceKey<Registry<T>> createRegistryKey(Identifier identifier) {
        return create(Registries.ROOT_REGISTRY_NAME, identifier);
    }
 
    private static <T> ResourceKey<T> create(Identifier registryName, Identifier identifier) {
        return (ResourceKey<T>)VALUES.computeIfAbsent(new ResourceKey.InternKey(registryName, identifier), k -> new ResourceKey(k.registry, k.identifier));
    }
 
    private ResourceKey(Identifier registryName, Identifier identifier) {
        this.registryName = registryName;
        this.identifier = identifier;
    }
 
    @Override
    public String toString() {
        return "ResourceKey[" + this.registryName + " / " + this.identifier + "]";
    }
 
    public boolean isFor(ResourceKey<? extends Registry<?>> registry) {
        return this.registryName.equals(registry.identifier());
    }
 
    public <E> Optional<ResourceKey<E>> cast(ResourceKey<? extends Registry<E>> registry) {
        return this.isFor(registry) ? Optional.of((ResourceKey<E>)this) : Optional.empty();
    }
 
    public Identifier identifier() {
        return this.identifier;
    }
 
    public Identifier registry() {
        return this.registryName;
    }
 
    public ResourceKey<Registry<T>> registryKey() {
        return createRegistryKey(this.registryName);
    }
 
    private record InternKey(Identifier registry, Identifier identifier) {
    }
}

引用的其他类