ResourceOrTagKeyArgument.java
net.minecraft.commands.arguments.ResourceOrTagKeyArgument
信息
- 全限定名:net.minecraft.commands.arguments.ResourceOrTagKeyArgument
- 类型:public class
- 包:net.minecraft.commands.arguments
- 源码路径:src/main/java/net/minecraft/commands/arguments/ResourceOrTagKeyArgument.java
- 起始行号:L29
- 实现:ArgumentType<ResourceOrTagKeyArgument.Result
> - 职责:
TODO
字段/常量
-
EXAMPLES- 类型:
Collection<String> - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
registryKey- 类型:
ResourceKey<?extends Registry<T>> - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.commands.arguments.ResourceOrTagKeyArgument.Info- 类型:
class - 修饰符:
public static - 源码定位:
L77 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ResourceOrTagKeyArgument.Info.Template- 类型:
class - 修饰符:
public final - 源码定位:
L94 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ResourceOrTagKeyArgument.ResourceResult- 类型:
record - 修饰符:
private - 源码定位:
L114 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ResourceOrTagKeyArgument.Result- 类型:
interface - 修饰符:
public - 源码定位:
L135 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ResourceOrTagKeyArgument.TagResult- 类型:
record - 修饰符:
private - 源码定位:
L143 - 说明:
TODO
- 类型:
构造器
public ResourceOrTagKeyArgument(ResourceKey<?extends Registry<T>> registryKey) @ L33
- 构造器名:ResourceOrTagKeyArgument
- 源码定位:L33
- 修饰符:public
参数:
- registryKey: ResourceKey<?extends Registry
>
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static <T> ResourceOrTagKeyArgument<T> resourceOrTagKey(ResourceKey<?extends Registry<T>> key) @ L37
- 方法名:resourceOrTagKey
- 源码定位:L37
- 返回类型:
ResourceOrTagKeyArgument - 修饰符:public static
参数:
- key: ResourceKey<?extends Registry
>
说明:
TODO
public static <T> ResourceOrTagKeyArgument.Result<T> getResourceOrTagKey(CommandContext<CommandSourceStack> context, String name, ResourceKey<Registry<T>> registryKey, DynamicCommandExceptionType exceptionType) @ L41
- 方法名:getResourceOrTagKey
- 源码定位:L41
- 返回类型:
ResourceOrTagKeyArgument.Result - 修饰符:public static
参数:
- context: CommandContext
- name: String
- registryKey: ResourceKey<Registry
> - exceptionType: DynamicCommandExceptionType
说明:
TODO
public ResourceOrTagKeyArgument.Result<T> parse(StringReader reader) @ L49
- 方法名:parse
- 源码定位:L49
- 返回类型:ResourceOrTagKeyArgument.Result
- 修饰符:public
参数:
- reader: StringReader
说明:
TODO
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) @ L67
- 方法名:listSuggestions
- 源码定位:L67
- 返回类型:
CompletableFuture - 修饰符:public
参数:
- context: CommandContext
- builder: SuggestionsBuilder
说明:
TODO
public Collection<String> getExamples() @ L72
- 方法名:getExamples
- 源码定位:L72
- 返回类型:Collection
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class ResourceOrTagKeyArgument<T> implements ArgumentType<ResourceOrTagKeyArgument.Result<T>> {
private static final Collection<String> EXAMPLES = Arrays.asList("foo", "foo:bar", "012", "#skeletons", "#minecraft:skeletons");
private final ResourceKey<? extends Registry<T>> registryKey;
public ResourceOrTagKeyArgument(ResourceKey<? extends Registry<T>> registryKey) {
this.registryKey = registryKey;
}
public static <T> ResourceOrTagKeyArgument<T> resourceOrTagKey(ResourceKey<? extends Registry<T>> key) {
return new ResourceOrTagKeyArgument<>(key);
}
public static <T> ResourceOrTagKeyArgument.Result<T> getResourceOrTagKey(
CommandContext<CommandSourceStack> context, String name, ResourceKey<Registry<T>> registryKey, DynamicCommandExceptionType exceptionType
) throws CommandSyntaxException {
ResourceOrTagKeyArgument.Result<?> argument = context.getArgument(name, ResourceOrTagKeyArgument.Result.class);
Optional<ResourceOrTagKeyArgument.Result<T>> value = argument.cast(registryKey);
return value.orElseThrow(() -> exceptionType.create(argument));
}
public ResourceOrTagKeyArgument.Result<T> parse(StringReader reader) throws CommandSyntaxException {
if (reader.canRead() && reader.peek() == '#') {
int cursor = reader.getCursor();
try {
reader.skip();
Identifier tagId = Identifier.read(reader);
return new ResourceOrTagKeyArgument.TagResult<>(TagKey.create(this.registryKey, tagId));
} catch (CommandSyntaxException var4) {
reader.setCursor(cursor);
throw var4;
}
} else {
Identifier resourceId = Identifier.read(reader);
return new ResourceOrTagKeyArgument.ResourceResult<>(ResourceKey.create(this.registryKey, resourceId));
}
}
@Override
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
return SharedSuggestionProvider.listSuggestions(context, builder, this.registryKey, SharedSuggestionProvider.ElementSuggestionType.ALL);
}
@Override
public Collection<String> getExamples() {
return EXAMPLES;
}
public static class Info<T> implements ArgumentTypeInfo<ResourceOrTagKeyArgument<T>, ResourceOrTagKeyArgument.Info<T>.Template> {
public void serializeToNetwork(ResourceOrTagKeyArgument.Info<T>.Template template, FriendlyByteBuf out) {
out.writeResourceKey(template.registryKey);
}
public ResourceOrTagKeyArgument.Info<T>.Template deserializeFromNetwork(FriendlyByteBuf in) {
return new ResourceOrTagKeyArgument.Info.Template(in.readRegistryKey());
}
public void serializeToJson(ResourceOrTagKeyArgument.Info<T>.Template template, JsonObject out) {
out.addProperty("registry", template.registryKey.identifier().toString());
}
public ResourceOrTagKeyArgument.Info<T>.Template unpack(ResourceOrTagKeyArgument<T> argument) {
return new ResourceOrTagKeyArgument.Info.Template(argument.registryKey);
}
public final class Template implements ArgumentTypeInfo.Template<ResourceOrTagKeyArgument<T>> {
private final ResourceKey<? extends Registry<T>> registryKey;
private Template(ResourceKey<? extends Registry<T>> registryKey) {
Objects.requireNonNull(Info.this);
super();
this.registryKey = registryKey;
}
public ResourceOrTagKeyArgument<T> instantiate(CommandBuildContext context) {
return new ResourceOrTagKeyArgument<>(this.registryKey);
}
@Override
public ArgumentTypeInfo<ResourceOrTagKeyArgument<T>, ?> type() {
return Info.this;
}
}
}
private record ResourceResult<T>(ResourceKey<T> key) implements ResourceOrTagKeyArgument.Result<T> {
@Override
public Either<ResourceKey<T>, TagKey<T>> unwrap() {
return Either.left(this.key);
}
@Override
public <E> Optional<ResourceOrTagKeyArgument.Result<E>> cast(ResourceKey<? extends Registry<E>> registryKey) {
return this.key.cast(registryKey).map(ResourceOrTagKeyArgument.ResourceResult::new);
}
public boolean test(Holder<T> holder) {
return holder.is(this.key);
}
@Override
public String asPrintable() {
return this.key.identifier().toString();
}
}
public interface Result<T> extends Predicate<Holder<T>> {
Either<ResourceKey<T>, TagKey<T>> unwrap();
<E> Optional<ResourceOrTagKeyArgument.Result<E>> cast(final ResourceKey<? extends Registry<E>> registryKey);
String asPrintable();
}
private record TagResult<T>(TagKey<T> key) implements ResourceOrTagKeyArgument.Result<T> {
@Override
public Either<ResourceKey<T>, TagKey<T>> unwrap() {
return Either.right(this.key);
}
@Override
public <E> Optional<ResourceOrTagKeyArgument.Result<E>> cast(ResourceKey<? extends Registry<E>> registryKey) {
return this.key.cast(registryKey).map(ResourceOrTagKeyArgument.TagResult::new);
}
public boolean test(Holder<T> holder) {
return holder.is(this.key);
}
@Override
public String asPrintable() {
return "#" + this.key.location();
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SharedSuggestionProvider.listSuggestions()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Identifier.read()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
ResourceKey.create()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TagKey.create()
- 引用位置: