ArgumentUtils.java
net.minecraft.commands.synchronization.ArgumentUtils
信息
- 全限定名:net.minecraft.commands.synchronization.ArgumentUtils
- 类型:public class
- 包:net.minecraft.commands.synchronization
- 源码路径:src/main/java/net/minecraft/commands/synchronization/ArgumentUtils.java
- 起始行号:L23
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
NUMBER_FLAG_MIN- 类型:
byte - 修饰符:
private static final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
NUMBER_FLAG_MAX- 类型:
byte - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static int createNumberFlags(boolean hasMin, boolean hasMax) @ L28
- 方法名:createNumberFlags
- 源码定位:L28
- 返回类型:int
- 修饰符:public static
参数:
- hasMin: boolean
- hasMax: boolean
说明:
TODO
public static boolean numberHasMin(byte flags) @ L41
- 方法名:numberHasMin
- 源码定位:L41
- 返回类型:boolean
- 修饰符:public static
参数:
- flags: byte
说明:
TODO
public static boolean numberHasMax(byte flags) @ L45
- 方法名:numberHasMax
- 源码定位:L45
- 返回类型:boolean
- 修饰符:public static
参数:
- flags: byte
说明:
TODO
private static <A extends ArgumentType<?>,T extends ArgumentTypeInfo.Template<A>> void serializeArgumentCap(JsonObject result, ArgumentTypeInfo<A,T> info, ArgumentTypeInfo.Template<A> argumentType) @ L49
- 方法名:serializeArgumentCap
- 源码定位:L49
- 返回类型:<A extends ArgumentType<?>,T extends ArgumentTypeInfo.Template> void
- 修饰符:private static
参数:
说明:
TODO
private static <T extends ArgumentType<?>> void serializeArgumentToJson(JsonObject result, T argument) @ L55
- 方法名:serializeArgumentToJson
- 源码定位:L55
- 返回类型:<T extends ArgumentType<?>> void
- 修饰符:private static
参数:
- result: JsonObject
- argument: T
说明:
TODO
public static <S> JsonObject serializeNodeToJson(CommandDispatcher<S> dispatcher, CommandNode<S> node) @ L66
- 方法名:serializeNodeToJson
- 源码定位:L66
- 返回类型:
JsonObject - 修饰符:public static
参数:
- dispatcher: CommandDispatcher
- node: CommandNode
说明:
TODO
public static <T> Set<ArgumentType<?>> findUsedArgumentTypes(CommandNode<T> node) @ L121
- 方法名:findUsedArgumentTypes
- 源码定位:L121
- 返回类型:
Set<ArgumentType<?>> - 修饰符:public static
参数:
- node: CommandNode
说明:
TODO
private static <T> void findUsedArgumentTypes(CommandNode<T> node, Set<ArgumentType<?>> output, Set<CommandNode<T>> visitedNodes) @ L128
- 方法名:findUsedArgumentTypes
- 源码定位:L128
- 返回类型:
void - 修饰符:private static
参数:
- node: CommandNode
- output: Set<ArgumentType<?>>
- visitedNodes: Set<CommandNode
>
说明:
TODO
代码
public class ArgumentUtils {
private static final Logger LOGGER = LogUtils.getLogger();
private static final byte NUMBER_FLAG_MIN = 1;
private static final byte NUMBER_FLAG_MAX = 2;
public static int createNumberFlags(boolean hasMin, boolean hasMax) {
int result = 0;
if (hasMin) {
result |= 1;
}
if (hasMax) {
result |= 2;
}
return result;
}
public static boolean numberHasMin(byte flags) {
return (flags & 1) != 0;
}
public static boolean numberHasMax(byte flags) {
return (flags & 2) != 0;
}
private static <A extends ArgumentType<?>, T extends ArgumentTypeInfo.Template<A>> void serializeArgumentCap(
JsonObject result, ArgumentTypeInfo<A, T> info, ArgumentTypeInfo.Template<A> argumentType
) {
info.serializeToJson((T)argumentType, result);
}
private static <T extends ArgumentType<?>> void serializeArgumentToJson(JsonObject result, T argument) {
ArgumentTypeInfo.Template<T> template = ArgumentTypeInfos.unpack(argument);
result.addProperty("type", "argument");
result.addProperty("parser", String.valueOf(BuiltInRegistries.COMMAND_ARGUMENT_TYPE.getKey(template.type())));
JsonObject type = new JsonObject();
serializeArgumentCap(type, template.type(), template);
if (!type.isEmpty()) {
result.add("properties", type);
}
}
public static <S> JsonObject serializeNodeToJson(CommandDispatcher<S> dispatcher, CommandNode<S> node) {
JsonObject result = new JsonObject();
switch (node) {
case RootCommandNode<S> rootNode:
result.addProperty("type", "root");
break;
case LiteralCommandNode<S> literalNode:
result.addProperty("type", "literal");
break;
case ArgumentCommandNode<S, ?> argumentNode:
serializeArgumentToJson(result, argumentNode.getType());
break;
default:
LOGGER.error("Could not serialize node {} ({})!", node, node.getClass());
result.addProperty("type", "unknown");
}
Collection<CommandNode<S>> children = node.getChildren();
if (!children.isEmpty()) {
JsonObject childrenObject = new JsonObject();
for (CommandNode<S> child : children) {
childrenObject.add(child.getName(), serializeNodeToJson(dispatcher, child));
}
result.add("children", childrenObject);
}
if (node.getCommand() != null) {
result.addProperty("executable", true);
}
if (node.getRequirement() instanceof PermissionProviderCheck<?> permissionCheck) {
JsonElement permissions = PermissionCheck.CODEC
.encodeStart(JsonOps.INSTANCE, permissionCheck.test())
.getOrThrow(error -> new IllegalStateException("Failed to serialize requirement: " + error));
result.add("permissions", permissions);
}
if (node.getRedirect() != null) {
Collection<String> path = dispatcher.getPath(node.getRedirect());
if (!path.isEmpty()) {
JsonArray target = new JsonArray();
for (String piece : path) {
target.add(piece);
}
result.add("redirect", target);
}
}
return result;
}
public static <T> Set<ArgumentType<?>> findUsedArgumentTypes(CommandNode<T> node) {
Set<CommandNode<T>> visitedNodes = new ReferenceOpenHashSet<>();
Set<ArgumentType<?>> result = new HashSet<>();
findUsedArgumentTypes(node, result, visitedNodes);
return result;
}
private static <T> void findUsedArgumentTypes(CommandNode<T> node, Set<ArgumentType<?>> output, Set<CommandNode<T>> visitedNodes) {
if (visitedNodes.add(node)) {
if (node instanceof ArgumentCommandNode<T, ?> arg) {
output.add(arg.getType());
}
node.getChildren().forEach(child -> findUsedArgumentTypes((CommandNode<T>)child, output, visitedNodes));
CommandNode<T> redirect = node.getRedirect();
if (redirect != null) {
findUsedArgumentTypes(redirect, output, visitedNodes);
}
}
}
}