HolderSet.java
net.minecraft.core.HolderSet
信息
- 全限定名:net.minecraft.core.HolderSet
- 类型:public interface
- 包:net.minecraft.core
- 源码路径:src/main/java/net/minecraft/core/HolderSet.java
- 起始行号:L18
- 继承:Iterable<Holder
> - 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
net.minecraft.core.HolderSet.Direct- 类型:
class - 修饰符:
public static final - 源码定位:
L70 - 说明:
TODO
- 类型:
-
net.minecraft.core.HolderSet.ListBacked- 类型:
class - 修饰符:
public abstract static - 源码定位:
L124 - 说明:
TODO
- 类型:
-
net.minecraft.core.HolderSet.Named- 类型:
class - 修饰符:
public static - 源码定位:
L163 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
Stream<Holder<T>> stream() @ L19
- 方法名:stream
- 源码定位:L19
- 返回类型:Stream<Holder
> - 修饰符:package-private
参数:
- 无
说明:
TODO
int size() @ L21
- 方法名:size
- 源码定位:L21
- 返回类型:int
- 修饰符:package-private
参数:
- 无
说明:
TODO
boolean isBound() @ L23
- 方法名:isBound
- 源码定位:L23
- 返回类型:boolean
- 修饰符:package-private
参数:
- 无
说明:
TODO
Either<TagKey<T>,List<Holder<T>>> unwrap() @ L25
- 方法名:unwrap
- 源码定位:L25
- 返回类型:Either<TagKey
,List<Holder >> - 修饰符:package-private
参数:
- 无
说明:
TODO
Optional<Holder<T>> getRandomElement(RandomSource random) @ L27
- 方法名:getRandomElement
- 源码定位:L27
- 返回类型:Optional<Holder
> - 修饰符:package-private
参数:
- random: RandomSource
说明:
TODO
Holder<T> get(int index) @ L29
- 方法名:get
- 源码定位:L29
- 返回类型:Holder
- 修饰符:package-private
参数:
- index: int
说明:
TODO
boolean contains(Holder<T> value) @ L31
- 方法名:contains
- 源码定位:L31
- 返回类型:boolean
- 修饰符:package-private
参数:
- value: Holder
说明:
TODO
boolean canSerializeIn(HolderOwner<T> owner) @ L33
- 方法名:canSerializeIn
- 源码定位:L33
- 返回类型:boolean
- 修饰符:package-private
参数:
- owner: HolderOwner
说明:
TODO
Optional<TagKey<T>> unwrapKey() @ L35
- 方法名:unwrapKey
- 源码定位:L35
- 返回类型:Optional<TagKey
> - 修饰符:package-private
参数:
- 无
说明:
TODO
static <T> HolderSet.Named<T> emptyNamed(HolderOwner<T> owner, TagKey<T> key) @ L37
- 方法名:emptyNamed
- 源码定位:L37
- 返回类型:
HolderSet.Named - 修饰符:static
参数:
- owner: HolderOwner
- key: TagKey
说明:
TODO
static <T> HolderSet<T> empty() @ L48
- 方法名:empty
- 源码定位:L48
- 返回类型:
HolderSet - 修饰符:static
参数:
- 无
说明:
TODO
static <T> HolderSet.Direct<T> direct(Holder<T>... values) @ L52
- 方法名:direct
- 源码定位:L52
- 返回类型:
HolderSet.Direct - 修饰符:static
参数:
- values: Holder
…
说明:
TODO
static <T> HolderSet.Direct<T> direct(List<?extends Holder<T>> values) @ L57
- 方法名:direct
- 源码定位:L57
- 返回类型:
HolderSet.Direct - 修饰符:static
参数:
- values: List<?extends Holder
>
说明:
TODO
static <E,T> HolderSet.Direct<T> direct(Function<E,Holder<T>> holderGetter, E... elements) @ L61
- 方法名:direct
- 源码定位:L61
- 返回类型:<E,T> HolderSet.Direct
- 修饰符:static
参数:
- holderGetter: Function<E,Holder
> - elements: E…
说明:
TODO
static <E,T> HolderSet.Direct<T> direct(Function<E,Holder<T>> holderGetter, Collection<E> elements) @ L66
- 方法名:direct
- 源码定位:L66
- 返回类型:<E,T> HolderSet.Direct
- 修饰符:static
参数:
- holderGetter: Function<E,Holder
> - elements: Collection
说明:
TODO
代码
public interface HolderSet<T> extends Iterable<Holder<T>> {
Stream<Holder<T>> stream();
int size();
boolean isBound();
Either<TagKey<T>, List<Holder<T>>> unwrap();
Optional<Holder<T>> getRandomElement(RandomSource random);
Holder<T> get(int index);
boolean contains(final Holder<T> value);
boolean canSerializeIn(HolderOwner<T> owner);
Optional<TagKey<T>> unwrapKey();
@Deprecated
@VisibleForTesting
static <T> HolderSet.Named<T> emptyNamed(HolderOwner<T> owner, TagKey<T> key) {
return new HolderSet.Named<T>(owner, key) {
@Override
protected List<Holder<T>> contents() {
throw new UnsupportedOperationException("Tag " + this.key() + " can't be dereferenced during construction");
}
};
}
static <T> HolderSet<T> empty() {
return (HolderSet<T>)HolderSet.Direct.EMPTY;
}
@SafeVarargs
static <T> HolderSet.Direct<T> direct(Holder<T>... values) {
return new HolderSet.Direct<>(List.of(values));
}
static <T> HolderSet.Direct<T> direct(List<? extends Holder<T>> values) {
return new HolderSet.Direct<>(List.copyOf(values));
}
@SafeVarargs
static <E, T> HolderSet.Direct<T> direct(Function<E, Holder<T>> holderGetter, E... elements) {
return direct(Stream.of(elements).map(holderGetter).toList());
}
static <E, T> HolderSet.Direct<T> direct(Function<E, Holder<T>> holderGetter, Collection<E> elements) {
return direct(elements.stream().map(holderGetter).toList());
}
public static final class Direct<T> extends HolderSet.ListBacked<T> {
private static final HolderSet.Direct<?> EMPTY = new HolderSet.Direct(List.of());
private final List<Holder<T>> contents;
private @Nullable Set<Holder<T>> contentsSet;
private Direct(List<Holder<T>> contents) {
this.contents = contents;
}
@Override
protected List<Holder<T>> contents() {
return this.contents;
}
@Override
public boolean isBound() {
return true;
}
@Override
public Either<TagKey<T>, List<Holder<T>>> unwrap() {
return Either.right(this.contents);
}
@Override
public Optional<TagKey<T>> unwrapKey() {
return Optional.empty();
}
@Override
public boolean contains(Holder<T> value) {
if (this.contentsSet == null) {
this.contentsSet = Set.copyOf(this.contents);
}
return this.contentsSet.contains(value);
}
@Override
public String toString() {
return "DirectSet[" + this.contents + "]";
}
@Override
public boolean equals(Object obj) {
return this == obj ? true : obj instanceof HolderSet.Direct<?> direct && this.contents.equals(direct.contents);
}
@Override
public int hashCode() {
return this.contents.hashCode();
}
}
public abstract static class ListBacked<T> implements HolderSet<T> {
protected abstract List<Holder<T>> contents();
@Override
public int size() {
return this.contents().size();
}
@Override
public Spliterator<Holder<T>> spliterator() {
return this.contents().spliterator();
}
@Override
public Iterator<Holder<T>> iterator() {
return this.contents().iterator();
}
@Override
public Stream<Holder<T>> stream() {
return this.contents().stream();
}
@Override
public Optional<Holder<T>> getRandomElement(RandomSource random) {
return Util.getRandomSafe(this.contents(), random);
}
@Override
public Holder<T> get(int index) {
return this.contents().get(index);
}
@Override
public boolean canSerializeIn(HolderOwner<T> owner) {
return true;
}
}
public static class Named<T> extends HolderSet.ListBacked<T> {
private final HolderOwner<T> owner;
private final TagKey<T> key;
private @Nullable List<Holder<T>> contents;
Named(HolderOwner<T> owner, TagKey<T> key) {
this.owner = owner;
this.key = key;
}
void bind(List<Holder<T>> contents) {
this.contents = List.copyOf(contents);
}
public TagKey<T> key() {
return this.key;
}
@Override
protected List<Holder<T>> contents() {
if (this.contents == null) {
throw new IllegalStateException("Trying to access unbound tag '" + this.key + "' from registry " + this.owner);
} else {
return this.contents;
}
}
@Override
public boolean isBound() {
return this.contents != null;
}
@Override
public Either<TagKey<T>, List<Holder<T>>> unwrap() {
return Either.left(this.key);
}
@Override
public Optional<TagKey<T>> unwrapKey() {
return Optional.of(this.key);
}
@Override
public boolean contains(Holder<T> value) {
return value.is(this.key);
}
@Override
public String toString() {
return "NamedSet(" + this.key + ")[" + this.contents + "]";
}
@Override
public boolean canSerializeIn(HolderOwner<T> context) {
return this.owner.canSerializeIn(context);
}
}
}引用的其他类
-
- 引用位置:
参数/继承/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getRandomSafe()
- 引用位置: