Помогите Как правильно настроить конфиги?

Bezobrazie

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
MySoulIsCry
Я столкнулся с проблемой пытаюсь организовать перезагрузку конфига через plugin.reloadConfig();
Но мне вылазит ошибка, в IDE ее нет. я так понимаю мне нужно както обозначть конфиг в Main классе. Но как правильно это сделать?
сейчас в мейн классе у меня вот это
Код:
public class Main extends JavaPlugin {
    public File file = new File(getDataFolder() + File.separator + "config.yml");
    public void onEnable(){   
        getCommand("RunesReload").setExecutor(new Reload(this));
        if (!this.file.exists() ) { //Если файла не существует
            saveResource("config.yml", true); //То копирование при запуске
            }
    }
}
также конфиг создается в этом проблем нет
 
Код:
if (!config.exists()) {
            getConfig().options().copyDefaults(true);
            saveDefaultConfig();
        }
И в проекте создай пустой файл config.yml
p.s. у тебя вместо config.exists будет file.exists, просто я скопировал это из своего плагина
 
Код:
if (!config.exists()) {
            getConfig().options().copyDefaults(true);
            saveDefaultConfig();
        }
И в проекте создай пустой файл config.yml
p.s. у тебя вместо config.exists будет file.exists, просто я скопировал это из своего плагина
все равно не работает (файл конфига у меня уже был)upload_2021-4-21_14-17-10.png
ошибка в строчке plugin.reloadConfig();

вот код команды reload
Код:
public class Reload implements CommandExecutor {
    private Main plugin;
    public Reload(Main main) {
        this.plugin = plugin;
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(sender.hasPermission("Runes.*")) {
          
                sender.sendMessage(ChatColor.GOLD + "Перезагрузка RunesPlugin...");
                plugin.reloadConfig();
                  sender.sendMessage(ChatColor.GREEN + "Конфиг успешно перезагружен!");
                  return true;
          
                  
          
        }
        return false;
    }}
мб тут ошибка
 
Что в консоли пишет?
Код:
org.bukkit.command.CommandException: Unhandled exception executing command 'runesreload' in plugin Runes v1.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1399) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1234) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_51]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_51]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_51]
Caused by: java.lang.NullPointerException
        at Reload.onCommand(Reload.java:17) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        ... 15 more
ошибка в 17 строке
17 строчка -> plugin.reloadConfig();
 
private Main plugin;
public Reload(Main main) {
this.plugin = plugin;
}

попробуй поменять на
private plugin plugin;
public Reload(Main main) {
this.plugin = main;
}
У тебя плаг пытается сослаться на plugin, которого нема

постскриптум, сообщение потомкам: в первой строчке моей замены должно быть private Main plugin, но я почему-то написал plugin. Там должно быть название класса, экземпляр которого вы передаёте. Пишу уже после решения проблемы.
 
Последнее редактирование:
private Main plugin;
public Reload(Main main) {
this.plugin = plugin;
}

попробуй поменять на
private plugin plugin;
public Reload(Main main) {
this.plugin = main;
}
У тебя плаг пытается сослаться на plugin, которого нема
сделал вот так
Код:
    private Main plugin;
    public Reload(Main main) {
    this.plugin = main;
    }
все работает!
огромное спасибо 2рой день не мог разобраться
 
Код:
org.bukkit.command.CommandException: Unhandled exception executing command 'runesreload' in plugin Runes v1.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1399) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1234) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_51]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_51]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot.jar:git-Spigot-dcd1643-e60fc34]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_51]
Caused by: java.lang.NullPointerException
        at Reload.onCommand(Reload.java:17) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-dcd1643-e60fc34]
        ... 15 more
ошибка в 17 строке
17 строчка -> plugin.reloadConfig();


Конфиг

Код:
public class ConfigManager {

    private static final Main plugin = Main.getInstance();

    public static void createConfig() {
        if (new File(plugin.getDataFolder(), "config.yml").exists())
            return;
        plugin.getLogger().info("Creating new configuration file...");
        plugin.getConfig().options().copyDefaults(true);
        plugin.saveDefaultConfig();
        plugin.getLogger().info("Configuration file success created!");
    }


public static void reload() {
    plugin.reloadConfig();
}

    public static String getString(String string) {
        return plugin.getConfig().getString(string);
    }

    public static List<String> getStringList(String string) {
        return plugin.getConfig().getStringList(string);
    }

    public static int getInt(String string) {
        return plugin.getConfig().getInt(string);
    }

    public static double getDouble(String string) {
        return plugin.getConfig().getDouble(string);
    }

Инициализация в Main:


Код:
public class Main extends JavaPlugin {

    private static Main instance;

    @Override
    public void onEnable() {
        instance = this;
        ConfigManager.createConfig();
        //todo
    }

    @Override
    public void onDisable() {
        getLogger().info("Disable plugin!");
    }

// Getters and Setters
    public static Main getInstance() {
        return instance;
    }

    public static void setInstance(Main instance) {
        Main.instance = instance;
    }

}

Он может ссылаться на то, что конфига нет/пустой или ты неправильно инициализировал конфиг
 
Последнее редактирование:
Взял из своего плагина:

Конфиг

Код:
public class ConfigManager {

    private static final Main plugin = Main.getInstance();

    public static void createConfig() {
        if (new File(plugin.getDataFolder(), "config.yml").exists())
            return;
        plugin.getLogger().info("Creating new configuration file...");
        plugin.getConfig().options().copyDefaults(true);
        plugin.saveDefaultConfig();
        plugin.getLogger().info("Configuration file success created!");
    }


public static void reload() {
    plugin.reloadConfig();
}

    public static String getString(String string) {
        return plugin.getConfig().getString(string);
    }

