PlayerSaver [2024-09-24]

  • Автор темыCyberCraft Studio
  • Дата начала
CyberCraft Studio
  • CyberCraft Studio
  • аля человек
  • 86
çç§ | Mr_maderator_YT розмістив(ла) новий ресурс:

PlayerSaver - Сохраняет айпи адреса игроков

Представляю вам плагин который сохраняет имя игроков в файле с айпи адресом. Расмотрим ситуацию:
зашло 2 игрока под одним айпиПосмотреть вложение 15966
В папке плагина создался файлПосмотреть вложение 15965
И зайдя туда увидим:
Посмотреть вложение 15964
Все игроки которые зашли под одним айпи сохранились в файл.
Зачем это?
Я делаю плагины для себя, так что опишу историю:
Инрока взломали, он написал мне что бы я дал ему доступ к аккаунту, спустя месяц мне написал...

Переглянути сторінку цього ресурсу....
[automerge]1678969275[/automerge]
Жду спама тут😁
 
big
@Mr_maderator_YT, Ха, я поспешил с вопросом, я думал есть бд у Minecraft куда пишется информация о персонаже😄из за этого такой вопрос задал.
 
Mr_maderator_YT
@big, мне настолько лень делать бд, что я лучше буду улучшать систему защиты серверов от проникновения к файловой системе))
 
CyberCraft Studio
  • CyberCraft Studio
  • аля человек
  • 86
bobobo
@çç§ | Mr_maderator_YT, удаление из начала ArrayList неэффективно, так как требует сдвига всех последующих элементов. Вместо этого лучше использовать LinkedList

com/ccs/playersaver/playersaver/Commands:
package com.ccs.playersaver.playersaver;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class Commands implements CommandExecutor {
    private final PlayerSaver plugin;

    public Commands(PlayerSaver plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (args.length < 2) {
            sender.sendMessage(ChatColor.RED + "Использование: /ps <ip/player> <значение>");
            return true;
        }

        String type = args[0].toLowerCase();
        String value = args[1];

        File playerFile;
        if (type.equals("ip")) {
            playerFile = new File(this.plugin.getDataFolder(), "Ips/" + value + ".txt");
        } else if (type.equals("player")) {
            playerFile = new File(this.plugin.getDataFolder(), "players/" + value + ".txt");
        } else {
            sender.sendMessage(ChatColor.RED + "Неверный тип. Используйте 'ip' или 'player'.");
            return true;
        }

        displayLastLines(sender, playerFile);
        return true;
    }

    private void displayLastLines(CommandSender sender, File file) {
        if (!file.exists()) {
            sender.sendMessage(ChatColor.RED + "Файл не найден: " + file.getName());
            return;
        }

        LinkedList<String> lines = new LinkedList<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
                if (lines.size() > 20) {
                    lines.removeFirst();
                }
            }
        } catch (IOException e) {
            sender.sendMessage(ChatColor.RED + "Ошибка при чтении файла: " + e.getMessage());
            return;
        }

        if (lines.isEmpty()) {
            sender.sendMessage(ChatColor.YELLOW + "Данных не найдено.");
        } else {
            sender.sendMessage(ChatColor.GREEN + "Последние 20 строк:");
            for (String line : lines) {
                sender.sendMessage(ChatColor.WHITE + line);
            }
        }
    }
}
 
CyberCraft Studio
  • CyberCraft Studio
  • аля человек
  • 86
ВерхНиз