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

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

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

  1. Автор темы
    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 не происходит
     
  2. alexandrage

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

    Баллы:
    173
    Так это же легко.
    Код:
        @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;
        }
     
    Последнее редактирование: 5 ноя 2020
  3. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    Какой конфиг загружает метод getConfig()? Если интерпретировать на мой код, до чем это отличается от моего варианта
    Main.saveHome(Main.homes, p.getName(), p.getLocation());
    ведь я делал ссылку на главный класс Main в классе setHome?
     
  4. alexandrage

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

    Баллы:
    173
    В моем случае обычный из Plugin.
     
  5. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    А в моём случае как быть? Честно, ошибок я не вижу. Но не работает
     
  6. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    сохранить конфиг в файл...
     
  7. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    А как это реализовать?
     
  8. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    прописав в методе onCommand() {
    ...
    Main.saveHome(Main.homes, p.getName(), p.getLocation());
    plugin.saveConfig(); return true;}
    Я сохранил именно конфиг homes.yml? Хотя просмотрев файлы .yml, которые были созданы при запуске сервера, ни в одном из них не сохранились данные после использования команды
     
  9. Pigeon

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

    Баллы:
    76
    saveConfig() - сохраняет конфиг "config".
    Если это не дефолтный конфиг, то нужно создать методы и файловую конфигурацию (открывай ядро через декомпилятор и копируй).
     
  10. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    Честно, я плохо понял о чём вы.
    Но, у меня получилось сохранить данные в конфиг с помощью метода:
    Код:
    public static void saveHomesConfig(){
            try {
                Main.homes.save(Main.file);
            } catch (IOException e){
                e.printStackTrace();
            }
        }
     
  11. Pigeon

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

    Баллы:
    76
    Ну так собственно и нужно.
     

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