User Tools

Site Tools


ru:tutorial:commands

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
ru:tutorial:commands [2022/02/28 12:58] furnygoru:tutorial:commands [2022/03/03 12:50] furnygo
Line 2: Line 2:
  
 Создание команд позволяет разработчику наращивать функционал и способ воздействия с пользователем через, собственно, команды. Создание команд позволяет разработчику наращивать функционал и способ воздействия с пользователем через, собственно, команды.
-Это руководство расскажет как регистрировать команды и общую инофрмацию о структуре Brigadier.+Это руководство расскажет как регистрировать команды и общую информацию о структуре Brigadier.
  
 Примечание: Весь код, описанный здесь, написан для 1.14.4. Что-то может быть изменено в yarn, но большая часть кода всё ещё применима и там. Примечание: Весь код, описанный здесь, написан для 1.14.4. Что-то может быть изменено в yarn, но большая часть кода всё ещё применима и там.
Line 100: Line 100:
 Примечание: Пожалуйста, убедитесь, что вы используете ''literal'' и ''argument'' из CommandManager, иначе у вас могут возникнуть проблемы с дженериками при попытке компиляции. Примечание: Пожалуйста, убедитесь, что вы используете ''literal'' и ''argument'' из CommandManager, иначе у вас могут возникнуть проблемы с дженериками при попытке компиляции.
  
-Аргументы бригадира по умолчанию находятся в ''com.mojang.brigadier.arguments''+Аргументы Brigadier по умолчанию находятся в ''com.mojang.brigadier.arguments''
  
 Аргументы Minecraft находятся в разделе ''net.minecraft.command.arguments''. Аргументы Minecraft находятся в разделе ''net.minecraft.command.arguments''.
 CommandManager находится в ''net.minecraft.server.command'' CommandManager находится в ''net.minecraft.server.command''
  
-==== Подкоманда ====+===== Подкоманда =====
  
 Чтобы добавить команде подкоманду, сначала необходимо зарегистрировать ветвь с буквальным вводом. Чтобы добавить команде подкоманду, сначала необходимо зарегистрировать ветвь с буквальным вводом.
Line 115: Line 115:
 В целом, чтобы получить подкоманду, нужно расширить текущую ветвь следующей, уже существующей ветвью. Это можно сделать с помощью метода ''then(ArgumentBuilder)'' который принимает в себя ''ArgumentBuilder''. В целом, чтобы получить подкоманду, нужно расширить текущую ветвь следующей, уже существующей ветвью. Это можно сделать с помощью метода ''then(ArgumentBuilder)'' который принимает в себя ''ArgumentBuilder''.
  
-То, что показано ниже, создаёт команду ''foo <bar>''.+То, что показано ниже, создаёт команду ''foo <bar>'':
  
 <code java [enable_line_numbers="true", highlight_lines_extra="2"]> <code java [enable_line_numbers="true", highlight_lines_extra="2"]>
Line 123: Line 123:
 </code> </code>
  
-It is advised to indent your code as you add nodes to the commandUsually the indentation corresponds to how many nodes deep one is on the command treeThe new line also makes it visible that another node is being addedThere are alternative styles to formatting the tree command that are shown later on in this tutorial.+Рекомендуется делать отступы в вашем коде при добавлении узлов в командуОбычно отступ соответствует количеству глубоких узлов в дереве командНовая строка также делает видимым, что добавляется еще один узелСуществуют альтернативные стили для форматирования команды дерева, которые будут показаны позже в этом руководстве.
  
-**So let's try running the command**+**Итак, давайте попробуем выполнить команду**
  
-Most likely if you typed ''/foo bar'' in gamethe command will fail to runThis is because there is no code for the game to execute when all the required arguments have been metTo fix thisyou need to tell the game what to run when the command is being executed using the ''executes(Command)'' method. Below is how the command should look as an example.+Скорее всего, если вы наберете ''/foo bar'' в игрекоманда не будет выполненаЭто происходит потому, что нет кода для игры, который выполнялся бы после выполнения всех требуемых аргументовЧтобы исправить этовам нужно указать игре, что запускать, когда выполняется команда, используя метод ''executes(Command)''Ниже в качестве примера показано, как должна выглядеть команда:
  
 <code java [enable_line_numbers="true", highlight_lines_extra="3,4,5,6,7"]> <code java [enable_line_numbers="true", highlight_lines_extra="3,4,5,6,7"]>
Line 141: Line 141:
 </code> </code>
  
-===== Registering the commands =====+===== Регистрация команд =====
  
-Registering commands is done by registering a callback using the ''CommandRegistrationCallback''For information on registering callbacksplease see the [[tutorial:callbacks|callbacks article]].+Регистрация команд выполняется путем регистрации обратного вызова с помощью ''CommandRegistrationCallback''Для получения информации о регистрации обратных вызововознакомьтесь с [[ru:tutorial:callbacks|статьёй об обратных вызовах]].
  
-The event should be registered in your mod's initializerThe callback has two parametersThe ''CommmandDispatcher<S>'' is used to registerparse and execute commands. ''S'' is the type of command source the command dispatcher supportsThe second parameter is a boolean which identifies the type of server the commands are being registeredon is an ''dedicated'' or ''integrated'' (false) server.+Событие должно быть зарегистрировано в инициализаторе вашего модаОбратный вызов имеет два параметра. ''CommmandDispatcher<S>'' используется для регистрациианализа и выполнения команд. ''S'' i- это тип источника команд, который поддерживает диспетчер командВторой параметр - это логическое значение, которое определяет тип сервера, на котором регистрируются командыЭто может быть ''dedicated'' (выделенный) или ''integrated''(интегрированный) (false) сервер:
  
  
Line 159: Line 159:
 </code> </code>
  
-Inside your lambdamethod reference or whatever you have chosenyou will register your commands.+Внутри вашего лямбда-выраженияссылки на метод или чего бы вы ни выбрализарегистрируете свои команды:
  
 <code java [enable_line_numbers="true", highlight_lines_extra="5,6,7,8"]> <code java [enable_line_numbers="true", highlight_lines_extra="5,6,7,8"]>
Line 175: Line 175:
 </code> </code>
  
-If desiredyou can make sure a command is only registered on a dedicated server by checking the ''dedicated'' flag+При желании вы можете убедитьсячто команда зарегистрирована только на выделенном сервере, установив флажок ''dedicated''(выделенный):
  
  
Line 191: Line 191:
 </code> </code>
  
-And vice versa+И наоборот:
  
 <code java [enable_line_numbers="true", highlight_lines_extra="5,6,7"]> <code java [enable_line_numbers="true", highlight_lines_extra="5,6,7"]>
Line 206: Line 206:
 </code> </code>
  
-===== Arguments =====+===== Аргументы =====
  
-Arguments in Brigadier both parse and error check any inputted arguments+Аргументы в Brigadier как анализируют, так и проверяют на ошибки любые введенные аргументы
-Minecraft creates some special argument types for it's own use such as the ''EntityArgumentType'' which represents the in-game entity selectors ''@a, @r, @p, @e[type=!player, limit=1, distance=..2]'', or an ''NbtTagArgumentType'' that parses stringified nbt (snbt) and verifies that the input is the correct syntax.+Minecraft создает некоторые специальные типы аргументов для собственного использования, такие как ''EntityArgumentType'', который представляет внутриигровые селекторы сущностей ''@a, @r, @p, @e[type=!player, limit=1, distance=..2]'', или ''NbtTagArgumentType'', который анализирует строковый nbt (snbt) и проверяет правильность ввода синтаксиса.
  
-**TODO:** Go into more detail on how to use arguments+**Будет сделано позже:** Подробнее о том, как использовать аргументы.
  
-====== Advanced concepts ======+====== Дополнительные концепции ======
  
-Below are links to the articles about more complex concepts used in brigadier.+Ниже приведены ссылки на статьи о более сложных концепциях, используемых в Brigadier.
  
-Page                                                           ^ Description                                                                     ^ +Страница                                                           ^ Описание                                                                     ^ 
-| [[tutorials:commands:requirements|Requirements]]               Only allow users to execute commands in certain scenarios                     +| [[ru:tutorial:commands:requirements|Условия]]| Разрешать пользователям выполнять команды только в определенных сценариях.| 
-| [[tutorials:commands:exceptions  |Exceptions]]                 Fail execution of a command with a descriptive message and in certain contexts. |                                                                   +| [[ru:tutorial:commands:exceptions|Исключения]]| Сбой выполнения команды с описательным сообщением и в определенных контекстах.|                                                                   
-| [[tutorial:command_suggestions|Suggestions]]                Suggesting input to be sent to the client                                     +| [[ru:tutorial:commands:suggestions|Предложения]]| Предложение входных данных для отправки клиенту.| 
-| [[tutorials:commands:redirects_aliases|Redirects (Aliases)]]   Allow use of aliases to execute commands                                      +| [[ru:tutorial:commands:redirects_aliases|Редиректы (Разные вариации)]]| Разрешить использование разновидностей команд.| 
-| [[tutorials:commands:redirects_chaining|Redirects (Chaining)]] | Allow commands to have repeating elements and flags                           +| [[ru:tutorial:commands:redirects_chaining|Редиректы (Цепочки)]]| Разрешить командам иметь повторяющиеся элементы и флаги.| 
-| [[tutorials:commands:argument_types|Custom Argument Types]]    Parse your own arguments and return your own types                            |+| [[ru:tutorial:commands:argument_types|Свои типы аргументов]]| Анализируйте свои аргументы и возвращайте свои типы.|
  
