AngleArgument.java

net.minecraft.commands.arguments.AngleArgument

信息

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

    TODO

字段/常量

  • EXAMPLES

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

      TODO

  • ERROR_NOT_COMPLETE

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

      TODO

  • ERROR_INVALID_ANGLE

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

      TODO

内部类/嵌套类型

  • net.minecraft.commands.arguments.AngleArgument.SingleAngle
    • 类型: class
    • 修饰符: public static final
    • 源码定位: L47
    • 说明:

      TODO

构造器

方法

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

public static AngleArgument angle() @ L20

  • 方法名:angle
  • 源码定位:L20
  • 返回类型:AngleArgument
  • 修饰符:public static

参数:

说明:

TODO

public static float getAngle(CommandContext<CommandSourceStack> context, String name) @ L24

  • 方法名:getAngle
  • 源码定位:L24
  • 返回类型:float
  • 修饰符:public static

参数:

  • context: CommandContext
  • name: String

说明:

TODO

public AngleArgument.SingleAngle parse(StringReader reader) @ L28

  • 方法名:parse
  • 源码定位:L28
  • 返回类型:AngleArgument.SingleAngle
  • 修饰符:public

参数:

  • reader: StringReader

说明:

TODO

public Collection<String> getExamples() @ L42

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

参数:

说明:

TODO

代码

public class AngleArgument implements ArgumentType<AngleArgument.SingleAngle> {
    private static final Collection<String> EXAMPLES = Arrays.asList("0", "~", "~-5");
    public static final SimpleCommandExceptionType ERROR_NOT_COMPLETE = new SimpleCommandExceptionType(Component.translatable("argument.angle.incomplete"));
    public static final SimpleCommandExceptionType ERROR_INVALID_ANGLE = new SimpleCommandExceptionType(Component.translatable("argument.angle.invalid"));
 
    public static AngleArgument angle() {
        return new AngleArgument();
    }
 
    public static float getAngle(CommandContext<CommandSourceStack> context, String name) {
        return context.getArgument(name, AngleArgument.SingleAngle.class).getAngle(context.getSource());
    }
 
    public AngleArgument.SingleAngle parse(StringReader reader) throws CommandSyntaxException {
        if (!reader.canRead()) {
            throw ERROR_NOT_COMPLETE.createWithContext(reader);
        } else {
            boolean isRelative = WorldCoordinate.isRelative(reader);
            float value = reader.canRead() && reader.peek() != ' ' ? reader.readFloat() : 0.0F;
            if (!Float.isNaN(value) && !Float.isInfinite(value)) {
                return new AngleArgument.SingleAngle(value, isRelative);
            } else {
                throw ERROR_INVALID_ANGLE.createWithContext(reader);
            }
        }
    }
 
    @Override
    public Collection<String> getExamples() {
        return EXAMPLES;
    }
 
    public static final class SingleAngle {
        private final float angle;
        private final boolean isRelative;
 
        private SingleAngle(float angle, boolean isRelative) {
            this.angle = angle;
            this.isRelative = isRelative;
        }
 
        public float getAngle(CommandSourceStack sender) {
            return Mth.wrapDegrees(this.isRelative ? this.angle + sender.getRotation().y : this.angle);
        }
    }
}

引用的其他类

  • CommandSourceStack

    • 引用位置: 参数
  • WorldCoordinate

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

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

    • 引用位置: 方法调用
    • 关联成员: Mth.wrapDegrees()