StringRepresentable.java
net.minecraft.util.StringRepresentable
信息
- 全限定名:net.minecraft.util.StringRepresentable
- 类型:public interface
- 包:net.minecraft.util
- 源码路径:src/main/java/net/minecraft/util/StringRepresentable.java
- 起始行号:L18
- 职责:
TODO
字段/常量
PRE_BUILT_MAP_THRESHOLD- 类型:
int - 修饰符:
package-private - 源码定位:
L19 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.util.StringRepresentable.EnumCodec- 类型:
class - 修饰符:
public static - 源码定位:
L72 - 说明:
TODO
- 类型:
-
net.minecraft.util.StringRepresentable.StringRepresentableCodec- 类型:
class - 修饰符:
public static - 源码定位:
L93 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
String getSerializedName() @ L21
- 方法名:getSerializedName
- 源码定位:L21
- 返回类型:String
- 修饰符:package-private
参数:
- 无
说明:
TODO
static <E extends Enum<E> &StringRepresentable> StringRepresentable.EnumCodec<E> fromEnum(Supplier<E[]> values) @ L23
- 方法名:fromEnum
- 源码定位:L23
- 返回类型:<E extends Enum
&StringRepresentable> StringRepresentable.EnumCodec - 修饰符:static
参数:
- values: Supplier<E[]>
说明:
TODO
static <E extends Enum<E> &StringRepresentable> StringRepresentable.EnumCodec<E> fromEnumWithMapping(Supplier<E[]> values, Function<String,String> converter) @ L27
- 方法名:fromEnumWithMapping
- 源码定位:L27
- 返回类型:<E extends Enum
&StringRepresentable> StringRepresentable.EnumCodec - 修饰符:static
参数:
- values: Supplier<E[]>
- converter: Function<String,String>
说明:
TODO
static <T extends StringRepresentable> Codec<T> fromValues(Supplier<T[]> values) @ L35
- 方法名:fromValues
- 源码定位:L35
- 返回类型:
Codec - 修饰符:static
参数:
- values: Supplier<T[]>
说明:
TODO
static <T extends StringRepresentable> Function<String,T> createNameLookup(T[] valueArray) @ L42
- 方法名:createNameLookup
- 源码定位:L42
- 返回类型:
Function<String,T> - 修饰符:static
参数:
- valueArray: T[]
说明:
TODO
static <T> Function<String,T> createNameLookup(T[] valueArray, Function<T,String> converter) @ L46
- 方法名:createNameLookup
- 源码定位:L46
- 返回类型:
Function<String,T> - 修饰符:static
参数:
- valueArray: T[]
- converter: Function<T,String>
说明:
TODO
static Keyable keys(StringRepresentable[] values) @ L63
- 方法名:keys
- 源码定位:L63
- 返回类型:Keyable
- 修饰符:static
参数:
- values: StringRepresentable[]
说明:
TODO
代码
public interface StringRepresentable {
int PRE_BUILT_MAP_THRESHOLD = 16;
String getSerializedName();
static <E extends Enum<E> & StringRepresentable> StringRepresentable.EnumCodec<E> fromEnum(Supplier<E[]> values) {
return fromEnumWithMapping(values, s -> s);
}
static <E extends Enum<E> & StringRepresentable> StringRepresentable.EnumCodec<E> fromEnumWithMapping(
Supplier<E[]> values, Function<String, String> converter
) {
E[] valueArray = (E[])values.get();
Function<String, E> lookupFunction = createNameLookup(valueArray, e -> converter.apply(e.getSerializedName()));
return new StringRepresentable.EnumCodec<>(valueArray, lookupFunction);
}
static <T extends StringRepresentable> Codec<T> fromValues(Supplier<T[]> values) {
T[] valueArray = (T[])values.get();
Function<String, T> lookupFunction = createNameLookup(valueArray);
ToIntFunction<T> indexLookup = Util.createIndexLookup(Arrays.asList(valueArray));
return new StringRepresentable.StringRepresentableCodec<>(valueArray, lookupFunction, indexLookup);
}
static <T extends StringRepresentable> Function<String, @Nullable T> createNameLookup(T[] valueArray) {
return createNameLookup(valueArray, StringRepresentable::getSerializedName);
}
static <T> Function<String, @Nullable T> createNameLookup(T[] valueArray, Function<T, String> converter) {
if (valueArray.length > 16) {
Map<String, T> byName = Arrays.<T>stream(valueArray).collect(Collectors.toMap(converter, d -> (T)d));
return byName::get;
} else {
return id -> {
for (T value : valueArray) {
if (converter.apply(value).equals(id)) {
return value;
}
}
return null;
};
}
}
static Keyable keys(StringRepresentable[] values) {
return new Keyable() {
@Override
public <T> Stream<T> keys(DynamicOps<T> ops) {
return Arrays.stream(values).map(StringRepresentable::getSerializedName).map(ops::createString);
}
};
}
public static class EnumCodec<E extends Enum<E> & StringRepresentable> extends StringRepresentable.StringRepresentableCodec<E> {
private final Function<String, @Nullable E> resolver;
public EnumCodec(E[] valueArray, Function<String, E> nameResolver) {
super(valueArray, nameResolver, rec$ -> rec$.ordinal());
this.resolver = nameResolver;
}
public @Nullable E byName(String name) {
return this.resolver.apply(name);
}
public E byName(String name, E _default) {
return Objects.requireNonNullElse(this.byName(name), _default);
}
public E byName(String name, Supplier<? extends E> defaultSupplier) {
return Objects.requireNonNullElseGet(this.byName(name), defaultSupplier);
}
}
public static class StringRepresentableCodec<S extends StringRepresentable> implements Codec<S> {
private final Codec<S> codec;
public StringRepresentableCodec(S[] valueArray, Function<String, @Nullable S> nameResolver, ToIntFunction<S> idResolver) {
this.codec = ExtraCodecs.orCompressed(
Codec.stringResolver(StringRepresentable::getSerializedName, nameResolver),
ExtraCodecs.idResolverCodec(idResolver, i -> i >= 0 && i < valueArray.length ? valueArray[i] : null, -1)
);
}
@Override
public <T> DataResult<Pair<S, T>> decode(DynamicOps<T> ops, T input) {
return this.codec.decode(ops, input);
}
public <T> DataResult<T> encode(S input, DynamicOps<T> ops, T prefix) {
return this.codec.encode(input, ops, prefix);
}
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExtraCodecs.idResolverCodec(), ExtraCodecs.orCompressed()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.createIndexLookup()
- 引用位置: