## 📋 История изменений

### ✨ Версия 1.2.0 (Текущая)
- ✅ Полная система множественных валют - неограниченное количество валют
- ✅ Система прав доступа - детальная настройка прав для каждой команды
- ✅ PlaceholderAPI интеграция - placeholders для всех валют
- ✅ Цветовая поддержка HEX - полная поддержка цветов (#RRGGBB)
- ✅ Система сообщений - настраиваемые сообщения для каждой валюты
- ✅ Автосохранение данных - YAML система хранения
- ✅ Команды администратора:
- /currency give - выдача валюты игроку
- /currency take - изъятие валюты
- /currency set - установка баланса
- /currency reset - сброс баланса
- /currency giveall - выдача всем игрокам
- /currency reload - перезагрузка конфигурации
- ✅ Команды игрока:
- /currency me - просмотр своего баланса
- /currency look - просмотр баланса другого игрока
- /currency pay - передача валюты
- /currency lead - топ игроков
- ✅ Система конвертации:
- /currency convert - конвертация из других плагинов
- /currency export - экспорт данных
- /currency import - импорт данных
- /currency importlegacy - импорт старого формата
- ✅ Дополнительные команды:
- /currency broadcast - оповещение о балансе
- Автодополнение команд
- Автодополнение имен игроков

### 🔧 Версия 1.0.0 (Базовая)
- ✅ Создание базовой структуры плагина
- ✅ Основная система валют
- ✅ Базовые команды баланса

---

## 🎯 Основные возможности

### 1️⃣ Система множественных валют
Плагин поддерживает неограниченное количество валют. Каждая валюта настраивается независимо:
- Уникальный ID
- Отображаемое имя с поддержкой цветов
- Своя команда
- Свой placeholder
- Стартовый баланс
- Индивидуальные права доступа
- Настраиваемые сообщения

### 2️⃣ Система команд
Каждая валюта получает свою команду. Например, для валюты coins с командой coins:
- /coins me - просмотр баланса
- /coins give <игрок> <сумма> - выдача валюты
- /coins take <игрок> <сумма> - изъятие валюты
- /coins pay <игрок> <сумма> - передача валюты
- /coins set <игрок> <сумма> - установка баланса
- И многие другие...

### 3️⃣ Система прав доступа
Каждая валюта имеет детальную систему прав:
- currency.{id}.view - просмотр баланса
- currency.{id}.give - выдача валюты (админ)
- currency.{id}.take - изъятие валюты (админ)
- currency.{id}.pay - передача валюты между игроками
- currency.{id}.set - установка баланса (админ)
- currency.{id}.reset - сброс баланса (админ)
- currency.{id}.broadcast - оповещение о балансе (админ)
- currency.{id}.giveall - выдача всем игрокам (админ)
- currency.{id}.lead - просмотр топа игроков
- currency.{id}.reload - перезагрузка конфигурации (админ)
- currency.{id}.convert - конвертация данных (админ)
- currency.{id}.export - экспорт данных (админ)
- currency.{id}.import - импорт данных (админ)
- currency.{id}.importlegacy - импорт старого формата (админ)

### 4️⃣ PlaceholderAPI интеграция
Для каждой валюты доступны placeholders:
- %currency_{placeholder}% - баланс игрока
- Например: %currency_coins%, %currency_gems%

### 5️⃣ Система хранения данных
- Формат: YAML файлы
- Папка: plugins/CurrencyPlugin/playerdata/
- Имя файла: <UUID игрока>.yml
- Автосохранение: при каждом изменении
- Автозагрузка: при входе игрока

---

## 📖 Подробное описание команд

### 👤 Команды для игроков

#### /currency me
Описание: Просмотр своего баланса
Право: currency.{id}.view
Пример: /coins me
Вывод: Отображает текущий баланс игрока

#### /currency look <игрок>
Описание: Просмотр баланса другого игрока
Право: currency.{id}.view
Пример: /coins look Steve
Вывод: Отображает баланс указанного игрока

#### /currency pay <игрок> <сумма>
Описание: Передача валюты другому игроку
Право: currency.{id}.pay
Пример: /coins pay Alex 100
Условия:
- Сумма должна быть положительной
- У отправителя должно быть достаточно средств
- Нельзя передать самому себе

#### /currency lead [страница]
Описание: Просмотр топа игроков по балансу
Право: currency.{id}.lead
Пример: /coins lead 1
Вывод: Показывает топ-10 игроков по балансу (с пагинацией)

---

### 👨‍💼 Команды для администраторов

#### /currency give <игрок> <сумма>
Описание: Выдача валюты игроку
Право: currency.{id}.give
Пример: /coins give Steve 1000
Эффект: Добавляет указанную сумму к балансу игрока

#### /currency take <игрок> <сумма>
Описание: Изъятие валюты у игрока
Право: currency.{id}.take
Пример: /coins take Steve 500
Эффект: Уменьшает баланс игрока на указанную сумму

#### /currency set <игрок> <сумма>
Описание: Установка баланса игрока
Право: currency.{id}.set
Пример: /coins set Steve 10000
Эффект: Устанавливает точное значение баланса

#### /currency reset <игрок>
Описание: Сброс баланса к начальному значению
Право: currency.{id}.reset
Пример: /coins reset Steve
Эффект: Устанавливает баланс равным starting-balance из конфига

#### /currency giveall <сумма>
Описание: Выдача валюты всем онлайн игрокам
Право: currency.{id}.giveall
Пример: /coins giveall 100
Эффект: Добавляет указанную сумму всем игрокам на сервере

#### /currency broadcast <игрок>
Описание: Оповещение всех игроков о балансе
Право: currency.{id}.broadcast
Пример: /coins broadcast Steve
Эффект: Отправляет всем игрокам сообщение с балансом указанного игрока

#### /currency reload
Описание: Перезагрузка конфигурации плагина
Право: currency.{id}.reload
Пример: /coins reload
Эффект: Перезагружает config.yml и все валюты

---

### 🔄 Команды конвертации и миграции

#### /currency convert <источник> <валюта>
Описание: Конвертация данных из другого плагина
Право: currency.{id}.convert
Пример: /coins convert EssentialsX coins
Поддержка: Конвертация из различных экономических плагинов

#### /currency export <валюта> <файл>
Описание: Экспорт данных валюты в файл
Право: currency.{id}.export
Пример: /coins export coins backup.yml
Эффект: Создает резервную копию данных

#### /currency import <валюта> <файл>
Описание: Импорт данных валюты из файла
Право: currency.{id}.import
Пример: /coins import coins backup.yml
Эффект: Загружает данные из резервной копии

#### /currency importlegacy <валюта> <файл>
Описание: Импорт данных старого формата
Право: currency.{id}.importlegacy
Пример: /coins importlegacy coins old_data.yml
Эффект: Конвертирует и загружает данные старого формата

---

## ⚙️ Полная настройка конфигурации

### Структура config.yml

yaml
currencies:
# ID валюты (уникальный идентификатор)
coins:
# Отображаемое имя (поддерживает HEX цвета)
display-name: "#FFD700Монеты"

# Команда для управления валютой
command: "coins"

# Placeholder для PlaceholderAPI
placeholder: "coins"

# Стартовый баланс для новых игроков
starting-balance: 100.0

# Настройка прав доступа
permissions:
view: "currency.coins.view"
give: "currency.coins.give"
take: "currency.coins.take"
pay: "currency.coins.pay"
set: "currency.coins.set"
reset: "currency.coins.reset"
broadcast: "currency.coins.broadcast"
giveall: "currency.coins.giveall"
lead: "currency.coins.lead"
reload: "currency.coins.reload"
convert: "currency.coins.convert"
export: "currency.coins.export"
import: "currency.coins.import"
importlegacy: "currency.coins.importlegacy"

# Настраиваемые сообщения
messages:
balance: "&aВаш баланс: &6{amount} &eМонет"
balance-other: "&aБаланс игрока &6{player}&a: &6{amount} &eМонет"
give-success: "&aВы выдали &6{amount} &eМонет игроку &6{player}"
take-success: "&aВы изъяли &6{amount} &eМонет у игрока &6{player}"
pay-success: "&aВы передали &6{amount} &eМонет игроку &6{player}"
pay-received: "&aВы получили &6{amount} &eМонет от игрока &6{player}"
set-success: "&aВы установили баланс игрока &6{player} &aна &6{amount} &eМонет"
reset-success: "&aВы сбросили баланс игрока &6{player}"
giveall-success: "&aВы выдали &6{amount} &eМонет всем игрокам (&6{count} &aигроков)"
broadcast-message: "&6{player} &aимеет &6{amount} &eМонет"
reload-success: "&aКонфигурация успешно перезагружена!"
insufficient-funds: "&cНедостаточно средств! Ваш баланс: &6{balance}"
player-not-found: "&cИгрок не найден!"
invalid-amount: "&cНеверная сумма!"
no-permission: "&cУ вас нет прав для использования этой команды!"

# Пример второй валюты
gems:
display-name: "#00FFFFКристаллы"
command: "gems"
placeholder: "gems"
starting-balance: 0.0
permissions:
view: "currency.gems.view"
give: "currency.gems.give"
take: "currency.gems.take"
pay: "currency.gems.pay"
set: "currency.gems.set"
reset: "currency.gems.reset"
broadcast: "currency.gems.broadcast"
giveall: "currency.gems.giveall"
lead: "currency.gems.lead"
reload: "currency.gems.reload"
convert: "currency.gems.convert"
export: "currency.gems.export"
import: "currency.gems.import"
importlegacy: "currency.gems.importlegacy"
messages:
balance: "&bВаш баланс: &3{amount} &bКристаллов"
balance-other: "&bБаланс игрока &3{player}&b: &3{amount} &bКристаллов"
give-success: "&bВы выдали &3{amount} &bКристаллов игроку &3{player}"
take-success: "&bВы изъяли &3{amount} &bКристаллов у игрока &3{player}"
pay-success: "&bВы передали &3{amount} &bКристаллов игроку &3{player}"
pay-received: "&bВы получили &3{amount} &bКристаллов от игрока &3{player}"
set-success: "&bВы установили баланс игрока &3{player} &bна &3{amount} &bКристаллов"
reset-success: "&bВы сбросили баланс игрока &3{player}"
giveall-success: "&bВы выдали &3{amount} &bКристаллов всем игрокам (&3{count} &bигроков)"
broadcast-message: "&3{player} &bимеет &3{amount} &bКристаллов"
reload-success: "&bКонфигурация успешно перезагружена!"
insufficient-funds: "&cНедостаточно средств! Ваш баланс: &3{balance}"
player-not-found: "&cИгрок не найден!"
invalid-amount: "&cНеверная сумма!"
no-permission: "&cУ вас нет прав для использования этой команды!"


---

## 🎨 Цветовая система

### Поддерживаемые форматы:

1. Minecraft коды цветов: &a, &c, &e и т.д.
2. HEX цвета: #RRGGBB (например: #FFD700, #00FFFF)
3. Комбинация: &#FFD700Текст &aдругой текст

### Примеры:
- #FFD700Золотой текст - золотой цвет
- #00FFFFГолубой текст - голубой цвет
- &cКрасный текст - красный цвет
- &a&lЗеленый жирный - зеленый жирный текст

---

## 🔌 PlaceholderAPI

### Использование placeholders:

После настройки валюты с placeholder "coins", вы можете использовать:
- %currency_coins% - в любом плагине, поддерживающем PlaceholderAPI
- Примеры использования:
- Скорборды (DeluxeScoreboard, FeatherBoard)
- Таблички (AnimatedTAB)
- Чат (EssentialsChat, ChatControl)
- Табы (TAB)

---

## 📂 Система хранения данных

### Структура файла игрока:
yaml
# plugins/CurrencyPlugin/playerdata/<UUID>.yml
coins: 1500.0
gems: 250.0
points: 3000.0


### Автоматическое управление:
- Создание: При первом входе игрока
- Сохранение: При каждом изменении баланса
- Загрузка: При входе игрока на сервер

---

## 🛠️ Установка и настройка

### Шаг 1: Установка
1. Скачайте Currency-1.2.0.jar из папки target/
2. Поместите файл в папку plugins/ вашего сервера
3. Перезапустите сервер

### Шаг 2: Настройка
1. Откройте plugins/CurrencyPlugin/config.yml
2. Настройте валюты по вашему желанию
3. Выполните команду /coins reload (или перезапустите сервер)

### Шаг 3: Настройка прав
Используйте плагин управления правами (LuckPerms, PermissionsEx):
/lp group admin permission set currency.coins.*
/lp group default permission set currency.coins.view
/lp group default permission set currency.coins.pay


---

## 🔧 Технические детали

### Зависимости:
- Spigot API: 1.20.1
- PlaceholderAPI: 2.11.6 (опционально)
- Java: 17+
- Maven: Для сборки

### Структура проекта:
CurrencyPlugin/
├── src/main/java/com/currencyplugin/
│ ├── CurrencyPlugin.java # Главный класс
│ ├── commands/
│ │ └── CurrencyCommand.java # Обработчик команд
│ ├── managers/
│ │ ├── Currency.java # Модель валюты
│ │ ├── CurrencyManager.java # Менеджер валют
│ │ └── DataManager.java # Менеджер данных
│ ├── placeholders/
│ │ └── CurrencyPlaceholder.java # Интеграция PlaceholderAPI
│ └── utils/
│ └── ColorUtils.java # Утилиты для цветов
└── src/main/resources/
├── config.yml # Конфигурация
└── plugin.yml # Описание плагина


### Производительность:
- Кэширование: Данные игроков кэшируются в памяти
- Асинхронность: Сохранение данных не блокирует сервер
- Оптимизация: Минимальная нагрузка на диск

---

## 📝 Примеры использования

### Создание валютной системы для RPG сервера:

yaml
currencies:
# Основная валюта
gold:
display-name: "#FFD700Золото"
command: "gold"
placeholder: "gold"
starting-balance: 1000.0

# Премиум валюта
diamonds:
display-name: "#00FFFFАлмазы"
command: "diamonds"
placeholder: "diamonds"
starting-balance: 0.0

# Очки опыта
exp:
display-name: "#00FF00Опыт"
command: "exp"
placeholder: "exp"
starting-balance: 0.0


### Настройка магазина:
С помощью других плагинов (например, ChestShop или QuickShop) можно использовать эти валюты для создания магазинов.

---

## ❓ Частые вопросы

### Как добавить новую валюту?
1. Откройте config.yml
2. Добавьте новую секцию под currencies:
3. Выполните /reload или перезапустите сервер

### Как изменить стартовый баланс?
1. Измените параметр starting-balance в конфиге
2. Для существующих игроков используйте /currency set

### Можно ли использовать без PlaceholderAPI?
Да, плагин работает без PlaceholderAPI, но placeholders не будут доступны.

### Как сделать резервную копию?
Скопируйте папку plugins/CurrencyPlugin/playerdata/ или используйте команду /currency export

---

## 🐛 Поддержка и баги

При обнаружении багов или проблем:
1. Проверьте логи сервера
2. Убедитесь, что конфигурация корректна
3. Проверьте версию Java и Spigot

---

## 📊 Статистика плагина

- Версия: 1.2.0
- Язык: Java 17
- API: Spigot 1.20.1
- Команд: 14
- Прав: 13 на валюту
- Placeholders: Неограниченно
- Валют: Неограниченно
- Github: github.com/animesao/Currency

---

## 🎉 Заключение

CurrencyPlugin - это мощный и гибкий плагин для создания множественных валютных систем на вашем сервере. С поддержкой неограниченного количества валют, детальной системой прав и PlaceholderAPI интеграцией, он идеально подходит для любого типа серверов.

Основные преимущества:
- ✅ Неограниченное количество валют
- ✅ Полная настройка сообщений и цветов
- ✅ Детальная система прав
- ✅ PlaceholderAPI интеграция
- ✅ Простая конфигурация
- ✅ Высокая производительность
- ✅ Полная поддержка HEX цветов
- ✅ Система конвертации и миграции

Удачи в настройке вашего сервера! 🚀