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 [2021/09/17 05:00] – ↷ Links adapted because of a move operation 173.77.238.20ru:tutorial:commands [2022/02/28 12:58] furnygo
Line 1: Line 1:
-====== Создание команда ======+====== Создание команды ======
  
 Создание команд позволяет разработчику наращивать функционал и способ воздействия с пользователем через, собственно, команды. Создание команд позволяет разработчику наращивать функционал и способ воздействия с пользователем через, собственно, команды.
Line 12: Line 12:
 С исходным кодом Brigadier вы можете ознакомиться тут: https://github.com/Mojang/brigadier С исходным кодом Brigadier вы можете ознакомиться тут: https://github.com/Mojang/brigadier
  
-===== Что такое команда? =====+===== Что такое "команда"? =====
  
 Brigadier требует описание ''команды'' чтобы её исполнять. На самом деле, "команда" это довольно неточный термин, если мы говорим о Brigadier, но обычно он означает конечную точку для команды, т.е. то место, где исполняется ваш код. Brigadier требует описание ''команды'' чтобы её исполнять. На самом деле, "команда" это довольно неточный термин, если мы говорим о Brigadier, но обычно он означает конечную точку для команды, т.е. то место, где исполняется ваш код.
 ''Command'' - это функциональный интерфейс. Команда имеет подтип ''S'', где ''S'' - это источник команды. Источник команды может предоставить некий "контекст" для неё. В Minecraft обычно используется ''ServerCommandSource'', что представляет сервер, командный блок, соединение RCON, игрока или сущность. ''Command'' - это функциональный интерфейс. Команда имеет подтип ''S'', где ''S'' - это источник команды. Источник команды может предоставить некий "контекст" для неё. В Minecraft обычно используется ''ServerCommandSource'', что представляет сервер, командный блок, соединение RCON, игрока или сущность.
  
-Единственный метод в ''Command'' - ''run(CommandContext<S>)'' принимает один параметр ''CommandContext<S>'' и возвращает целое число. Контекст команды (CommandContext) типа ''S'' содержит в себе ''S'', позволяет увидеть используемые аргмуенты, работать с обработанными аргументами и посмотреть на непосредственный ввод пользователя.+Единственный метод в ''Command'' - ''run(CommandContext<S>)'' принимает один параметр ''CommandContext<S>'' и возвращает целое число. Контекст команды (CommandContext) типа ''S'' содержит в себе ''S'', позволяет увидеть используемые аргументы, работать с обработанными аргументами и посмотреть на непосредственный ввод пользователя.
  
 Вы можете создать команду несколькими образами, которые написаны ниже: Вы можете создать команду несколькими образами, которые написаны ниже:
Line 51: Line 51:
 <code java [enable_line_numbers="true"]> <code java [enable_line_numbers="true"]>
 void registerCommand() { void registerCommand() {
-    // Ignore this for nowwe will explain it next.+    // Не обращайте вниманиемы объясним про это далее.
     dispatcher.register(CommandManager.literal("foo"))     dispatcher.register(CommandManager.literal("foo"))
-        .executes(this::execute); // This refers to the "executemethod below.+        .executes(this::execute); // Это относится к приведённому ниже методу "выполнить".
 } }
  
Line 79: Line 79:
  
 ''CommandManager.literal("foo")'' даёт brigadier'у понять, что у команды только одна ветвь, это **буквальный ввод** foo. Чтобы команда была выполнена, нужно ввести ''/foo''. Если введено ''/Foo'', ''/FoO'', ''/FOO'', ''/fOO'' или ''/fooo'', команда не будет считаться верной. ''CommandManager.literal("foo")'' даёт brigadier'у понять, что у команды только одна ветвь, это **буквальный ввод** foo. Чтобы команда была выполнена, нужно ввести ''/foo''. Если введено ''/Foo'', ''/FoO'', ''/FOO'', ''/fOO'' или ''/fooo'', команда не будет считаться верной.
 +
 +===== Статические импорты =====
 +Вы можете вводить ''CommandManager.literal("foo")'' каждый раз, когда хотите создать литерал. Это работает, но вы можете статически импортировать аргументы и сократить оператор до ''literal("foo")''. Это также работает для получения значения аргумента. Это сокращает ''StringArgumentType.getString(ctx, "string")'' до ''getString(ctx, "string")''.
 +Это также работает для собственных типов аргументов Minecraft.
 +
 +И ваш импорт будет выглядеть примерно так:
 +<code java [enable_line_numbers="true"]>
 +// getString(ctx, "string")
 +import static com.mojang.brigadier.arguments.StringArgumentType.getString;
 +// word()
 +import static com.mojang.brigadier.arguments.StringArgumentType.word;
 + // literal("foo")
 +import static net.minecraft.server.command.CommandManager.literal;
 + // argument("bar", word())
 +import static net.minecraft.server.command.CommandManager.argument;
 +// Импортировать всё
 +import static net.minecraft.server.command.CommandManager.*;
 +</code>
 +
 +Примечание: Пожалуйста, убедитесь, что вы используете ''literal'' и ''argument'' из CommandManager, иначе у вас могут возникнуть проблемы с дженериками при попытке компиляции.
 +
 +Аргументы бригадира по умолчанию находятся в ''com.mojang.brigadier.arguments''
 +
 +Аргументы Minecraft находятся в разделе ''net.minecraft.command.arguments''.
 +CommandManager находится в ''net.minecraft.server.command''
  
 ==== Подкоманда ==== ==== Подкоманда ====
  
-Чтобы добавить команде подкоманду, сначала необходимо зарегестрировать ветвь с буквальным вводом.+Чтобы добавить команде подкоманду, сначала необходимо зарегистрировать ветвь с буквальным вводом.
  
 <code java [enable_line_numbers="true"]> <code java [enable_line_numbers="true"]>
Line 187: Line 212:
  
 **TODO:** Go into more detail on how to use arguments **TODO:** Go into more detail on how to use arguments
- 
-===== Static Imports ===== 
-You could type out ''CommandManager.literal("foo")'' every time you want to create a literal. This works, but you can statically import the arguments and shorten the statement to ''literal("foo")''. This also works for getting the value of an argument. This shortens ''StringArgumentType.getString(ctx, "string")'' to ''getString(ctx, "string")''. 
-This also works for Minecraft's own argument types. 
- 
-And your imports would look something like this: 
-<code java [enable_line_numbers="true"]> 
-// getString(ctx, "string") 
-import static com.mojang.brigadier.arguments.StringArgumentType.getString; 
-// word() 
-import static com.mojang.brigadier.arguments.StringArgumentType.word; 
- // literal("foo") 
-import static net.minecraft.server.command.CommandManager.literal; 
- // argument("bar", word()) 
-import static net.minecraft.server.command.CommandManager.argument; 
-// Import everything 
-import static net.minecraft.server.command.CommandManager.*; 
-</code> 
- 
-Note: Please be sure you use the ''literal'' and ''argument'' from CommandManager or you may have issues with generics when trying to compile. 
- 
-Brigadier's default arguments are at ''com.mojang.brigadier.arguments'' 
- 
-Minecraft's arguments are in ''net.minecraft.command.arguments''. 
-CommandManager is in ''net.minecraft.server.command'' 
  
 ====== Advanced concepts ====== ====== Advanced concepts ======
ru/tutorial/commands.txt · Last modified: 2022/03/03 13:27 by furnygo