Теперь добавь. Мы сделаем команду /sbor (start|delete|check|get|send|commision) (Если аргумент start, требуем имя, если аргумент delete, требуем айди, если аргумент check, требуем айди, если аргумент get, требуем число и айди, если аргумент send, требуем число, если commision, требуем айди).

Эта команда реализовывает систему сборов. Мы создаем датабазу sbors.db. Вообще, сам класс реализовывает сборы. Говорю сразу, перед каждым сообщением данной команды, должен стоять префикс "&#A7F6FF[ғɪsʜɪɴɢ | Сборы] &f". Что-бы запустить сбор, есть аргумент create. Он требует имя, имя - чисто формальность. Привязываем к введеному имени айди. Айди генерируеться случайно, в диапазоне 100-300. Удалить сбор можно по айди с помощью аргумента delete. Если аргумент check, то мы проверяем баланс сбора по айди. Если аргумент get, то игрок, который эту команду пишет, может забрать некую сумму из сбора. Если же send, то наоборот положить.

А вот commision - это аргумент, где можно настроить как раз ту комиссию, которую мы делали только что. У аргумента есть еще пару аргументов. А именно, процент комисии, и на какой айди сбора она идет, если аргумент сборка - это -1, то тогда комиссия просто уничтожаеться. Если же какой то другой, то все деньги с комисии за перевод игроков, идет на той или иной сбор.
package oluni.official.fishcore;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;

public class MoneyTransferListener implements Listener {
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
        String command = event.getMessage();
        Player sender = event.getPlayer();

        // Проверяем, является ли команда переводом денег
        if (command.startsWith("/pay")) {
            String[] args = command.split(" ");
            if (args.length != 3) return;

            Player recipient = Bukkit.getPlayer(args[1]);
            if (recipient == null || !recipient.isOnline()) {
                sender.sendMessage(colorizeHex("&#A7F6FF[ғɪsʜɪɴɢ | Ошибка] &rИгрок не найден или не в сети!"));
                return;
            }

            double amount;
            try {
                amount = Double.parseDouble(args[2]);
            } catch (NumberFormatException e) {
                sender.sendMessage(colorizeHex("&#A7F6FF[ғɪsʜɪɴɢ | Ошибка] &rСумма должна быть числом!"));
                return;
            }

            double commission = amount * 0.02;
            double finalAmount = amount - commission;

            if (finalAmount <= 0 || FishCore.getEconomy().getBalance(sender) < amount) {
                sender.sendMessage(colorizeHex("&#A7F6FF[ғɪsʜɪɴɢ | Ошибка] &rНедостаточно средств для перевода!"));
                return;
            }

            // Списываем деньги у отправителя
            FishCore.getEconomy().withdrawPlayer(sender, amount);

            // Зачисляем деньги получателю
            FishCore.getEconomy().depositPlayer(recipient, finalAmount);

            // Отправляем сообщения
            sender.sendMessage(colorizeHex("&#A7F6FF[ғɪsʜɪɴɢ | Комиссия] &rВы перевели деньги игроку, и от окончательной суммы наша система отняла &l2%&r. Итоговая сумма, которая была отправлена: &#A7F6FF" + finalAmount + "&r. И помните - все ваши деньги, которые забирает комиссия, уходят на благо сервера!"));
            recipient.sendMessage(colorizeHex("&#A7F6FF[ғɪsʜɪɴɢ | Комиссия] &rВы получили деньги от игрока, и от окончательной суммы наша система отняла &l2%&r. Итоговая сумма, которая была отправлена: &#A7F6FF" + finalAmount + "&r. И помните - все ваши деньги, которые забирает комиссия, уходят на благо сервера!"));
        }
    }

    // Метод для обработки HEX-кодов
    private String colorizeHex(String message) {
        StringBuilder result = new StringBuilder();
        char[] chars = message.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (i + 7 < chars.length && chars[i] == '&' && chars[i + 1] == '#' && isHexCode(message.substring(i + 2, i + 8))) {
                result.append("§x");
                for (int j = i + 2; j < i + 8; j++) {
                    result.append("§").append(chars[j]);
                }
                i += 7; // Пропускаем обработанный HEX-код
            } else if (chars[i] == '&') {
                result.append("§");
            } else {
                result.append(chars[i]);
            }
        }
        return result.toString();
    }

    // Проверяем, является ли строка HEX-кодом
    private boolean isHexCode(String code) {
        return code.matches("[A-Fa-f0-9]{6}");
    }
}