Сохранить координаты игрока в конфиг

  • Автор темы Автор темы ToBlEzZ
  • Дата начала Дата начала

ToBlEzZ

Активный участник
Пользователь
Баллы
76
Всем привет!
Третий день всё не могу разобраться с работой с конфигами. Пишу плагин, который объединит в себе функции warp и home, но даже с, казалось бы простым, home не удаётся получить должного результата.
Код:
public class Main extends JavaPlugin {
    //Переменые
    public static FileConfiguration config;
    public static FileConfiguration homes;
    public static FileConfiguration warps;
    public static File file;

    //Запуск
    public void onEnable(){
        if (!new File(this.getDataFolder() + File.separator + "config.yml").exists()){
            this.saveResource("config.yml",false);
        }
        Main.config = (FileConfiguration) YamlConfiguration.loadConfiguration(new File(this.getDataFolder() + File.separator + "config.yml"));

        if(!new File(this.getDataFolder() + File.separator + "homes.yml").exists()){
            this.saveResource("homes.yml", false);
        }
        Main.file = new File(this.getDataFolder(), "homes.yml");
        Main.homes = (FileConfiguration)YamlConfiguration.loadConfiguration(new File(this.getDataFolder() + File.separator + "homes.yml"));
        getCommand("sethome").setExecutor(new setHome(this));
    }

    public static void saveHome (FileConfiguration homes, String name, Location loc){
        homes.set(name + ".world", loc.getWorld().getName());
        homes.set(name + ".X", loc.getX());
        homes.set(name + ".Y", loc.getY());
        homes.set(name + ".Z", loc.getZ());
        homes.set(name + ".Yaw", loc.getYaw());
        homes.set(name + ".Pitch", loc.getPitch());
    }
    public static Location getHome(String name){
        Location loc = new Location(Bukkit.getWorld(homes.getString(name + ".world")),
                homes.getDouble(name + ".X"), homes.getDouble(name + ".Y"), homes.getDouble(name + ".Z"), homes.getInt(name + "Yaw"), homes.getInt(name + "Pitch"));
        return loc;
    }

}
Код:
public class setHome implements CommandExecutor {
    private Main plugin;
    public setHome (final Main plugin){
        this.plugin = plugin;
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
       /* if (!(sender instanceof Player)) {
            System.out.println("Эта команда только для игроков");
            return true;
        }*/
        if (cmd.getName().equalsIgnoreCase("sethome")){
            Player p = (Player) sender;
            Main.saveHome(Main.homes, p.getName(), p.getLocation());
            p.sendMessage("Дом установлен");
            return true;
        }
        return true;
    }
}
Что я делаю не так? Банально даже команда /sethome не работает. Команда определяется сервером, но не исполняется, даже sendMessage не происходит
 
Так это же легко.
Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (sender instanceof Player) {
            Player p = (Player) sender;
            if (p.hasPermission("home.use")) {
                this.plugin.getConfig().set("home."+p.getName(), p.getLocation());
            }
        }
        return false;
    }

Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (sender instanceof Player) {
            Player p = (Player) sender;
            if (p.hasPermission("home.use")) {
                Location home = this.plugin.getConfig().getObject("home."+p.getName(), Location.class,
                        Bukkit.getWorlds().get(0).getSpawnLocation());
                p.teleport(home, TeleportCause.COMMAND);
            }
        }
        return false;
    }
 
Последнее редактирование:
this.plugin.getConfig().set("home"+p.getName(), p.getLocation());
Какой конфиг загружает метод getConfig()? Если интерпретировать на мой код, до чем это отличается от моего варианта
Main.saveHome(Main.homes, p.getName(), p.getLocation());
ведь я делал ссылку на главный класс Main в классе setHome?
 
А как это реализовать?
прописав в методе onCommand() {
...
Main.saveHome(Main.homes, p.getName(), p.getLocation());
plugin.saveConfig(); return true;}
Я сохранил именно конфиг homes.yml? Хотя просмотрев файлы .yml, которые были созданы при запуске сервера, ни в одном из них не сохранились данные после использования команды
 
saveConfig() - сохраняет конфиг "config".
Если это не дефолтный конфиг, то нужно создать методы и файловую конфигурацию (открывай ядро через декомпилятор и копируй).
 
saveConfig() - сохраняет конфиг "config".
Если это не дефолтный конфиг, то нужно создать методы и файловую конфигурацию (открывай ядро через декомпилятор и копируй).
Честно, я плохо понял о чём вы.
Но, у меня получилось сохранить данные в конфиг с помощью метода:
Код:
public static void saveHomesConfig(){
        try {
            Main.homes.save(Main.file);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
 
Честно, я плохо понял о чём вы.
Но, у меня получилось сохранить данные в конфиг с помощью метода:
Код:
public static void saveHomesConfig(){
        try {
            Main.homes.save(Main.file);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
Ну так собственно и нужно.
 
Назад
Верх