    public static List<String> getStringList(String string) {
        return plugin.getConfig().getStringList(string);
    }

    public static int getInt(String string) {
        return plugin.getConfig().getInt(string);
    }

    public static double getDouble(String string) {
        return plugin.getConfig().getDouble(string);
    }

Инициализация в Main:


Код:
public class Main extends JavaPlugin {

    private static Main instance;

    @Override
    public void onEnable() {
        instance = this;
        ConfigManager.createConfig();
        //todo
    }

    @Override
    public void onDisable() {
        getLogger().info("Disable plugin!");
    }

// Getters and Setters
    public static Main getInstance() {
        return instance;
    }

    public static void setInstance(Main instance) {
        Main.instance = instance;
    }

}

Он может ссылаться на то, что конфига нет/пустой или ты неправильно инициализировал конфиг
Проблему вроде бы решили. У него закралась ошибка в передаче конфига в другой класс.
Зато теперь твоим кодом могут пользоваться потомки. xd

отредачено: передача, естесственно, ссылки на главный класс. Хочу сказать одно, говорю другое. Надо прекращать ночной кодинг вместо сна.
 
сделал вот так
Код:
    private Main plugin;
    public Reload(Main main) {
    this.plugin = main;
    }
все работает!
огромное спасибо 2рой день не мог разобраться
С CommandExecutor все понятно оно работает но Listener оно не работает выбивает ошибку опять на String tplore = plugin.getConfig().getString("RunesTP.lore").replace("&","§");
вот код
Код:
 class Teleporter implements Listener {
   
        private Main plugin;
        public Teleporter(Main main) {
        this.plugin = main;
        }
    @EventHandler
    public void use(PlayerInteractEvent e){
        String tplore = plugin.getConfig().getString("RunesTP.lore").replace("&","§"); 
        if(e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if(e.getPlayer().getItemInHand().getType() != Material.EYE_OF_ENDER) return;
        Player p = e.getPlayer();
        ItemStack item = e.getPlayer().getItemInHand();
        if(!item.getItemMeta().hasLore()) return;
        if(!item.getItemMeta().getLore().get(0).equals(tplore)) return;
        e.setCancelled(true); 
        removeItem(p);
        p.playSound(p.getWorld().getSpawnLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 100, 1);
        for (Player m : Bukkit.getOnlinePlayers()) {
            org.bukkit.Location lo = p.getLocation();
            ((Entity) p).getLocation();
            org.bukkit.Location l = m.getLocation();
            ((Entity) m).getLocation();
            int ras = (int) Math.sqrt(Math.pow(lo.getX() - l.getX(), 2) + Math.pow(lo.getY() - l.getY(), 2) + Math.pow(lo.getZ() - l.getZ(), 2));
            if(ras <= 30 && ras != 0) {
                p.teleport(m);
               
                return;
            }
        }
    }
    private void removeItem(Player p){
        ItemStack item = p.getItemInHand();
        item.setAmount(item.getAmount() - 1);
        p.setItemInHand(item);
    }
   
}
в мейн классе в ссылке Bukkit.getPluginManager().registerEvents(new Teleporter(), this); пишет The constructor Teleporter() is undefined
 
С CommandExecutor все понятно оно работает но Listener оно не работает выбивает ошибку опять на String tplore = plugin.getConfig().getString("RunesTP.lore").replace("&","§");
вот код
Код:
 class Teleporter implements Listener {
  
        private Main plugin;
        public Teleporter(Main main) {
        this.plugin = main;
        }
    @EventHandler
    public void use(PlayerInteractEvent e){
        String tplore = plugin.getConfig().getString("RunesTP.lore").replace("&","§");
        if(e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if(e.getPlayer().getItemInHand().getType() != Material.EYE_OF_ENDER) return;
        Player p = e.getPlayer();
        ItemStack item = e.getPlayer().getItemInHand();
        if(!item.getItemMeta().hasLore()) return;
        if(!item.getItemMeta().getLore().get(0).equals(tplore)) return;
        e.setCancelled(true);
        removeItem(p);
        p.playSound(p.getWorld().getSpawnLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 100, 1);
        for (Player m : Bukkit.getOnlinePlayers()) {
            org.bukkit.Location lo = p.getLocation();
            ((Entity) p).getLocation();
            org.bukkit.Location l = m.getLocation();
            ((Entity) m).getLocation();
            int ras = (int) Math.sqrt(Math.pow(lo.getX() - l.getX(), 2) + Math.pow(lo.getY() - l.getY(), 2) + Math.pow(lo.getZ() - l.getZ(), 2));
            if(ras <= 30 && ras != 0) {
                p.teleport(m);
              
                return;
            }
        }
    }
    private void removeItem(Player p){
        ItemStack item = p.getItemInHand();
        item.setAmount(item.getAmount() - 1);
        p.setItemInHand(item);
    }
  
}
в мейн классе в ссылке Bukkit.getPluginManager().registerEvents(new Teleporter(), this); пишет The constructor Teleporter() is undefined


Смотри. Вот эта
Код:
private Main plugin;
        public Teleporter(Main main) {
        this.plugin = main;
        }
штука в твоём классе - это конструктор. Он отвечает за создание экземпляра. В него, как ты видишь, передаётся Main. У тебя не передаётся ничего. В той твоей строчке, что под кодом, должно быть new Teleporter(this), this
 
Смотри. Вот эта
Код:
private Main plugin;
        public Teleporter(Main main) {
        this.plugin = main;
        }
штука в твоём классе - это конструктор. Он отвечает за создание экземпляра. В него, как ты видишь, передаётся Main. У тебя не передаётся ничего. В той твоей строчке, что под кодом, должно быть new Teleporter(this), this
Спасибо огромное!
 
Назад
Верх