Java源码示例:com.mojang.brigadier.suggestion.SuggestionProvider

示例1
public static <T> void registerCommands(CommandDispatcher<T> dispatcher, Command<T> executor, SuggestionProvider<T> suggestor, String... aliases) {
    if (aliases.length == 0) {
        return;
    }

    String mainName = aliases[0];
    LiteralArgumentBuilder<T> command = LiteralArgumentBuilder.<T>literal(mainName)
            .executes(executor)
            .then(RequiredArgumentBuilder.<T, String>argument("args", StringArgumentType.greedyString())
                    .suggests(suggestor)
                    .executes(executor)
            );

    LiteralCommandNode<T> node = dispatcher.register(command);
    for (int i = 1; i < aliases.length; i++) {
        dispatcher.register(LiteralArgumentBuilder.<T>literal(aliases[i]).redirect(node));
    }
}
 
示例2
public static <T> void registerCommands(CommandDispatcher<T> dispatcher, Command<T> executor, SuggestionProvider<T> suggestor, String... aliases) {
    if (aliases.length == 0) {
        return;
    }

    String mainName = aliases[0];
    LiteralArgumentBuilder<T> command = LiteralArgumentBuilder.<T>literal(mainName)
            .executes(executor)
            .then(RequiredArgumentBuilder.<T, String>argument("args", StringArgumentType.greedyString())
                    .suggests(suggestor)
                    .executes(executor)
            );

    LiteralCommandNode<T> node = dispatcher.register(command);
    for (int i = 1; i < aliases.length; i++) {
        dispatcher.register(LiteralArgumentBuilder.<T>literal(aliases[i]).redirect(node));
    }
}
 
示例3
@Override
protected @Nullable SuggestionProvider<CommandListenerWrapper> suggestions(ArgumentCommandNode<CommandSender, ?> command) {
    var type = command.getType();
    var suggestor = command.getCustomSuggestions();
    
    if (!(type instanceof Type<?>) && suggestor == null) {
        return null;
        
    } else if (suggestor == null) {
        return reparse((Type<?>) type);
    }
    
    var client = CLIENT_SIDE.get(suggestor);
    if (client != null) {
        return client;
 
    } else {
        return reparse(suggestor);
    } 
}
 
示例4
@Override
public SuggestionProvider getSuggestionProvider(SuggestionProviders provider) {
	switch (provider) {
	case FUNCTION:
		return (context, builder) -> {
			CustomFunctionData functionData = getCLW(context).getServer().getFunctionData();
			ICompletionProvider.a(functionData.g(), builder, "#");
			return ICompletionProvider.a(functionData.f(), builder);
		};
	case RECIPES:
		return CompletionProviders.b;
	case SOUNDS:
		return CompletionProviders.c;
	case ADVANCEMENTS:
		return (cmdCtx, builder) -> {
			Collection<Advancement> advancements = ((CommandListenerWrapper) cmdCtx.getSource()).getServer()
					.getAdvancementData().getAdvancements();
			return ICompletionProvider.a(advancements.stream().map(Advancement::getName), builder);
		};
	case LOOT_TABLES:
		return (context, builder) -> {
			LootTableRegistry lootTables = getCLW(context).getServer().getLootTableRegistry();
			return ICompletionProvider.a(lootTables.a(), builder);
		};
	case BIOMES:
		return CompletionProviders.d;
	case ENTITIES:
		return CompletionProviders.e;
	default:
		return (context, builder) -> Suggestions.empty();
	}
}
 
示例5
@Override
public SuggestionProvider getSuggestionProvider(SuggestionProviders provider) {
	switch (provider) {
	case FUNCTION:
		return (context, builder) -> {
			CustomFunctionData functionData = getCLW(context).getServer().getFunctionData();
			ICompletionProvider.a(functionData.g().a(), builder, "#");
			return ICompletionProvider.a(functionData.c().keySet(), builder);
		};
	case RECIPES:
		return CompletionProviders.b;
	case SOUNDS:
		return CompletionProviders.c;
	case ADVANCEMENTS:
		return (cmdCtx, builder) -> {
			Collection<Advancement> advancements = ((CommandListenerWrapper) cmdCtx.getSource()).getServer()
					.getAdvancementData().b();
			return ICompletionProvider.a(advancements.stream().map(Advancement::getName), builder);
		};
	case LOOT_TABLES:
		return (context, builder) -> {
			LootTableRegistry lootTables = getCLW(context).getServer().getLootTableRegistry();
			return ICompletionProvider.a(lootTables.a(), builder);
		};
	case ENTITIES:
		return CompletionProviders.d;
	case BIOMES:
	default:
		return (context, builder) -> Suggestions.empty();
	}
}
 
示例6
@Override
public SuggestionProvider getSuggestionProvider(SuggestionProviders provider) {
	switch (provider) {
	case FUNCTION:
		return (context, builder) -> {
			CustomFunctionData functionData = getCLW(context).getServer().getFunctionData();
			ICompletionProvider.a(functionData.h().a(), builder, "#");
			return ICompletionProvider.a(functionData.c().keySet(), builder);
		};
	case RECIPES:
		return CompletionProviders.b;
	case SOUNDS:
		return CompletionProviders.c;
	case ADVANCEMENTS:
		return (cmdCtx, builder) -> {
			Collection<Advancement> advancements = ((CommandListenerWrapper) cmdCtx.getSource()).getServer()
					.getAdvancementData().getAdvancements();
			return ICompletionProvider.a(advancements.stream().map(Advancement::getName), builder);
		};
	case LOOT_TABLES:
		return (context, builder) -> {
			LootTableRegistry lootTables = getCLW(context).getServer().getLootTableRegistry();
			return ICompletionProvider.a(lootTables.a(), builder);
		};
	case ENTITIES:
		return CompletionProviders.d;
	case BIOMES:
	default:
		return (context, builder) -> Suggestions.empty();
	}
}
 
示例7
@Override
public SuggestionProvider getSuggestionProvider(SuggestionProviders provider) {
    switch (provider) {
        case FUNCTION:
            return (context, builder) -> {
                CustomFunctionData functionData = getCLW(context).getServer().getFunctionData();
                ICompletionProvider.a(functionData.h().a(), builder, "#");
                return ICompletionProvider.a(functionData.c().keySet(), builder);
            };
        case RECIPES:
            return CompletionProviders.b;
        case SOUNDS:
            return CompletionProviders.c;
        case ADVANCEMENTS:
            return (cmdCtx, builder) -> {
                Collection<Advancement> advancements = ((CommandListenerWrapper) cmdCtx.getSource()).getServer().getAdvancementData().a();
                return ICompletionProvider.a(advancements.stream().map(Advancement::getName), builder);
            };
        case LOOT_TABLES:
            return (context, builder) -> {
                LootTableRegistry lootTables = getCLW(context).getServer().getLootTableRegistry();
                return ICompletionProvider.a(lootTables.a(), builder);
            };
        case ENTITIES:
			return CompletionProviders.d;
		case BIOMES:
        default:
            return (context, builder) -> Suggestions.empty();
    }
}
 
示例8
@Override
public SuggestionProvider getSuggestionProvider(SuggestionProviders provider) {
    switch (provider) {
        case FUNCTION:
            return (context, builder) -> {
                CustomFunctionData functionData = getCLW(context).getServer().getFunctionData();
                ICompletionProvider.a(functionData.h().a(), builder, "#");
                return ICompletionProvider.a(functionData.c().keySet(), builder);
            };
        case RECIPES:
            return CompletionProviders.b;
        case SOUNDS:
            return CompletionProviders.c;
        case ADVANCEMENTS:
            return (cmdCtx, builder) -> {
                Collection<Advancement> advancements = ((CommandListenerWrapper) cmdCtx.getSource()).getServer().getAdvancementData().a();
                return ICompletionProvider.a(advancements.stream().map(Advancement::getName), builder);
            };
        case LOOT_TABLES:
            return (context, builder) -> {
                LootTableRegistry lootTables = getCLW(context).getServer().getLootTableRegistry();
                return ICompletionProvider.a(lootTables.a(), builder);
            };
        case ENTITIES:
			return CompletionProviders.d;
		case BIOMES:
        default:
            return (context, builder) -> Suggestions.empty();
    }
}
 
示例9
SuggestionProvider<CommandListenerWrapper> reparse(Type<?> type) {
    return (context, suggestions) -> {
        var sender = context.getSource().getBukkitSender();
        var reparsed = dispatcher.parse(context.getInput(), sender).getContext().build(context.getInput());
        return type.listSuggestions(reparsed, suggestions);
    };
}
 
示例10
SuggestionProvider<CommandListenerWrapper> reparse(SuggestionProvider<CommandSender> suggestor) {
    return (context, suggestions) -> {
        var sender = context.getSource().getBukkitSender();
        var reparsed = dispatcher.parse(context.getInput(), sender).getContext().build(context.getInput());
        return suggestor.getSuggestions(reparsed, suggestions);
    };
}
 
示例11
public VariableResolver(Environment environment) {
    super(environment);
    command = specialize(Command.class, sender);
    argumentType = types.erasure(elements.getTypeElement(ArgumentType.class.getName()).asType());
    requirement = specialize(Predicate.class, sender);
    suggestions = specialize(SuggestionProvider.class, sender);
}
 
示例12
private <T> RequiredArgumentBuilder<?, T> getRequiredArgumentBuilderWithProvider(String argumentName,
		ArgumentType<T> type, CommandPermission permission, SuggestionProvider provider) {
	return RequiredArgumentBuilder.argument(argumentName, type)
			.requires(clw -> permissionCheck(nms.getCommandSenderForCLW(clw), permission)).suggests(provider);
}
 
示例13
private static void serializeNode(CommandNode<Object> node, ByteBuf buf,
    Object2IntMap<CommandNode<Object>> idMappings) {
  byte flags = 0;
  if (node.getRedirect() != null) {
    flags |= FLAG_IS_REDIRECT;
  }
  if (node.getCommand() != null) {
    flags |= FLAG_EXECUTABLE;
  }

  if (node instanceof RootCommandNode<?>) {
    flags |= NODE_TYPE_ROOT;
  } else if (node instanceof LiteralCommandNode<?>) {
    flags |= NODE_TYPE_LITERAL;
  } else if (node instanceof ArgumentCommandNode<?, ?>) {
    flags |= NODE_TYPE_ARGUMENT;
    if (((ArgumentCommandNode) node).getCustomSuggestions() != null) {
      flags |= FLAG_HAS_SUGGESTIONS;
    }
  } else {
    throw new IllegalArgumentException("Unknown node type " + node.getClass().getName());
  }

  buf.writeByte(flags);
  ProtocolUtils.writeVarInt(buf, node.getChildren().size());
  for (CommandNode<Object> child : node.getChildren()) {
    ProtocolUtils.writeVarInt(buf, idMappings.getInt(child));
  }
  if (node.getRedirect() != null) {
    ProtocolUtils.writeVarInt(buf, idMappings.getInt(node.getRedirect()));
  }

  if (node instanceof ArgumentCommandNode<?, ?>) {
    ProtocolUtils.writeString(buf, node.getName());
    ArgumentPropertyRegistry.serialize(buf, ((ArgumentCommandNode) node).getType());

    if (((ArgumentCommandNode) node).getCustomSuggestions() != null) {
      // The unchecked cast is required, but it is not particularly relevant because we check for
      // a more specific type later. (Even then, we only pull out one field.)
      @SuppressWarnings("unchecked")
      SuggestionProvider<Object> provider = ((ArgumentCommandNode) node).getCustomSuggestions();

      if (!(provider instanceof ProtocolSuggestionProvider)) {
        throw new IllegalArgumentException("Suggestion provider " + provider.getClass().getName()
          + " is not valid.");
      }

      ProtocolUtils.writeString(buf, ((ProtocolSuggestionProvider) provider).name);
    }
  } else if (node instanceof LiteralCommandNode<?>) {
    ProtocolUtils.writeString(buf, node.getName());
  }
}
 
示例14
public Argument(String name, ArgumentType<V> type, Command<T> command, Predicate<T> requirement, SuggestionProvider<T> suggestions) {
    this(name, type, command, requirement, null, null, false, suggestions);
}
 
示例15
public Argument(String name, ArgumentType<V> type, Execution<T> execution, Predicate<T> requirement, SuggestionProvider<T> suggestions) {
    this(name, type, execution, requirement, null, null, false, suggestions);
}
 
示例16
public Argument(String name, ArgumentType<V> type, Command<T> command, Predicate<T> requirement, @Nullable CommandNode<T> destination, RedirectModifier<T> modifier, boolean fork, SuggestionProvider<T> suggestions) {
    super(name, type, command, requirement, destination, modifier, fork, suggestions);
    this.destination = destination;
    this.addition = super::addChild;
}
 
示例17
public Builder<T, V> suggests(SuggestionProvider<T> suggestions) {
    this.suggestions = suggestions;
    return getThis();
}
 
示例18
@VisibleForOverride
protected @Nullable SuggestionProvider<R> suggestions(ArgumentCommandNode<T, ?> command) {
    return null;
}
 
示例19
public ArgumentCommandNode(final String name, final ArgumentType<T> type, final Command<S> command, final Predicate<S> requirement, final CommandNode<S> redirect, final RedirectModifier<S> modifier, final boolean forks, final SuggestionProvider<S> customSuggestions) {
    super(command, requirement, redirect, modifier, forks);
    this.name = name;
    this.type = type;
    this.customSuggestions = customSuggestions;
}
 
示例20
public SuggestionProvider<S> getCustomSuggestions() {
    return customSuggestions;
}
 
示例21
public RequiredArgumentBuilder<S, T> suggests(final SuggestionProvider<S> provider) {
    this.suggestionsProvider = provider;
    return getThis();
}
 
示例22
public SuggestionProvider<S> getSuggestionsProvider() {
    return suggestionsProvider;
}
 
示例23
/**
 * Retrieve a specific NMS implemented SuggestionProvider
 * @param provider The SuggestionProvider type to retrieve
 * @return A SuggestionProvider that matches the SuggestionProviders input
 */
SuggestionProvider<?> getSuggestionProvider(SuggestionProviders provider);