ScoreContents.java

net.minecraft.network.chat.contents.ScoreContents

信息

  • 全限定名:net.minecraft.network.chat.contents.ScoreContents
  • 类型:public record
  • 包:net.minecraft.network.chat.contents
  • 源码路径:src/main/java/net/minecraft/network/chat/contents/ScoreContents.java
  • 起始行号:L26
  • 实现:ComponentContents
  • 职责:

    TODO

字段/常量

  • INNER_CODEC

    • 类型: MapCodec<ScoreContents>
    • 修饰符: public static final
    • 源码定位: L27
    • 说明:

      TODO

  • MAP_CODEC

    • 类型: MapCodec<ScoreContents>
    • 修饰符: public static final
    • 源码定位: L34
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public MapCodec<ScoreContents> codec() @ L36

  • 方法名:codec
  • 源码定位:L36
  • 返回类型:MapCodec
  • 修饰符:public

参数:

说明:

TODO

private ScoreHolder findTargetName(CommandSourceStack source) @ L41

  • 方法名:findTargetName
  • 源码定位:L41
  • 返回类型:ScoreHolder
  • 修饰符:private

参数:

  • source: CommandSourceStack

说明:

TODO

private MutableComponent getScore(ScoreHolder name, CommandSourceStack source) @ L59

  • 方法名:getScore
  • 源码定位:L59
  • 返回类型:MutableComponent
  • 修饰符:private

参数:

  • name: ScoreHolder
  • source: CommandSourceStack

说明:

TODO

public MutableComponent resolve(ResolutionContext context, int recursionDepth) @ L75

  • 方法名:resolve
  • 源码定位:L75
  • 返回类型:MutableComponent
  • 修饰符:public

参数:

  • context: ResolutionContext
  • recursionDepth: int

说明:

TODO

public String toString() @ L88

  • 方法名:toString
  • 源码定位:L88
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

代码

public record ScoreContents(Either<CompilableString<EntitySelector>, String> name, String objective) implements ComponentContents {
    public static final MapCodec<ScoreContents> INNER_CODEC = RecordCodecBuilder.mapCodec(
        i -> i.group(
                Codec.either(EntitySelector.COMPILABLE_CODEC, Codec.STRING).fieldOf("name").forGetter(ScoreContents::name),
                Codec.STRING.fieldOf("objective").forGetter(ScoreContents::objective)
            )
            .apply(i, ScoreContents::new)
    );
    public static final MapCodec<ScoreContents> MAP_CODEC = INNER_CODEC.fieldOf("score");
 
    @Override
    public MapCodec<ScoreContents> codec() {
        return MAP_CODEC;
    }
 
    private ScoreHolder findTargetName(CommandSourceStack source) throws CommandSyntaxException {
        Optional<CompilableString<EntitySelector>> selector = this.name.left();
        if (selector.isPresent()) {
            List<? extends Entity> entities = selector.get().compiled().findEntities(source);
            if (!entities.isEmpty()) {
                if (entities.size() != 1) {
                    throw EntityArgument.ERROR_NOT_SINGLE_ENTITY.create();
                } else {
                    return entities.getFirst();
                }
            } else {
                return ScoreHolder.forNameOnly(selector.get().source());
            }
        } else {
            return ScoreHolder.forNameOnly(this.name.right().orElseThrow());
        }
    }
 
    private MutableComponent getScore(ScoreHolder name, CommandSourceStack source) {
        MinecraftServer server = source.getServer();
        if (server != null) {
            Scoreboard scoreboard = server.getScoreboard();
            Objective objective = scoreboard.getObjective(this.objective);
            if (objective != null) {
                ReadOnlyScoreInfo scoreInfo = scoreboard.getPlayerScoreInfo(name, objective);
                if (scoreInfo != null) {
                    return scoreInfo.formatValue(objective.numberFormatOrDefault(StyledFormat.NO_STYLE));
                }
            }
        }
 
        return Component.empty();
    }
 
    @Override
    public MutableComponent resolve(ResolutionContext context, int recursionDepth) throws CommandSyntaxException {
        CommandSourceStack source = context.source();
        if (source == null) {
            return Component.empty();
        } else {
            ScoreHolder scoreHolder = this.findTargetName(source);
            Entity entity = context.defaultScoreboardEntity();
            ScoreHolder scoreName = (ScoreHolder)(entity != null && scoreHolder.equals(ScoreHolder.WILDCARD) ? entity : scoreHolder);
            return this.getScore(scoreName, source);
        }
    }
 
    @Override
    public String toString() {
        return "score{name='" + this.name + "', objective='" + this.objective + "'}";
    }
}

引用的其他类