DataComponentMap.java
net.minecraft.core.component.DataComponentMap
信息
- 全限定名:net.minecraft.core.component.DataComponentMap
- 类型:public interface
- 包:net.minecraft.core.component
- 源码路径:src/main/java/net/minecraft/core/component/DataComponentMap.java
- 起始行号:L23
- 继承:Iterable<TypedDataComponent<?>>, DataComponentGetter
- 职责:
TODO
字段/常量
-
EMPTY- 类型:
DataComponentMap - 修饰符:
public public public - 源码定位:
L24 - 说明:
TODO
- 类型:
-
CODEC- 类型:
Codec<DataComponentMap> - 修饰符:
package-private - 源码定位:
L40 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.core.component.DataComponentMap.Builder- 类型:
class - 修饰符:
public static - 源码定位:
L125 - 说明:
TODO
- 类型:
-
net.minecraft.core.component.DataComponentMap.Builder.SimpleMap- 类型:
record - 修饰符:
private - 源码定位:
L174 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
static Codec<DataComponentMap> makeCodec(Codec<DataComponentType<?>> componentTypeCodec) @ L42
- 方法名:makeCodec
- 源码定位:L42
- 返回类型:Codec
- 修饰符:static
参数:
- componentTypeCodec: Codec<DataComponentType<?>>
说明:
TODO
static Codec<DataComponentMap> makeCodecFromMap(Codec<Map<DataComponentType<?>,Object>> mapCodec) @ L46
- 方法名:makeCodecFromMap
- 源码定位:L46
- 返回类型:Codec
- 修饰符:static
参数:
- mapCodec: Codec<Map<DataComponentType<?>,Object>>
说明:
TODO
static DataComponentMap composite(DataComponentMap prototype, DataComponentMap overrides) @ L65
- 方法名:composite
- 源码定位:L65
- 返回类型:DataComponentMap
- 修饰符:static
参数:
- prototype: DataComponentMap
- overrides: DataComponentMap
说明:
TODO
static DataComponentMap.Builder builder() @ L80
- 方法名:builder
- 源码定位:L80
- 返回类型:DataComponentMap.Builder
- 修饰符:static
参数:
- 无
说明:
TODO
Set<DataComponentType<?>> keySet() @ L84
- 方法名:keySet
- 源码定位:L84
- 返回类型:Set<DataComponentType<?>>
- 修饰符:package-private
参数:
- 无
说明:
TODO
default boolean has(DataComponentType<?> type) @ L86
- 方法名:has
- 源码定位:L86
- 返回类型:boolean
- 修饰符:default
参数:
- type: DataComponentType<?>
说明:
TODO
default Iterator<TypedDataComponent<?>> iterator() @ L90
- 方法名:iterator
- 源码定位:L90
- 返回类型:Iterator<TypedDataComponent<?>>
- 修饰符:default
参数:
- 无
说明:
TODO
default Stream<TypedDataComponent<?>> stream() @ L95
- 方法名:stream
- 源码定位:L95
- 返回类型:Stream<TypedDataComponent<?>>
- 修饰符:default
参数:
- 无
说明:
TODO
default int size() @ L99
- 方法名:size
- 源码定位:L99
- 返回类型:int
- 修饰符:default
参数:
- 无
说明:
TODO
default boolean isEmpty() @ L103
- 方法名:isEmpty
- 源码定位:L103
- 返回类型:boolean
- 修饰符:default
参数:
- 无
说明:
TODO
default DataComponentMap filter(Predicate<DataComponentType<?>> predicate) @ L107
- 方法名:filter
- 源码定位:L107
- 返回类型:DataComponentMap
- 修饰符:default
参数:
- predicate: Predicate<DataComponentType<?>>
说明:
TODO
代码
public interface DataComponentMap extends Iterable<TypedDataComponent<?>>, DataComponentGetter {
DataComponentMap EMPTY = new DataComponentMap() {
@Override
public <T> @Nullable T get(DataComponentType<? extends T> type) {
return null;
}
@Override
public Set<DataComponentType<?>> keySet() {
return Set.of();
}
@Override
public Iterator<TypedDataComponent<?>> iterator() {
return Collections.emptyIterator();
}
};
Codec<DataComponentMap> CODEC = makeCodecFromMap(DataComponentType.VALUE_MAP_CODEC);
static Codec<DataComponentMap> makeCodec(Codec<DataComponentType<?>> componentTypeCodec) {
return makeCodecFromMap(Codec.dispatchedMap(componentTypeCodec, DataComponentType::codecOrThrow));
}
static Codec<DataComponentMap> makeCodecFromMap(Codec<Map<DataComponentType<?>, Object>> mapCodec) {
return mapCodec.flatComapMap(DataComponentMap.Builder::buildFromMapTrusted, components -> {
int size = components.size();
if (size == 0) {
return DataResult.success(Reference2ObjectMaps.emptyMap());
} else {
Reference2ObjectMap<DataComponentType<?>, Object> map = new Reference2ObjectArrayMap<>(size);
for (TypedDataComponent<?> entry : components) {
if (!entry.type().isTransient()) {
map.put(entry.type(), entry.value());
}
}
return DataResult.success(map);
}
});
}
static DataComponentMap composite(DataComponentMap prototype, DataComponentMap overrides) {
return new DataComponentMap() {
@Override
public <T> @Nullable T get(DataComponentType<? extends T> type) {
T value = overrides.get(type);
return value != null ? value : prototype.get(type);
}
@Override
public Set<DataComponentType<?>> keySet() {
return Sets.union(prototype.keySet(), overrides.keySet());
}
};
}
static DataComponentMap.Builder builder() {
return new DataComponentMap.Builder();
}
Set<DataComponentType<?>> keySet();
default boolean has(DataComponentType<?> type) {
return this.get(type) != null;
}
@Override
default Iterator<TypedDataComponent<?>> iterator() {
return Iterators.transform(this.keySet().iterator(), type -> Objects.requireNonNull(this.getTyped((DataComponentType<?>)type)));
}
default Stream<TypedDataComponent<?>> stream() {
return StreamSupport.stream(Spliterators.spliterator(this.iterator(), (long)this.size(), 1345), false);
}
default int size() {
return this.keySet().size();
}
default boolean isEmpty() {
return this.size() == 0;
}
default DataComponentMap filter(Predicate<DataComponentType<?>> predicate) {
return new DataComponentMap() {
{
Objects.requireNonNull(DataComponentMap.this);
}
@Override
public <T> @Nullable T get(DataComponentType<? extends T> type) {
return predicate.test(type) ? DataComponentMap.this.get(type) : null;
}
@Override
public Set<DataComponentType<?>> keySet() {
return Sets.filter(DataComponentMap.this.keySet(), predicate::test);
}
};
}
public static class Builder {
private final Reference2ObjectMap<DataComponentType<?>, Object> map = new Reference2ObjectArrayMap<>();
private Consumer<DataComponentMap> validator = components -> {};
private Builder() {
}
public <T> DataComponentMap.Builder set(DataComponentType<T> type, @Nullable T value) {
this.setUnchecked(type, value);
return this;
}
<T> void setUnchecked(DataComponentType<T> type, @Nullable Object value) {
if (value != null) {
this.map.put(type, value);
} else {
this.map.remove(type);
}
}
public DataComponentMap.Builder addAll(DataComponentMap map) {
for (TypedDataComponent<?> entry : map) {
this.map.put(entry.type(), entry.value());
}
return this;
}
public DataComponentMap.Builder addValidator(Consumer<DataComponentMap> newValidator) {
this.validator = this.validator.andThen(newValidator);
return this;
}
public DataComponentMap build() {
DataComponentMap result = buildFromMapTrusted(this.map);
this.validator.accept(result);
return result;
}
private static DataComponentMap buildFromMapTrusted(Map<DataComponentType<?>, Object> map) {
if (map.isEmpty()) {
return DataComponentMap.EMPTY;
} else {
return map.size() < 8
? new DataComponentMap.Builder.SimpleMap(new Reference2ObjectArrayMap<>(map))
: new DataComponentMap.Builder.SimpleMap(new Reference2ObjectOpenHashMap<>(map));
}
}
private record SimpleMap(Reference2ObjectMap<DataComponentType<?>, Object> map) implements DataComponentMap {
@Override
public <T> @Nullable T get(DataComponentType<? extends T> type) {
return (T)this.map.get(type);
}
@Override
public boolean has(DataComponentType<?> type) {
return this.map.containsKey(type);
}
@Override
public Set<DataComponentType<?>> keySet() {
return this.map.keySet();
}
@Override
public Iterator<TypedDataComponent<?>> iterator() {
return Iterators.transform(Reference2ObjectMaps.fastIterator(this.map), TypedDataComponent::fromEntryUnchecked);
}
@Override
public int size() {
return this.map.size();
}
@Override
public String toString() {
return this.map.toString();
}
}
}
}引用的其他类
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
继承/返回值
- 引用位置: