Как записать в файл данные о игроке

GIGABAIT

Премиум
Питаюсь написать плагин который будет вести лог игроков сервера записать туда ник и ип игрока при первом входе на сервер у меня есть вот такой код
Java:
package IPLimiter.main;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
import net.md_5.bungee.event.EventHandler;

public class PlayersLog extends IPLimiter implements Listener {
    
    
    private static Configuration configurationPlayers;
    private static File playersFile;
    
    public void savePlayers() {
        try {
            ConfigurationProvider.getProvider(YamlConfiguration.class).save(configurationPlayers, playersFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @SuppressWarnings("deprecation")
    @EventHandler
    public void onJoin(PostLoginEvent e) {
        
        

    InetAddress IP = e.getPlayer().getAddress().getAddress();
    System.out.println("§2IP Adress §b"+IP);
    String name = e.getPlayer().getName();
    System.out.println("§2НИК §b"+name);
    String UU = e.getPlayer().getUUID();
    System.out.println("§2UUI §b"+UU);
    
    List<String> list;
    if (configurationPlayers.contains("players")) {
        list = configurationPlayers.getStringList("players");
    } else {
        list = new ArrayList<>();
    }
    if (!list.contains(e.getPlayer().getName())) {
        list.add(e.getPlayer().getName());
        configurationPlayers.set("players", list);
        savePlayers();
        
    }
    
        
        
    }   
    
}
Калс зарегистрирован в главном класе так getProxy().getPluginManager().registerListener(this, new PlayersLog());
еклипс на код не ругается.
Но когда игрок заходит в файл ничего не пишется и выдает такую ошибку в консоли
Screenshot_1.png
В чем может быть проблема ??
 

xXCopafumeXx

Пользователь
Лично от меня, мой жизненый совет, используй FileWriter для записи данных в файл. Но он только записывает данные, но не как не допысывает уже к тем что существуют.
 

xXCopafumeXx

Пользователь
@GIGABAIT, советую создать папку, и туда файлы по нику игрока делать. И вних записовать все что нужно.
 

BuseSo

Разработчик
offtop
Лично от меня, мой жизненый совет, используй FileWriter для записи данных в файл. Но он только записывает данные, но не как не допысывает уже к тем что существуют.
Тогда уж лучше JSONObject. Совет не очень, когда есть возможность всё делать через конфиг банжи/баккита.
 

BuseSo

Разработчик
Проблема в том, что ты не указал configurationPlayers. Ты их нигде не получаешь.
 

GIGABAIT

Премиум
@iBuseWinner, он у меня указан в главном класе
Java:
        if (!playersFile.exists()) {
            getLogger().info("§2Создания файла §6players.yml");
            try (InputStream in = getResourceAsStream("players.yml")) {
                Files.copy(in, playersFile.toPath());
                Configuration configurationPlayers = ConfigurationProvider.getProvider(YamlConfiguration.class).load(playersFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 

Aigai872

Пользователь
Код:
InetAddress IP = e.getPlayer().getAddress().getAddress();
А это так должно быть?
 

CarryLove

Пользователь
Питаюсь написать плагин который будет вести лог игроков сервера записать туда ник и ип игрока при первом входе на сервер у меня есть вот такой код
Java:
package IPLimiter.main;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
import net.md_5.bungee.event.EventHandler;

public class PlayersLog extends IPLimiter implements Listener {
   
   
    private static Configuration configurationPlayers;
    private static File playersFile;
   
    public void savePlayers() {
        try {
            ConfigurationProvider.getProvider(YamlConfiguration.class).save(configurationPlayers, playersFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    @SuppressWarnings("deprecation")
    @EventHandler
    public void onJoin(PostLoginEvent e) {
       
       

    InetAddress IP = e.getPlayer().getAddress().getAddress();
    System.out.println("§2IP Adress §b"+IP);
    String name = e.getPlayer().getName();
    System.out.println("§2НИК §b"+name);
    String UU = e.getPlayer().getUUID();
    System.out.println("§2UUI §b"+UU);
   
    List<String> list;
    if (configurationPlayers.contains("players")) {
        list = configurationPlayers.getStringList("players");
    } else {
        list = new ArrayList<>();
    }
    if (!list.contains(e.getPlayer().getName())) {
        list.add(e.getPlayer().getName());
        configurationPlayers.set("players", list);
        savePlayers();
       
    }
   
       
       
    }  
   
}
Калс зарегистрирован в главном класе так getProxy().getPluginManager().registerListener(this, new PlayersLog());
еклипс на код не ругается.
Но когда игрок заходит в файл ничего не пишется и выдает такую ошибку в консоли
Посмотреть вложение 1365
В чем может быть проблема ??
Базовый пример:
Код:
import java.io.*;
 // Базовый пример, на уровне обычной JAVA, без API SPIGOT/BUNGEE
public class Program {
 
    public static void main(String[] args) {
        
        try(FileWriter writer = new FileWriter("notes3.txt", false)) {
           // запись всей строки
            String text = "Hello Gold!";
            writer.write(text);
            // запись по символам
            writer.append('\n');
            writer.append('E');
            
            writer.flush();
        }
        catch(IOException ex) {
            
            System.out.println(ex.getMessage());
        }
    }
 

Phantomchik

Команда форума
Модератор
Ты можешь посмотреть пример кода из плагина ServerLog, там есть данный функционал, но немного переделанный.
 

Комнаты в чате

Верх Низ