NbtContents.java
net.minecraft.network.chat.contents.NbtContents
信息
- 全限定名:net.minecraft.network.chat.contents.NbtContents
- 类型:public record
- 包:net.minecraft.network.chat.contents
- 源码路径:src/main/java/net/minecraft/network/chat/contents/NbtContents.java
- 起始行号:L30
- 实现:ComponentContents
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
NBT_PATH_CODEC- 类型:
Codec<CompilableString<NbtPathArgument.NbtPath>> - 修饰符:
public static final protected protected - 源码定位:
L34 - 说明:
TODO
- 类型:
-
MAP_CODEC- 类型:
MapCodec<NbtContents> - 修饰符:
public static final - 源码定位:
L46 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public MutableComponent resolve(ResolutionContext context, int recursionDepth) @ L58
- 方法名:resolve
- 源码定位:L58
- 返回类型:MutableComponent
- 修饰符:public
参数:
- context: ResolutionContext
- recursionDepth: int
说明:
TODO
public MapCodec<NbtContents> codec() @ L100
- 方法名:codec
- 源码定位:L100
- 返回类型:MapCodec
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public record NbtContents(
CompilableString<NbtPathArgument.NbtPath> nbtPath, boolean interpreting, boolean plain, Optional<Component> separator, DataSource dataSource
) implements ComponentContents {
private static final Logger LOGGER = LogUtils.getLogger();
public static final Codec<CompilableString<NbtPathArgument.NbtPath>> NBT_PATH_CODEC = CompilableString.codec(
new CompilableString.CommandParserHelper<NbtPathArgument.NbtPath>() {
protected NbtPathArgument.NbtPath parse(StringReader reader) throws CommandSyntaxException {
return new NbtPathArgument().parse(reader);
}
@Override
protected String errorMessage(String original, CommandSyntaxException exception) {
return "Invalid NBT path: " + original + ": " + exception.getMessage();
}
}
);
public static final MapCodec<NbtContents> MAP_CODEC = RecordCodecBuilder.<NbtContents>mapCodec(
i -> i.group(
NBT_PATH_CODEC.fieldOf("nbt").forGetter(NbtContents::nbtPath),
Codec.BOOL.lenientOptionalFieldOf("interpret", false).forGetter(NbtContents::interpreting),
Codec.BOOL.lenientOptionalFieldOf("plain", false).forGetter(NbtContents::plain),
ComponentSerialization.CODEC.lenientOptionalFieldOf("separator").forGetter(NbtContents::separator),
DataSources.CODEC.forGetter(NbtContents::dataSource)
)
.apply(i, NbtContents::new)
)
.validate(v -> v.interpreting && v.plain ? DataResult.error(() -> "'interpret' and 'plain' flags can't be both on") : DataResult.success(v));
@Override
public MutableComponent resolve(ResolutionContext context, int recursionDepth) throws CommandSyntaxException {
CommandSourceStack source = context.source();
if (source == null) {
return Component.empty();
} else {
Stream<Tag> elements = this.dataSource.getData(source).flatMap(t -> {
try {
return this.nbtPath.compiled().get(t).stream();
} catch (CommandSyntaxException var3x) {
return Stream.empty();
}
});
Component resolvedSeparator = DataFixUtils.orElse(
ComponentUtils.resolve(context, this.separator, recursionDepth), ComponentUtils.DEFAULT_NO_STYLE_SEPARATOR
);
if (this.interpreting) {
RegistryOps<Tag> registryOps = source.registryAccess().createSerializationContext(NbtOps.INSTANCE);
return elements.flatMap(tag -> {
try {
Component component = ComponentSerialization.CODEC.parse(registryOps, tag).getOrThrow();
return Stream.of(ComponentUtils.resolve(context, component, recursionDepth));
} catch (Exception var5x) {
LOGGER.warn("Failed to parse component: {}", tag, var5x);
return Stream.of();
}
}).reduce((left, right) -> left.append(resolvedSeparator).append(right)).orElseGet(Component::empty);
} else {
return elements.map(
tag -> {
TextComponentTagVisitor visitor = new TextComponentTagVisitor(
"", this.plain ? TextComponentTagVisitor.PlainStyling.INSTANCE : TextComponentTagVisitor.RichStyling.INSTANCE
);
return (MutableComponent)visitor.visit(tag);
}
)
.reduce((left, right) -> left.append(resolvedSeparator).append(right))
.orElseGet(Component::empty);
}
}
}
@Override
public MapCodec<NbtContents> codec() {
return MAP_CODEC;
}
}引用的其他类
-
- 引用位置:
字段/构造调用 - 关联成员:
NbtPathArgument()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
TextComponentTagVisitor()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.empty()
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ComponentUtils.resolve()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
CompilableString.codec()
- 引用位置: