TimeArgument.java

net.minecraft.commands.arguments.TimeArgument

信息

  • 全限定名:net.minecraft.commands.arguments.TimeArgument
  • 类型:public class
  • 包:net.minecraft.commands.arguments
  • 源码路径:src/main/java/net/minecraft/commands/arguments/TimeArgument.java
  • 起始行号:L24
  • 实现:ArgumentType
  • 职责:

    TODO

字段/常量

  • EXAMPLES

    • 类型: Collection<String>
    • 修饰符: private static final
    • 源码定位: L25
    • 说明:

      TODO

  • ERROR_INVALID_UNIT

    • 类型: SimpleCommandExceptionType
    • 修饰符: private static final
    • 源码定位: L26
    • 说明:

      TODO

  • ERROR_TICK_COUNT_TOO_LOW

    • 类型: Dynamic2CommandExceptionType
    • 修饰符: private static final
    • 源码定位: L27
    • 说明:

      TODO

  • UNITS

    • 类型: Object2IntMap<String>
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • minimum

    • 类型: int
    • 修饰符: private final
    • 源码定位: L31
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.commands.arguments.TimeArgument.Info

    • 类型: class
    • 修饰符: public static
    • 源码定位: L86
    • 说明:

      TODO

  • net.minecraft.commands.arguments.TimeArgument.Info.Template

    • 类型: class
    • 修饰符: public final
    • 源码定位: L104
    • 说明:

      TODO

构造器

private TimeArgument(int minimum) @ L33

  • 构造器名:TimeArgument
  • 源码定位:L33
  • 修饰符:private

参数:

  • minimum: int

说明:

TODO

方法

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

public static TimeArgument time() @ L37

  • 方法名:time
  • 源码定位:L37
  • 返回类型:TimeArgument
  • 修饰符:public static

参数:

说明:

TODO

public static TimeArgument time(int minimum) @ L41

  • 方法名:time
  • 源码定位:L41
  • 返回类型:TimeArgument
  • 修饰符:public static

参数:

  • minimum: int

说明:

TODO

public Integer parse(StringReader reader) @ L45

  • 方法名:parse
  • 源码定位:L45
  • 返回类型:Integer
  • 修饰符:public

参数:

  • reader: StringReader

说明:

TODO

public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) @ L61

  • 方法名:listSuggestions
  • 源码定位:L61
  • 返回类型: CompletableFuture
  • 修饰符:public

参数:

  • context: CommandContext
  • builder: SuggestionsBuilder

说明:

TODO

public Collection<String> getExamples() @ L74

  • 方法名:getExamples
  • 源码定位:L74
  • 返回类型:Collection
  • 修饰符:public

参数:

说明:

TODO

代码

public class TimeArgument implements ArgumentType<Integer> {
    private static final Collection<String> EXAMPLES = Arrays.asList("0d", "0s", "0t", "0");
    private static final SimpleCommandExceptionType ERROR_INVALID_UNIT = new SimpleCommandExceptionType(Component.translatable("argument.time.invalid_unit"));
    private static final Dynamic2CommandExceptionType ERROR_TICK_COUNT_TOO_LOW = new Dynamic2CommandExceptionType(
        (value, limit) -> Component.translatableEscape("argument.time.tick_count_too_low", limit, value)
    );
    private static final Object2IntMap<String> UNITS = new Object2IntOpenHashMap<>();
    private final int minimum;
 
    private TimeArgument(int minimum) {
        this.minimum = minimum;
    }
 
    public static TimeArgument time() {
        return new TimeArgument(0);
    }
 
    public static TimeArgument time(int minimum) {
        return new TimeArgument(minimum);
    }
 
    public Integer parse(StringReader reader) throws CommandSyntaxException {
        float value = reader.readFloat();
        String unit = reader.readUnquotedString();
        int factor = UNITS.getOrDefault(unit, 0);
        if (factor == 0) {
            throw ERROR_INVALID_UNIT.createWithContext(reader);
        } else {
            int ticks = Math.round(value * factor);
            if (ticks < this.minimum) {
                throw ERROR_TICK_COUNT_TOO_LOW.createWithContext(reader, ticks, this.minimum);
            } else {
                return ticks;
            }
        }
    }
 
    @Override
    public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
        StringReader reader = new StringReader(builder.getRemaining());
 
        try {
            reader.readFloat();
        } catch (CommandSyntaxException var5) {
            return builder.buildFuture();
        }
 
        return SharedSuggestionProvider.suggest(UNITS.keySet(), builder.createOffset(builder.getStart() + reader.getCursor()));
    }
 
    @Override
    public Collection<String> getExamples() {
        return EXAMPLES;
    }
 
    static {
        UNITS.put("d", 24000);
        UNITS.put("s", 20);
        UNITS.put("t", 1);
        UNITS.put("", 1);
    }
 
    public static class Info implements ArgumentTypeInfo<TimeArgument, TimeArgument.Info.Template> {
        public void serializeToNetwork(TimeArgument.Info.Template template, FriendlyByteBuf out) {
            out.writeInt(template.min);
        }
 
        public TimeArgument.Info.Template deserializeFromNetwork(FriendlyByteBuf in) {
            int min = in.readInt();
            return new TimeArgument.Info.Template(min);
        }
 
        public void serializeToJson(TimeArgument.Info.Template template, JsonObject out) {
            out.addProperty("min", template.min);
        }
 
        public TimeArgument.Info.Template unpack(TimeArgument argument) {
            return new TimeArgument.Info.Template(argument.minimum);
        }
 
        public final class Template implements ArgumentTypeInfo.Template<TimeArgument> {
            private final int min;
 
            private Template(int min) {
                Objects.requireNonNull(Info.this);
                super();
                this.min = min;
            }
 
            public TimeArgument instantiate(CommandBuildContext context) {
                return TimeArgument.time(this.min);
            }
 
            @Override
            public ArgumentTypeInfo<TimeArgument, ?> type() {
                return Info.this;
            }
        }
    }
}

引用的其他类

  • SharedSuggestionProvider

    • 引用位置: 方法调用
    • 关联成员: SharedSuggestionProvider.suggest()
  • Component

    • 引用位置: 方法调用
    • 关联成员: Component.translatable(), Component.translatableEscape()