1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как достать статистику оффлайн игрока

Тема в разделе "Разработка плагинов для новичков", создана пользователем ermaksochi, 28 ноя 2018.

  1. Автор темы
    ermaksochi

    ermaksochi Активный участник Пользователь

    Баллы:
    66
    Здравствуйте, мне нужно достать статистику оффлайн игрока (сколько он убил игроков или сколько блоков снега сломал). p.getStatistic не работает на оффлайн игроков. Да знаю, можно создать свою статистику но зачем когда есть world/stats/uuid.json.
    В данной теме этот вопрос уже задавался но там нет чёткого ответа да и я новичок в яве, можно мне пример кода?
     
  2. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    По UUID берешь этот файл из папки мира и парсишь (Json формат). Достаешь нужную инфу. Для работы с Json рекомендую пользоваться Gson библиотекой (уже встроена в ядро).
     
  3. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну вообще лучше использовать свою статистику, и гибче и надежнее будет
     
  4. Автор темы
    ermaksochi

    ermaksochi Активный участник Пользователь

    Баллы:
    66
    Что я не так делаю?
    Код:
            else if(args[0].equalsIgnoreCase("statistics")) {
                sender.sendMessage("§4[§5Events§4] §cДанная команда в разработке!");
                String uuidstring = Bukkit.getPlayer(args[1]).getUniqueId().toString();
                sender.sendMessage("uuid:" + uuidstring);
    
                try {
                File playerfolder = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "stats");
                for (File playerfile : playerfolder.listFiles()) {
                    String filename = playerfile.getName();
                    String playername = filename.substring(0, filename.length() - 5);
                
                    if (playername.trim().equalsIgnoreCase(uuidstring)) {
                        JSONParser jsonParser = new JSONParser();
                        Object parsed = jsonParser.parse(new FileReader(playerfolder.getPath()));
                        JSONObject jsonObject = (JSONObject) parsed;
                        long stats = (long) jsonObject.get("stat.mineBlock.minecraft.snow");
                        sender.sendMessage("Блоков снега сломано: " + stats);
                    }
                }
                } catch (IOException | org.json.simple.parser.ParseException e) {
                    e.printStackTrace();
                }
                return true;
            }
    
    Код:
    [00:08:46] [Server thread/INFO]: Serega007 issued server command: /event statistics Serega007
    [00:08:46] [Server thread/WARN]: java.io.FileNotFoundException: .\world\stats (Отказано в доступе)
    [00:08:46] [Server thread/WARN]:     at java.io.FileInputStream.open0(Native Method)
    [00:08:46] [Server thread/WARN]:     at java.io.FileInputStream.open(Unknown Source)
    [00:08:46] [Server thread/WARN]:     at java.io.FileInputStream.<init>(Unknown Source)
    [00:08:46] [Server thread/WARN]:     at java.io.FileInputStream.<init>(Unknown Source)
    [00:08:46] [Server thread/WARN]:     at java.io.FileReader.<init>(Unknown Source)
    [00:08:46] [Server thread/WARN]:     at klaster.main.CommandEvent.onCommand(CommandEvent.java:600)
    [00:08:46] [Server thread/WARN]:     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    [00:08:46] [Server thread/WARN]:     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
    [00:08:46] [Server thread/WARN]:     at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1399)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1234)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13)
    [00:08:46] [Server thread/WARN]:     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    [00:08:46] [Server thread/WARN]:     at java.util.concurrent.FutureTask.run(Unknown Source)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679)
    [00:08:46] [Server thread/WARN]:     at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577)
    [00:08:46] [Server thread/WARN]:     at java.lang.Thread.run(Unknown Source)
    
     
    Последнее редактирование: 29 ноя 2018
  5. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Наверное в FileReader нужно файл пихать а не папку с игроками.
     
  6. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Кстати в SnakeYAML тоже не оч просто, пути с разделителем точкой это уже наработки баккита )
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Капец как все сложно
    FileUtils.readFileToString(this.file, Charset.defaultCharset());
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
            for(File file : new File(folder).listFiles()) {
                FileUtils.readFileToString(file, Charset.defaultCharset());
            }
    :D
     
  9. Автор темы
    ermaksochi

    ermaksochi Активный участник Пользователь

    Баллы:
    66
    Получилось, может кому-то пригодится:
    Код:
            else if(args[0].equalsIgnoreCase("statistics")) {
                sender.sendMessage("§4[§5Events§4] §cДанная команда в разработке!");
                if(args.length == 1) {
                    sender.sendMessage("§4[§5Events§4] §cУкажите ник игрока!");
                    return true;
                }
                String uuidstring = Bukkit.getOfflinePlayer(args[1]).getUniqueId().toString();
           
                File playerfolder = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "stats");
                String filename = "/" + uuidstring +  ".json";
                try (Reader reader = new FileReader(playerfolder.getPath() + filename)){
                        JSONParser jsonParser = new JSONParser();
                        Object parsed = jsonParser.parse(reader);
                        JSONObject jsonObject = (JSONObject) parsed;
                        long stats = (long) jsonObject.get("stat.mineBlock.minecraft.snow");
                        sender.sendMessage("Блоков снега сломано: " + stats);
                } catch (IOException | org.json.simple.parser.ParseException e) {
                    sender.sendMessage("§4[§5Events§4]§6 " + args[1] + " §cне существует!");
                } catch (NullPointerException e) {
                    sender.sendMessage("Блоков снега сломано: 0");
                }
                return true;
            }
    
    Если я всё же где-то допустил ошибку в коде (не смотря на то что всё работает), говорите, буду рад помощи
     
    Последнее редактирование: 29 ноя 2018
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну кроме того, что оно сломается в 1.13 из за смены формата статистики. Ничего.
     

Поделиться этой страницей