Holder.java
net.minecraft.core.Holder
信息
- 全限定名:net.minecraft.core.Holder
- 类型:public interface
- 包:net.minecraft.core
- 源码路径:src/main/java/net/minecraft/core/Holder.java
- 起始行号:L16
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
net.minecraft.core.Holder.Direct- 类型:
record - 修饰符:
public - 源码定位:
L58 - 说明:
TODO
- 类型:
-
net.minecraft.core.Holder.Kind- 类型:
enum - 修饰符:
public static - 源码定位:
L125 - 说明:
TODO
- 类型:
-
net.minecraft.core.Holder.Reference- 类型:
class - 修饰符:
public static - 源码定位:
L130 - 说明:
TODO
- 类型:
-
net.minecraft.core.Holder.Reference.Type- 类型:
enum - 修饰符:
protected static - 源码定位:
L273 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
T value() @ L17
- 方法名:value
- 源码定位:L17
- 返回类型:T
- 修饰符:package-private
参数:
- 无
说明:
TODO
boolean isBound() @ L19
- 方法名:isBound
- 源码定位:L19
- 返回类型:boolean
- 修饰符:package-private
参数:
- 无
说明:
TODO
boolean areComponentsBound() @ L21
- 方法名:areComponentsBound
- 源码定位:L21
- 返回类型:boolean
- 修饰符:package-private
参数:
- 无
说明:
TODO
boolean is(Identifier key) @ L23
- 方法名:is
- 源码定位:L23
- 返回类型:boolean
- 修饰符:package-private
参数:
- key: Identifier
说明:
TODO
boolean is(ResourceKey<T> key) @ L25
- 方法名:is
- 源码定位:L25
- 返回类型:boolean
- 修饰符:package-private
参数:
- key: ResourceKey
说明:
TODO
boolean is(Predicate<ResourceKey<T>> predicate) @ L27
- 方法名:is
- 源码定位:L27
- 返回类型:boolean
- 修饰符:package-private
参数:
- predicate: Predicate<ResourceKey
>
说明:
TODO
boolean is(TagKey<T> tag) @ L29
- 方法名:is
- 源码定位:L29
- 返回类型:boolean
- 修饰符:package-private
参数:
- tag: TagKey
说明:
TODO
boolean is(Holder<T> holder) @ L31
- 方法名:is
- 源码定位:L31
- 返回类型:boolean
- 修饰符:package-private
参数:
- holder: Holder
说明:
TODO
Stream<TagKey<T>> tags() @ L34
- 方法名:tags
- 源码定位:L34
- 返回类型:Stream<TagKey
> - 修饰符:package-private
参数:
- 无
说明:
TODO
DataComponentMap components() @ L36
- 方法名:components
- 源码定位:L36
- 返回类型:DataComponentMap
- 修饰符:package-private
参数:
- 无
说明:
TODO
Either<ResourceKey<T>,T> unwrap() @ L38
- 方法名:unwrap
- 源码定位:L38
- 返回类型:Either<ResourceKey
,T> - 修饰符:package-private
参数:
- 无
说明:
TODO
Optional<ResourceKey<T>> unwrapKey() @ L40
- 方法名:unwrapKey
- 源码定位:L40
- 返回类型:Optional<ResourceKey
> - 修饰符:package-private
参数:
- 无
说明:
TODO
Holder.Kind kind() @ L42
- 方法名:kind
- 源码定位:L42
- 返回类型:Holder.Kind
- 修饰符:package-private
参数:
- 无
说明:
TODO
boolean canSerializeIn(HolderOwner<T> registry) @ L44
- 方法名:canSerializeIn
- 源码定位:L44
- 返回类型:boolean
- 修饰符:package-private
参数:
- registry: HolderOwner
说明:
TODO
default String getRegisteredName() @ L46
- 方法名:getRegisteredName
- 源码定位:L46
- 返回类型:String
- 修饰符:default
参数:
- 无
说明:
TODO
static <T> Holder<T> direct(T value) @ L50
- 方法名:direct
- 源码定位:L50
- 返回类型:
Holder - 修饰符:static
参数:
- value: T
说明:
TODO
static <T> Holder<T> direct(T value, DataComponentMap components) @ L54
- 方法名:direct
- 源码定位:L54
- 返回类型:
Holder - 修饰符:static
参数:
- value: T
- components: DataComponentMap
说明:
TODO
代码
public interface Holder<T> {
T value();
boolean isBound();
boolean areComponentsBound();
boolean is(Identifier key);
boolean is(ResourceKey<T> key);
boolean is(Predicate<ResourceKey<T>> predicate);
boolean is(TagKey<T> tag);
@Deprecated
boolean is(Holder<T> holder);
Stream<TagKey<T>> tags();
DataComponentMap components();
Either<ResourceKey<T>, T> unwrap();
Optional<ResourceKey<T>> unwrapKey();
Holder.Kind kind();
boolean canSerializeIn(HolderOwner<T> registry);
default String getRegisteredName() {
return this.unwrapKey().map(key -> key.identifier().toString()).orElse("[unregistered]");
}
static <T> Holder<T> direct(T value) {
return new Holder.Direct<>(value, DataComponentMap.EMPTY);
}
static <T> Holder<T> direct(T value, DataComponentMap components) {
return new Holder.Direct<>(value, components);
}
public record Direct<T>(T value, DataComponentMap components) implements Holder<T> {
@Override
public boolean isBound() {
return true;
}
@Override
public boolean areComponentsBound() {
return true;
}
@Override
public boolean is(Identifier key) {
return false;
}
@Override
public boolean is(ResourceKey<T> key) {
return false;
}
@Override
public boolean is(TagKey<T> tag) {
return false;
}
@Override
public boolean is(Holder<T> holder) {
return this.value.equals(holder.value());
}
@Override
public boolean is(Predicate<ResourceKey<T>> predicate) {
return false;
}
@Override
public Either<ResourceKey<T>, T> unwrap() {
return Either.right(this.value);
}
@Override
public Optional<ResourceKey<T>> unwrapKey() {
return Optional.empty();
}
@Override
public Holder.Kind kind() {
return Holder.Kind.DIRECT;
}
@Override
public String toString() {
return "Direct{" + this.value + "}";
}
@Override
public boolean canSerializeIn(HolderOwner<T> registry) {
return true;
}
@Override
public Stream<TagKey<T>> tags() {
return Stream.of();
}
}
public static enum Kind {
REFERENCE,
DIRECT;
}
public static class Reference<T> implements Holder<T> {
private final HolderOwner<T> owner;
private @Nullable Set<TagKey<T>> tags;
private @Nullable DataComponentMap components;
private final Holder.Reference.Type type;
private @Nullable ResourceKey<T> key;
private @Nullable T value;
protected Reference(Holder.Reference.Type type, HolderOwner<T> owner, @Nullable ResourceKey<T> key, @Nullable T value) {
this.owner = owner;
this.type = type;
this.key = key;
this.value = value;
}
public static <T> Holder.Reference<T> createStandAlone(HolderOwner<T> owner, ResourceKey<T> key) {
return new Holder.Reference<>(Holder.Reference.Type.STAND_ALONE, owner, key, null);
}
@Deprecated
public static <T> Holder.Reference<T> createIntrusive(HolderOwner<T> owner, @Nullable T value) {
return new Holder.Reference<>(Holder.Reference.Type.INTRUSIVE, owner, null, value);
}
public ResourceKey<T> key() {
if (this.key == null) {
throw new IllegalStateException("Trying to access unbound value '" + this.value + "' from registry " + this.owner);
} else {
return this.key;
}
}
@Override
public T value() {
if (this.value == null) {
throw new IllegalStateException("Trying to access unbound value '" + this.key + "' from registry " + this.owner);
} else {
return this.value;
}
}
@Override
public boolean is(Identifier key) {
return this.key().identifier().equals(key);
}
@Override
public boolean is(ResourceKey<T> key) {
return this.key() == key;
}
private Set<TagKey<T>> boundTags() {
if (this.tags == null) {
throw new IllegalStateException("Tags not bound");
} else {
return this.tags;
}
}
@Override
public boolean is(TagKey<T> tag) {
return this.boundTags().contains(tag);
}
@Override
public boolean is(Holder<T> holder) {
return holder.is(this.key());
}
@Override
public boolean is(Predicate<ResourceKey<T>> predicate) {
return predicate.test(this.key());
}
@Override
public boolean canSerializeIn(HolderOwner<T> context) {
return this.owner.canSerializeIn(context);
}
@Override
public Either<ResourceKey<T>, T> unwrap() {
return Either.left(this.key());
}
@Override
public Optional<ResourceKey<T>> unwrapKey() {
return Optional.of(this.key());
}
@Override
public Holder.Kind kind() {
return Holder.Kind.REFERENCE;
}
@Override
public boolean isBound() {
return this.key != null && this.value != null;
}
@Override
public boolean areComponentsBound() {
return this.components != null;
}
void bindKey(ResourceKey<T> key) {
if (this.key != null && key != this.key) {
throw new IllegalStateException("Can't change holder key: existing=" + this.key + ", new=" + key);
} else {
this.key = key;
}
}
protected void bindValue(T value) {
if (this.type == Holder.Reference.Type.INTRUSIVE && this.value != value) {
throw new IllegalStateException("Can't change holder " + this.key + " value: existing=" + this.value + ", new=" + value);
} else {
this.value = value;
}
}
void bindTags(Collection<TagKey<T>> tags) {
this.tags = Set.copyOf(tags);
}
public void bindComponents(DataComponentMap components) {
this.components = components;
}
@Override
public Stream<TagKey<T>> tags() {
return this.boundTags().stream();
}
@Override
public DataComponentMap components() {
return Objects.requireNonNull(this.components, "Components not bound yet");
}
@Override
public String toString() {
return "Reference{" + this.key + "=" + this.value + "}";
}
protected static enum Type {
STAND_ALONE,
INTRUSIVE;
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置: