Часть функционала Подсказки для кастомных команд

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Май 2021
Сообщения
45
Реакции
1
Выберите загрузчик игры
  1. Vanilla
Не найдя ни одной похожей темы, я решил написать мини-гайд по созданию подсказок для кастомных команд клиента. Буду показывать на примере Excellent Upgrade.

1.Создай класс, где и будут храниться наши подсказки, в моем случае это CustomCommandDispatcher
Покажу на примере добавления кастомной команды для добавления в друзья.

Код:
Expand Collapse Copy
private static void registerFriendCommands(CommandDispatcher<ISuggestionProvider> dispatcher) {
        dispatcher.register(
                LiteralArgumentBuilder.<ISuggestionProvider>literal("friend")
                        .then(LiteralArgumentBuilder.<ISuggestionProvider>literal("add")
                                .then(RequiredArgumentBuilder.<ISuggestionProvider, String>argument("player", StringArgumentType.word())
                                        .suggests((context, builder) -> {
                                            Collection<String> playerNames = mc.player.connection.getSuggestionProvider().getPlayerNames();
                                            return ISuggestionProvider.suggest(playerNames, builder);
                                        })
                                )
                        )
                        .then(LiteralArgumentBuilder.<ISuggestionProvider>literal("remove")
                                .then(RequiredArgumentBuilder.<ISuggestionProvider, String>argument("player", StringArgumentType.word())
                                        .suggests((context, builder) -> {
                                            FriendManager manager = FriendManager.getInstance();
                                            if (manager != null) {
                                                return ISuggestionProvider.suggest(manager.getFriends(), builder);
                                            }
                                            return builder.buildFuture();
                                        })
                                )
                        )
                        .then(LiteralArgumentBuilder.literal("clear"))
                        .then(LiteralArgumentBuilder.literal("list"))
        );
    }

после этого в самом верху пишем

Java:
Expand Collapse Copy
public static void registerAll(CommandDispatcher<ISuggestionProvider> dispatcher) {
    registerFriendCommands(dispatcher);
    // по аналогии создаете и для других команд и так же сюда добавляете.
}

После этого идея в класс CommandSuggestionHelper и заменяем init на следующее

Java:
Expand Collapse Copy
public void init() {
        String s = this.inputField.getText();

        if (this.parseResults != null && !this.parseResults.getReader().getString().equals(s)) {
            this.parseResults = null;
        }

        if (!this.isApplyingSuggestion) {
            this.inputField.setSuggestion(null);
            this.suggestions = null;
        }

        this.exceptionList.clear();
        StringReader stringreader = new StringReader(s);
        boolean isCommand = stringreader.canRead() && stringreader.peek() == '/';
        boolean isCustomCommand = stringreader.canRead() && stringreader.peek() == '.';

        if (isCommand || isCustomCommand) {
            stringreader.skip();
        }

        boolean shouldSuggest = this.commandsOnly || isCommand || isCustomCommand;
        int cursorPos = this.inputField.getCursorPosition();

        if (shouldSuggest) {
            CommandDispatcher<ISuggestionProvider> dispatcher;

            if (isCustomCommand) {
                dispatcher = new CommandDispatcher<>();
                CustomCommandDispatcher.registerAll(dispatcher);
            } else {
                dispatcher = this.mc.player.connection.getCommandDispatcher();
            }

            if (this.parseResults == null) {
                this.parseResults = dispatcher.parse(stringreader, this.mc.player.connection.getSuggestionProvider());
            }

            int readerCursor = this.hasCursor ? stringreader.getCursor() : 1;

            if (cursorPos >= readerCursor && (this.suggestions == null || !this.isApplyingSuggestion)) {
                this.suggestionsFuture = dispatcher.getCompletionSuggestions(this.parseResults, cursorPos);
                this.suggestionsFuture.thenRun(() -> {
                    if (this.suggestionsFuture.isDone()) {
                        this.recompileSuggestions();
                    }
                });
            }
        } else {
            String inputText = s.substring(0, cursorPos);
            int lastWhitespace = getLastWhitespace(inputText);
            if (mc.player == null) return;
            Collection<String> playerNames = this.mc.player.connection.getSuggestionProvider().getPlayerNames();
            this.suggestionsFuture = ISuggestionProvider.suggest(playerNames, new SuggestionsBuilder(inputText, lastWhitespace));
        }
    }
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
прикольно
 
Не найдя ни одной похожей темы, я решил написать мини-гайд по созданию подсказок для кастомных команд клиента. Буду показывать на примере Excellent Upgrade.

1.Создай класс, где и будут храниться наши подсказки, в моем случае это CustomCommandDispatcher
Покажу на примере добавления кастомной команды для добавления в друзья.

Код:
Expand Collapse Copy
private static void registerFriendCommands(CommandDispatcher<ISuggestionProvider> dispatcher) {
        dispatcher.register(
                LiteralArgumentBuilder.<ISuggestionProvider>literal("friend")
                        .then(LiteralArgumentBuilder.<ISuggestionProvider>literal("add")
                                .then(RequiredArgumentBuilder.<ISuggestionProvider, String>argument("player", StringArgumentType.word())
                                        .suggests((context, builder) -> {
                                            Collection<String> playerNames = mc.player.connection.getSuggestionProvider().getPlayerNames();
                                            return ISuggestionProvider.suggest(playerNames, builder);
                                        })
                                )
                        )
                        .then(LiteralArgumentBuilder.<ISuggestionProvider>literal("remove")
                                .then(RequiredArgumentBuilder.<ISuggestionProvider, String>argument("player", StringArgumentType.word())
                                        .suggests((context, builder) -> {
                                            FriendManager manager = FriendManager.getInstance();
                                            if (manager != null) {
                                                return ISuggestionProvider.suggest(manager.getFriends(), builder);
                                            }
                                            return builder.buildFuture();
                                        })
                                )
                        )
                        .then(LiteralArgumentBuilder.literal("clear"))
                        .then(LiteralArgumentBuilder.literal("list"))
        );
    }

после этого в самом верху пишем

Java:
Expand Collapse Copy
public static void registerAll(CommandDispatcher<ISuggestionProvider> dispatcher) {
    registerFriendCommands(dispatcher);
    // по аналогии создаете и для других команд и так же сюда добавляете.
}

После этого идея в класс CommandSuggestionHelper и заменяем init на следующее

Java:
Expand Collapse Copy
public void init() {
        String s = this.inputField.getText();

        if (this.parseResults != null && !this.parseResults.getReader().getString().equals(s)) {
            this.parseResults = null;
        }

        if (!this.isApplyingSuggestion) {
            this.inputField.setSuggestion(null);
            this.suggestions = null;
        }

        this.exceptionList.clear();
        StringReader stringreader = new StringReader(s);
        boolean isCommand = stringreader.canRead() && stringreader.peek() == '/';
        boolean isCustomCommand = stringreader.canRead() && stringreader.peek() == '.';

        if (isCommand || isCustomCommand) {
            stringreader.skip();
        }

        boolean shouldSuggest = this.commandsOnly || isCommand || isCustomCommand;
        int cursorPos = this.inputField.getCursorPosition();

        if (shouldSuggest) {
            CommandDispatcher<ISuggestionProvider> dispatcher;

            if (isCustomCommand) {
                dispatcher = new CommandDispatcher<>();
                CustomCommandDispatcher.registerAll(dispatcher);
            } else {
                dispatcher = this.mc.player.connection.getCommandDispatcher();
            }

            if (this.parseResults == null) {
                this.parseResults = dispatcher.parse(stringreader, this.mc.player.connection.getSuggestionProvider());
            }

            int readerCursor = this.hasCursor ? stringreader.getCursor() : 1;

            if (cursorPos >= readerCursor && (this.suggestions == null || !this.isApplyingSuggestion)) {
                this.suggestionsFuture = dispatcher.getCompletionSuggestions(this.parseResults, cursorPos);
                this.suggestionsFuture.thenRun(() -> {
                    if (this.suggestionsFuture.isDone()) {
                        this.recompileSuggestions();
                    }
                });
            }
        } else {
            String inputText = s.substring(0, cursorPos);
            int lastWhitespace = getLastWhitespace(inputText);
            if (mc.player == null) return;
            Collection<String> playerNames = this.mc.player.connection.getSuggestionProvider().getPlayerNames();
            this.suggestionsFuture = ISuggestionProvider.suggest(playerNames, new SuggestionsBuilder(inputText, lastWhitespace));
        }
    }
братан нее))) возможно пасты схавают а так ты хуйню делаешь,тебе не впадлу будет для каждой комманды так делать? да и если ты взялся за такую систему проще уж ее доделать
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
братан нее))) возможно пасты схавают а так ты хуйню делаешь,тебе не впадлу будет для каждой комманды так делать? да и если ты взялся за такую систему проще уж ее доделать
Пожалуйста, авторизуйтесь для просмотра ссылки.
спасибо за совет, но мне и так нравится) я решил это слить, чтобы люди тоже могли себе добавить это в чит)
 
Назад
Сверху Снизу