Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Работа с файлами.

Вот держи простенький апи для работы с конфигами.
CustomConfig.java
Java:
package Example;

import java.io.File;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

public class CustomConfig {
 
    private YamlConfiguration yml;
    private File file;
 
    CustomConfig(String name) {
        this.file = new File(Main.plugin().getDataFolder(), name+".yml");
        yml = YamlConfiguration.loadConfiguration(file);
        this.file.getParentFile().mkdirs();
    }
 
    public FileConfiguration get() {
        return yml;
    }
 
    public void save() {
        try {
            yml.save(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public void reload() {
        try {
            yml.load(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Configs.java
Java:
package Example;

import java.util.HashMap;
import java.util.Map;

public class Configs {
    private Map<String, CustomConfig> sfg = new HashMap<String, CustomConfig>();

    public CustomConfig get(String name) {
        if(sfg.get(name)==null) add(name);
        return sfg.get(name);
    }

    public Map<String, CustomConfig> getConfigs() {
        return sfg;
    }

    public void add(String name) {
        CustomConfig custom = new CustomConfig(name);
        sfg.put(name, custom);
    }

    public void save(String name) {
        if(sfg.get(name)==null) add(name);
        try {
            sfg.get(name).save();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public void saveAll() {
        for(String name : sfg.keySet()) {
            save(name);
        }
    }
}
Пример использования в главном класса, условно Main.java
Java:
package Example;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
 
    private static Main instance;
    private static Configs config;
 
    public static Main plugin() {
        return instance;
    }

    public static Configs config() {
        return config;
    }

    @Override
    public void onEnable() {
        instance = this;
        config = new Configs();
    }
 
    @Override
    public void onDisable() {
        config.saveAll();
    }
}
Работа с конфигом до некуда простая.
Получить-создать конфиг игрока.
CustomConfig cfg = Main.config().get(username);
Записать патч с именем kills со значением 10 .
cfg.get().set("kills", 10);
Сохранить в файл когда нужно. Не обязательно saveAll() в onDisable сохраняет все загруженные конфиги при остановке сервера.
cfg.save();
Прочитать патч с именем kills. "0" как дефольтный аргумент, если записи еще нет.
cfg.get().get("kills", "0");
Ты даже не представляешь, насколько я тебе благодарен. Все расписал, что мне нужно было. Теперь, в случае чего, буду писать тебе. :-)
Тему не закрываю, так как уверен, что у меня еще будут вопросы.
 
А есть ли смысл засорять форум темами, если вопрос так же по работе с файлами?
Всё, что тебе могли сказать про файлы, а точнее файлы конфигурации bukkit'a - уже сказали. Всё остальное ты сможешь узнать в гугле. Твой вопрос был не из ряда постоянных, поэтому ты и не нашёл на него ответ(если конечно искал). Всё остальное ты сможешь узнать загуглив.
 
Всё, что тебе могли сказать про файлы, а точнее файлы конфигурации bukkit'a - уже сказали. Всё остальное ты сможешь узнать в гугле. Твой вопрос был не из ряда постоянных, поэтому ты и не нашёл на него ответ(если конечно искал). Всё остальное ты сможешь узнать загуглив.
Ну а вдруг что-то не получится, я долгосоображающий человек. Если ближайшие сутки у меня не будет вопросов по этой теме - закрою.
 
Снова возник вопрос. Я сделал так, чтобы при входе игрока заносились его данные в конфиг, так же я сделал, чтобы при смерти/убийстве игрока эти данные менялись. Но вот теперь я не знаю, как вывести из конфига ник игрока, убийства или смерти вынести получается.
Код:
players:
  Slavkaa:
    kills: 3
    deaths: 6
Как вывести ник из конфига, который игрок ввел как аргумент в команде?
Столкнулся еще с одной проблемой. Если зайти с ника SLAvkaa и т.п., то создастся новая запись. Ставил условие p.hasPlayedBefore, не помогло. Так же проблема, если в записи ник "Slavkaa", а набрать /stat slavkaa, то выдаст, что такого игрока не существует.
Снова возник вопрос. Я сделал так, чтобы при входе игрока заносились его данные в конфиг, так же я сделал, чтобы при смерти/убийстве игрока эти данные менялись. Но вот теперь я не знаю, как вывести из конфига ник игрока, убийства или смерти вынести получается.
Код:
players:
  Slavkaa:
    kills: 3
    deaths: 6
Как вывести ник из конфига, который игрок ввел как аргумент в команде?\
Эту проблему решил. Вопрос про регистр актуален.
 
Это очень помогло, спасибо вам обоим. Но остался еще один нерешенный вопрос: если в записи ник "slavkaa", а команду использовать так - /stat Slavkaa, то будет написано, что такого игрока нет, т.к. реализовано это так:
Код:
        if(!plugin.getConfig().contains("players." + args[0])) {
            s.sendMessage("Такого игрока нет");
            return true;
        }
 
Это очень помогло, спасибо вам обоим. Но остался еще один нерешенный вопрос: если в записи ник "slavkaa", а команду использовать так - /stat Slavkaa, то будет написано, что такого игрока нет, т.к. реализовано это так:
Код:
        if(!plugin.getConfig().contains("players." + args[0])) {
            s.sendMessage("Такого игрока нет");
            return true;
        }
args[0].toLowerCase()
 
Это очень помогло, спасибо вам обоим. Но остался еще один нерешенный вопрос: если в записи ник "slavkaa", а команду использовать так - /stat Slavkaa, то будет написано, что такого игрока нет, т.к. реализовано это так:
Код:
        if(!plugin.getConfig().contains("players." + args[0])) {
            s.sendMessage("Такого игрока нет");
            return true;
        }
Записывай и читай с toLowerCase(), тебе же ответили.
Вот короче лови пример мой.
https://cloud.mail.ru/public/L9tC/MM7D5p7tx
 
Последнее редактирование:
Спасибо, я не знал, что это можно использовать с аргументом.
 

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

Назад
Верх