https://github.com/kamikototkach/cwcommands
Commands library for Paper & Velocity
https://github.com/kamikototkach/cwcommands
bukkit bukkit-api bukkit-library bukkitapi java minecraft minecraft-plugin paper paper-plugin paperapi papermc papermc-plugin paperspigot
Last synced: about 1 month ago
JSON representation
Commands library for Paper & Velocity
- Host: GitHub
- URL: https://github.com/kamikototkach/cwcommands
- Owner: KamikotoTkach
- License: agpl-3.0
- Created: 2022-12-25T10:41:15.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2025-06-13T16:17:06.000Z (4 months ago)
- Last Synced: 2025-06-13T16:36:39.577Z (4 months ago)
- Topics: bukkit, bukkit-api, bukkit-library, bukkitapi, java, minecraft, minecraft-plugin, paper, paper-plugin, paperapi, papermc, papermc-plugin, paperspigot
- Language: Java
- Homepage:
- Size: 489 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CWCommands 1.5.3
_(aka TkachCommands, PaperCommands, VelocityCommands)_\
_Velocity & Paper 1.16.5+_Библиотека на команды.
Подключение:
* Paper:
```xml
ru.cwcode.commands
PaperCommands
1.5.3
provided
```
* Velocity:
```xml
ru.cwcode.commands
VelocityCommands
1.5.3
provided
```
* Common
```xml
ru.cwcode.commands
Common
1.5.3
provided
```
### Фиачурес:
- Авто-генерируемый хелп
- Авто-валидация аргуметов
- Авто таб-комплишен
- Готовые аргументы на все случаи жизни (37 шт.)
- Кастомизация цветов
- Авто-генерация пермишенов (переопределяемая)
- Опциональные аргументы
- Spaced-аргументы (implements SpacedArgument)
- Динамические аргументы
- AutowiredExecutor
- Preconditions (предусловия)### Использование:
```java
new Command("rootCommandName", "rootPermission")
.subCommands(
//new Command...
)
.arguments(
new ArgumentSet(new ExecutorExample(),
new ExactStringArg("giveItem"),
new DynamicList("name", ItemRepo::getIDs),
new PlayerArg()
.optional(),
new IntegerArg()
.setMin(1)
.optional()).help("help текст")
//, new ArgumentSet...
).register();
```Пример Executor`a:
```java
public class ExecutorExample extends Executor {
@Override
public void executeForPlayer() {
Player player = player();
int amount = 1;
if (isPresent(2)) player = Bukkit.getPlayer(argS(2));
if (player == null) {
sender.sendMessage("No player with name " + argS(2));
return;
}
if (isPresent(3)) amount = argI(3);
player.getInventory().addItem(ItemRepo.getItem(argS(1)).asQuantity(amount));
}
```Аргументы можно именовать и получать по их имени в экзекуторе
```java
new IntegerArg().tag("amount");
//---
arg("amount).toInt()
```Пример авто-хелпа:

Что примерно соответствует этому коду:
### AutowiredExecutor
Ищет подходящий метод в зависимости от аргументов и мапит аргументы в объекты. Для правильной работы кастомных
аргументов им нужно переопределить метод Argument::map. Во всех стандартных аргументах он переопределён. Примитивные
типы заменять объектным аналогом (int -> Integer).```java
new ArgumentSet(new TestAutowired(), new ExactStringArg("testAutowired"), new SomeObjectArg().optional())//............
public class TestAutowired extends AutowiredExecutor {
//В зависимости от того, предоставлен ли опциональный аргумент, будет выбран подходящий метод:
public void test(SomeObject object) {
sender.sendMessage(object.toString());
}
public void test() {
sender.sendMessage("optional object not present");
}
}```
### Preconditions
Предусловия проверяются перед непосредственным исполнением экзекутора и по их результату или выполняется экзекутор или
отправителю команды пишется что не так```java
new Command("command")
.preconditions(new LoadedPlayerData(), new SomethingElse())
//......public class LoadedPlayerData extends Precondition {
@Override
public boolean canExecute(Sender sender) {
return sender.isPlayer()
&& sender instanceof PaperSender paperSender
&& playerDataManager.getPlayerData(paperSender.getPlayer()).isPresent();
}
@Override
public String cannotExecuteFeedback(Sender sender) {
return "Подождите немного или перезайдите на сервер: ваши даные не удалось загрузить";
}//Если в предусловии переопределить этот метод, то команда/аргументсет, если не доступен игроку, будет исключён из списка досупных для игрока в принципе
@Override
public boolean canSee(Sender sender) {
return true;
}
}```
### Встроенные аргументы
Формат: Название класса : тип, в который мапится в AutowiredExecutor
Модуль Common:
* Basic:
- **IntegerArg** : int
- **DoubleArg** : double
- **BooleanArg** : boolean
- **StringArg** : string
* Datetime:
- **DurationArg** : Duration
- **TimeArg** : string
* Spaced:
- **SpacedStringArg** : string
- **SpacedListArg** : string
- **SpacedDynamicList** : string
- **SpacedDynamicArg** : string
- **SafetySpacedStringArg** : string
* Another:
- **ComplexArg** (обёртка для нескольких аргументов в одном)
- **DynamicList** : string
- **EmptyArg** : string
- **EnumArg** : enum instance
- **ExactStringArg** : string
- **HaxColorArg** : string
- **LegacyColorArg** : string
- **ListArg** : string
- **SafetyStringArg** : stringМодуль Paper:
* Location:
- **LocationArg** (комплексный аргумент из TargetXArg-ов xyz/xyz+world)
- **TargetXArg**(LocationPart) : xyz->double, pitch yaw - > float, world -> org.bukkit.World
* Another:
- **BlockArg** : enum instance
- **EnchantmentArg** : org.bukkit.enchantments.Enchantment
- **MaterialArg** : enum instance
- **NearPlayersArg** : org.bukkit.Player
- **OnlinePlayersArg** : org.bukkit.Player
- **OninePlayersWithoutSender** : org.bukkit.Player
- **OnlinePlayerWithPermissionArg** : org.bukkit.Player
- **ParticleArg** : enum instance
- **PlayerArg** : org.bukkit.Player
- **PotionEffectArg** : org.bukkit.potion.PotionEffectType
- **SoundArg** : enum instance
- **WorldArg** : org.bukkit.WorldМодуль Velocity:
- **OnlinePlayersArg** : proxy player
- **OninePlayersWithoutSender** : proxy player
- **OnlinePlayerWithPermissionArg** : proxy player
- **PlayerArg** : proxy playerДля сборки нужны TkachUtils