-**TODO:** Sections are being moved to sub categories and will be added to their respective articles as they are migrated.+====== Часто задаваемые вопросы ======
  
-====== FAQ ======+===== Почему моя команда не компилируется? =====
  
-===== Why does my command not compile =====+Есть две непосредственные возможности того, почему это могло произойти.
  
-There are two immediate possibilities for why this could occur.+==== Поймать или вызвать исключение CommandSyntaxException ====
  
-==== Catch or throw a CommandSyntaxException ====+Решение этой проблемы состоит в том, чтобы заставить методы run или suggest вызывать исключение CommandSyntaxException. Не волнуйтесь, Brigadier обработает исключения и выдаст соответствующее сообщение об ошибке.
  
-The solution to this issue is to make the run or suggest methods throw a CommandSyntaxException. Don't worry, brigadier will handle the exceptions and output the proper error message.+==== Проблемы с дженериками ====
  
-==== Issues with generics ====+Время от времени у вас могут возникать проблемы с типами дженерика. Убедитесь, что вы используете ''CommandManager.literal(...)'' или ''CommandManager.argument(...)'' вместо ''LiteralArgumentBuilder'' или ''RequiredArgumentBuilder''.
  
-You may have an issue with generic types once in a while. Verify you are using ''CommandManager.literal(...)'' or ''CommandManager.argument(...)'' instead ''LiteralArgumentBuilder'' or ''RequiredArgumentBuilder''.+===== Могу ли я зарегистрировать команды на стороне клиента? =====
  
-===== Can I register client side commands? =====+Fabric в настоящее время не поддерживает команды на стороне клиента. Существует [[https://github.com/CottonMC/ClientCommands|сторонний мод]] от команды Cotton, которая добавляет эту функциональность.
  
-Fabric doesn't currently support client side commands. There is a [[https://github.com/CottonMC/ClientCommands|third-party mod]] by the Cotton team that adds this functionality.+===== "Темные искусства" =====
  
-===== Dark Arts =====+Несколько вещей, которые мы не рекомендуем, но которые возможны.
  
-A few things we don't recommend, but are possible.+==== Могу ли я регистрировать команды во время выполнения? ====
  
-==== Can I register commands in runtime? ====+Вы можете это сделать, но это не рекомендуется. Вы получите ''CommandManager'' с сервера и добавите любые команды, которые пожелаете, в его ''CommandDispatcher''.
  
-You can do this but it is not recommended. You would get the ''CommandManager'' from the server and add anything commands you wish to it's ''CommandDispatcher''.+После этого вам нужно снова отправить дерево команд каждому игроку, используя ''sendCommandTree(ServerPlayerEntity)''. Это необходимо, поскольку клиент локально кэширует дерево команд, которое он получает во время входа в систему (или при отправке пакетов оператора) для локальных завершений и сообщений об ошибках.
  
-After that you need to send the command tree to every player again using ''sendCommandTree(ServerPlayerEntity)''. This is required because the client locally caches the command tree it receives during login (or when operator packets are sent) for local completions rich error messages.+==== Могу ли я отменить регистрацию команд во время выполнения? ====
  
-==== Can I unregister commands in runtime? ==== +Вы также можете сделать этооднако это гораздо менее стабильно, чем регистрация команд, и может вызвать нежелательные побочные эффектыЧтобы все было простовам нужно использовать отражение для бригадира и удалить узлыПосле этого вам нужно снова отправить дерево команд каждому игрокуиспользуя ''sendCommandTree(ServerPlayerEntity)''Если вы не отправите обновленное дерево команд, клиент может подуматьчто команда все еще существуетдаже если сервер завершит выполнение с ошибкой.
- +
-You can also do thishowever it is much less stable than registering commands and could cause unwanted side effectsTo keep things simpleyou need to use reflection on brigadier and remove the nodesAfter thisyou need to send the command tree to every player again using ''sendCommandTree(ServerPlayerEntity)''If you don't send the updated command treethe client may think a command still existseven though the server will fail execution.+
  
 ---- ----
  
-====== Sorry for the mess ======+====== Со временем уберётся ======
  
 **__Currently this article is being migrated, so things may be a mess. Below is are the parts of the article that are yet to be migrated to the new format.__** **__Currently this article is being migrated, so things may be a mess. Below is are the parts of the article that are yet to be migrated to the new format.__**
ru/tutorial/commands.txt · Last modified: 2022/03/03 13:27 by furnygo