Сделай в данном класе, когда игрок переводит другому игроку какую-то сумму денег, то, если у игрока еще не было файла логов, то при получении или отправки денег, в папке plugins, в папке FishCore, в папке Logs, мы создаем файл (Ник игрока).yml. Тоесть имя файла это то - кому логи принадлежат. И в таком формате будет записываться перевод денег другому игроку:

"[(Дата и время перевода)] (Ник игрока, чьи логи) перевел деньги игроку (Ник игрока, кому деньги были переведены) в размере (Деньги с учетом комисии) $. Бывший баланс: (Баланс игрока до перевода денег)."

При получении:
"[(Дата и время получения)] (Ник игрока, чьи логи) получил деньги от игрока (Ник игрока, который отправил деньги) в размере (Деньги с учетом комисии) $. Бывший баланс: (Баланс игрока до получения денег)."
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}");
    }
}