Исправлены баги: zip file closed в кастомных командах, рандомные цвета в GUI, обновлена версия до 1.5.4, добавлена инструкция по кастомным командам в README
This commit is contained in:
parent
1d75327a4d
commit
d49261988e
4 changed files with 124 additions and 4 deletions
106
README.md
106
README.md
|
|
@ -142,6 +142,7 @@
|
||||||
- `messages.yml` — сообщения чата
|
- `messages.yml` — сообщения чата
|
||||||
- `automessages.yml` — автосообщения
|
- `automessages.yml` — автосообщения
|
||||||
- `emojis.yml` — смайлики
|
- `emojis.yml` — смайлики
|
||||||
|
- `custom-commands.yml` — кастомные команды
|
||||||
- `gradient-config.yml` — настройки градиентов
|
- `gradient-config.yml` — настройки градиентов
|
||||||
- `gradient-messages.yml` — сообщения градиентов
|
- `gradient-messages.yml` — сообщения градиентов
|
||||||
- `ignores.yml` — сохранённые игноры
|
- `ignores.yml` — сохранённые игноры
|
||||||
|
|
@ -150,6 +151,111 @@
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Кастомные команды
|
||||||
|
|
||||||
|
LoChat позволяет создавать собственные команды через файл `custom-commands.yml`. После создания команды выполните `/lochat reload` для применения изменений.
|
||||||
|
|
||||||
|
### Структура команды
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
command-name:
|
||||||
|
permission: "lochat.command.name" # Право для использования (опционально)
|
||||||
|
message: "Текст сообщения" # Сообщение которое отправится
|
||||||
|
aliases: ["alias1", "alias2"] # Алиасы команды (опционально)
|
||||||
|
type: "chat" # Тип: chat, broadcast, title, actionbar
|
||||||
|
target: "sender" # Кому отправить: sender, all, permission:право
|
||||||
|
```
|
||||||
|
|
||||||
|
### Типы команд
|
||||||
|
|
||||||
|
- **chat** — отправляет сообщение в чат
|
||||||
|
- **broadcast** — отправляет сообщение всем игрокам
|
||||||
|
- **title** — показывает title (первая строка — заголовок, вторая — подзаголовок, разделяются `\n`)
|
||||||
|
- **actionbar** — показывает сообщение в actionbar
|
||||||
|
|
||||||
|
### Целевая аудитория (target)
|
||||||
|
|
||||||
|
- **sender** — только отправителю команды
|
||||||
|
- **all** — всем игрокам на сервере
|
||||||
|
- **permission:право** — только игрокам с указанным правом (например: `permission:lochat.admin`)
|
||||||
|
|
||||||
|
### Плейсхолдеры
|
||||||
|
|
||||||
|
В сообщениях можно использовать следующие плейсхолдеры:
|
||||||
|
|
||||||
|
- `{player}` — имя игрока
|
||||||
|
- `{x}`, `{y}`, `{z}` — координаты игрока
|
||||||
|
- `{world}` — название мира
|
||||||
|
- `{arg0}`, `{arg1}`, `{arg2}` — аргументы команды (нумерация с 0)
|
||||||
|
- `{args}` — все аргументы через пробел
|
||||||
|
|
||||||
|
Также поддерживаются плейсхолдеры PlaceholderAPI (если установлен).
|
||||||
|
|
||||||
|
### Примеры
|
||||||
|
|
||||||
|
#### Простая команда помощи
|
||||||
|
```yaml
|
||||||
|
help:
|
||||||
|
message: "<gold>Добро пожаловать на сервер!</gold>\n<gray>Используйте /rules для просмотра правил</gray>"
|
||||||
|
aliases: ["помощь", "хелп"]
|
||||||
|
type: "chat"
|
||||||
|
target: "sender"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Команда с координатами
|
||||||
|
```yaml
|
||||||
|
coords:
|
||||||
|
message: "Ваши координаты: <green>{x}</green>, <green>{y}</green>, <green>{z}</green> в мире <yellow>{world}</yellow>"
|
||||||
|
aliases: ["координаты", "pos"]
|
||||||
|
type: "actionbar"
|
||||||
|
target: "sender"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Команда для админов (broadcast)
|
||||||
|
```yaml
|
||||||
|
restart-warning:
|
||||||
|
permission: "lochat.admin"
|
||||||
|
message: "<red><bold>ВНИМАНИЕ!</bold></red> <yellow>Сервер будет перезагружен через 5 минут!</yellow>"
|
||||||
|
aliases: ["рестарт", "reboot"]
|
||||||
|
type: "broadcast"
|
||||||
|
target: "all"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Команда с title
|
||||||
|
```yaml
|
||||||
|
welcome:
|
||||||
|
message: "<gold>Добро пожаловать!</gold>\n<gray>Наслаждайтесь игрой!</gray>"
|
||||||
|
aliases: ["привет"]
|
||||||
|
type: "title"
|
||||||
|
target: "sender"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Команда только для VIP
|
||||||
|
```yaml
|
||||||
|
vip-info:
|
||||||
|
permission: "lochat.vip"
|
||||||
|
message: "<gold>VIP информация:</gold>\n<yellow>Вы имеете доступ к специальным командам!</yellow>"
|
||||||
|
type: "chat"
|
||||||
|
target: "permission:lochat.vip"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Форматирование цветов
|
||||||
|
|
||||||
|
В сообщениях можно использовать:
|
||||||
|
- **MiniMessage теги**: `<red>`, `<bold>`, `<#FF0000>`
|
||||||
|
- **Legacy коды**: `&a`, `&l`, `&c`
|
||||||
|
- **HEX цвета**: `#FF0000` (автоматически конвертируется)
|
||||||
|
|
||||||
|
### Важные замечания
|
||||||
|
|
||||||
|
1. После изменения `custom-commands.yml` выполните `/lochat reload`
|
||||||
|
2. Имена команд должны быть уникальными
|
||||||
|
3. Если команда уже существует в Minecraft/Bukkit, она будет перезаписана
|
||||||
|
4. Для title используйте `\n` для разделения заголовка и подзаголовка
|
||||||
|
5. PlaceholderAPI плейсхолдеры работают только если установлен PlaceholderAPI
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Форматирование цветов
|
## Форматирование цветов
|
||||||
|
|
||||||
### MiniMessage
|
### MiniMessage
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,15 @@ public final class GradientUtil {
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
if (hexColors.size() == 1) {
|
if (hexColors.size() == 1) {
|
||||||
|
// Для одного цвета применяем цвет один раз в начале
|
||||||
String colorCode = formatHex(hexColors.get(0), useLegacyFormat);
|
String colorCode = formatHex(hexColors.get(0), useLegacyFormat);
|
||||||
for (char c : chars) {
|
if (useLegacyFormat) {
|
||||||
result.append(colorCode).append(c);
|
// В legacy формате цвет применяется к каждому символу, но мы применяем один цвет
|
||||||
|
// Поэтому применяем цвет один раз в начале и добавляем весь текст
|
||||||
|
result.append(colorCode).append(text);
|
||||||
|
} else {
|
||||||
|
// В MiniMessage формате применяем цвет один раз
|
||||||
|
result.append(colorCode).append(text).append("</color>");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Color[] colors = hexColors.stream()
|
Color[] colors = hexColors.stream()
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,15 @@ public class CustomCommandManager {
|
||||||
|
|
||||||
// PlaceholderAPI если доступен
|
// PlaceholderAPI если доступен
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
result = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, result);
|
try {
|
||||||
|
// Используем безопасный способ вызова PlaceholderAPI
|
||||||
|
Class<?> papiClass = Class.forName("me.clip.placeholderapi.PlaceholderAPI");
|
||||||
|
java.lang.reflect.Method setPlaceholdersMethod = papiClass.getMethod("setPlaceholders", org.bukkit.entity.Player.class, String.class);
|
||||||
|
result = (String) setPlaceholdersMethod.invoke(null, player, result);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Если PlaceholderAPI недоступен или произошла ошибка, просто пропускаем
|
||||||
|
plugin.getLogger().warning("Ошибка при обработке PlaceholderAPI плейсхолдеров: " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
name: LoChat
|
name: LoChat
|
||||||
version: '1.5.3'
|
version: '1.5.4'
|
||||||
main: com.loki.lochat.LoChat
|
main: com.loki.lochat.LoChat
|
||||||
api-version: '1.21'
|
api-version: '1.21'
|
||||||
folia-supported: true
|
folia-supported: true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue