Вопрос Помогите!

Версия Minecraft
1.17.X

weras2000

Пользователь
Сообщения
30
Решения
1
Проблема в том что у меня не перезагружается конфиг когда я ввожу reload, незнаю в чём может быть ошибка, помогите!



Java:
package net.cybermoney;

import net.cybermoney.Command.ReloadCommand;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Zombie;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

import net.milkbowl.vault.economy.Economy;

import java.text.DecimalFormat;

public final class CyberMoney extends JavaPlugin implements Listener {
    private Economy economy;
    private String zombieMessage;
    private String skeletonMessage;
    private String kriperMessage;
    private double zombieMinCoins;
    private double zombieMaxCoins;
    private double skeletonMinCoins;
    private double skeletonMaxCoins;
    private double kriperMinCoins;
    private double kriperMaxCoins;



    @Override
    public void onEnable() {
        loadConfig();
        if (!setupEconomy()) {
            getLogger().severe("Отсутствует плагин Vault. Отключение плагина CyberMoney...");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

        Bukkit.getPluginManager().registerEvents(this, this);
        getCommand("reload").setExecutor(new ReloadCommand(this));
        economy = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
        getLogger().info("CyberMoney включен.");
        getLogger().info("CyberMoney написан для CyberspaceX.");
    }
    private void loadConfig() {
        saveDefaultConfig();
        FileConfiguration config = getConfig();
        kriperMinCoins = config.getDouble("kriperMinCoins");
        kriperMaxCoins = config.getDouble("kriperMaxCoins");
        kriperMessage = config.getString("kriperMessage");
        zombieMessage = config.getString("zombieMessage");
        zombieMinCoins = config.getDouble("zombieMinCoins");
        zombieMaxCoins = config.getDouble("zombieMaxCoins");
        skeletonMessage = config.getString("skeletonMessage");
        skeletonMinCoins = config.getDouble("skeletonMinCoins");
        skeletonMaxCoins = config.getDouble("skeletonMaxCoins");
    }

    @Override
    public void onDisable() {
        getLogger().info("CyberMoney выключен.");
    }

    private boolean setupEconomy() {
        if (getServer().getPluginManager().getPlugin("Vault") == null) {
            return false;
        }

        RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
        if (rsp == null) {
            return false;
        }

        economy = rsp.getProvider();
        return economy != null;
    }

    @EventHandler
    public void Zombie(EntityDeathEvent event) {
        if (event.getEntity().getKiller() instanceof Player && event.getEntity() instanceof Zombie) {
            Player player = (Player) event.getEntity().getKiller();
            double coins = Math.random() * (zombieMaxCoins - zombieMinCoins) + zombieMinCoins;
            coins = Math.round(coins);
            economy.depositPlayer(player, coins);

            DecimalFormat decimalFormat = new DecimalFormat("#");
            String formattedMessage = zombieMessage.replace("{coins}", decimalFormat.format(coins));
            player.sendActionBar(formattedMessage);
        }
    }

    @EventHandler
    public void Skeleton(EntityDeathEvent event) {
        if (event.getEntity().getKiller() instanceof Player && event.getEntity() instanceof Skeleton) {
            Player player = (Player) event.getEntity().getKiller();
            double coins = Math.random() * (skeletonMaxCoins - skeletonMinCoins) + skeletonMinCoins;
            coins = Math.round(coins);

            DecimalFormat decimalFormat = new DecimalFormat("#");
            economy.depositPlayer(player, coins);
            String formattedMessage = skeletonMessage.replace("{coins}", decimalFormat.format(coins));
            player.sendActionBar(formattedMessage);
        }
    }

    @EventHandler
    public void kriper(EntityDeathEvent event) {
        if (event.getEntity().getKiller() instanceof Player && event.getEntity() instanceof Creeper) {
            Player player = (Player) event.getEntity().getKiller();
            double coins = Math.random() * (kriperMaxCoins - kriperMinCoins) + kriperMinCoins;
            economy.depositPlayer(player, coins);
            coins = Math.round(coins);

            DecimalFormat decimalFormat = new DecimalFormat("#");
            String formattedMessage = kriperMessage.replace("{coins}", decimalFormat.format(coins));
            player.sendActionBar(formattedMessage);
        }
    }
}


Java:
package net.cybermoney.Command;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;

public class ReloadCommand implements CommandExecutor {
    private final Plugin plugin;

    public ReloadCommand(Plugin plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("reload")) {
            if (sender.hasPermission("cybermoney.reload")) {
                plugin.reloadConfig();
                plugin.saveConfig(); // Сохранение конфигурации
                sender.sendMessage("Конфигурация перезагружена.");
                return true;
            } else {
                sender.sendMessage("У вас нет прав для данной команды.");
                return true;
            }
        }
        return false;
    }
}

 
Решение
В чём трудность? reloadConfig() -> reload config -> перезагрузка конфиг -> перезагрузить конфиг
Такая трудность, что прям мозги кипят... Но не сложнее, чем математика в первом классе
да просто, но почему то мне пришлось переписывать весь плагин
В главном классе сделай метод loadConfig() публичным и в классе команды вместо метода plugin.saveConfig() вызывай plugin.loadConfig() из главного класса, чтобы загружались новые данные в память сервера
 
В главном классе сделай метод loadConfig() публичным и в классе команды вместо метода plugin.saveConfig() вызывай plugin.loadConfig() из главного класса, чтобы загружались новые данные в память сервера
Теперь у меня 1 вопрос я код успел изменить досконально и по логике что ты посоветовал не сработает
 
Придерживайся той логики, что если ты хочешь, чтобы данные обновились, ты должен их загрузить в память сервера по новой

Банальный пример: даёшь значение переменной при включении плагина, ты можешь изменять другие переменные, перезагружать конфиги, загружать другие конфиги, но пока ты не изменишь нужную тебе переменную, она так и будет иметь изначальное значение, ошибка кода, который ты скинул, именно в том, что конфиг перезагружается, но данные в память сервера были загружены до перезагрузки конфига и после перезагрузки эти данные не обновлялись
 
Придерживайся той логики, что если ты хочешь, чтобы данные обновились, ты должен их загрузить в память сервера по новой

Банальный пример: даёшь значение переменной при включении плагина, ты можешь изменять другие переменные, перезагружать конфиги, загружать другие конфиги, но пока ты не изменишь нужную тебе переменную, она так и будет иметь изначальное значение, ошибка кода, который ты скинул, именно в том, что конфиг перезагружается, но данные в память сервера были загружены до перезагрузки конфига и после перезагрузки эти данные не обновлялись
Я сделал как ты сказал, но всё равно не обновляется


Java:
package net.cybermoney;
import net.cybermoney.Command.ReloadCommand;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import net.milkbowl.vault.economy.Economy;
import java.text.DecimalFormat;
public final class CyberMoney extends JavaPlugin implements Listener {
    private Economy economy;
    private FileConfiguration config;
    @Override
    public void onEnable() {
        if (!setupEconomy()) {
            getLogger().severe("Отсутствует плагин Vault. Отключение плагина CyberMoney...");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }
        saveDefaultConfig();
        reloadConfig();
        config = getConfig();
        getCommand("reload").setExecutor(new ReloadCommand(this));
        getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("CyberMoney включен.");
        getLogger().info("CyberMoney написан для CyberspaceX.");
    }

    @Override
    public void onDisable() {
        getLogger().info("CyberMoney выключен.");
    }
    private boolean setupEconomy() {
        if (getServer().getPluginManager().getPlugin("Vault") == null) {
            return false;
        }
        RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
        if (rsp == null) {
            return false;
        }
        economy = rsp.getProvider();
        return economy != null;
    }
    @EventHandler
    public void onEntityDeath(EntityDeathEvent event) {
        Entity entity = event.getEntity();
        if (!(entity instanceof LivingEntity)) {
            return;
        }
        LivingEntity livingEntity = (LivingEntity) entity;
        Entity killerEntity = livingEntity.getKiller();
        if (!(killerEntity instanceof Player)) {
            return;
        }
        Player killer = (Player) killerEntity;
        double coins = 0.0;
        if (entity instanceof Creeper) {
            coins = getRandomValueInRange("creeperMinCoins", "creeperMaxCoins");
            String formattedMessage = config.getString("creeperMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Zombie) {
            coins = getRandomValueInRange("zombieMinCoins", "zombieMaxCoins");
            String formattedMessage = config.getString("zombieMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Skeleton) {
            coins = getRandomValueInRange("skeletonMinCoins", "skeletonMaxCoins");
            String formattedMessage = config.getString("skeletonMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Ghast) {
            coins = getRandomValueInRange("ghastMinCoins", "ghastMaxCoins");
            String formattedMessage = config.getString("ghastMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Spider) {
            coins = getRandomValueInRange("spiderMinCoins", "spiderMaxCoins");
            String formattedMessage = config.getString("spiderMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Pig) {
            coins = getRandomValueInRange("pigMinCoins", "pigMaxCoins");
            String formattedMessage = config.getString("pigMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Cow) {
            coins = getRandomValueInRange("cowMinCoins", "cowMaxCoins");
            String formattedMessage = config.getString("cowMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof WitherSkeleton) {
            coins = getRandomValueInRange("witherSkeletonMinCoins", "witherSkeletonMaxCoins");
            String formattedMessage = config.getString("witherSkeletonMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof ZombieVillager) {
            coins = getRandomValueInRange("zombieVillagerMinCoins", "zombieVillagerMaxCoins");
            String formattedMessage = config.getString("zombieVillagerMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Donkey || entity instanceof Horse || entity instanceof Mule || entity instanceof SkeletonHorse || entity instanceof ZombieHorse) {
            coins = getRandomValueInRange("horseMinCoins", "horseMaxCoins");
            String formattedMessage = config.getString("horseMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Slime) {
            coins = getRandomValueInRange("slimeMinCoins", "slimeMaxCoins");
            String formattedMessage = config.getString("slimeMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof PigZombie) {
            coins = getRandomValueInRange("pigZombieMinCoins", "pigZombieMaxCoins");
            String formattedMessage = config.getString("pigZombieMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof MagmaCube) {
            coins = getRandomValueInRange("magmaCubeMinCoins", "magmaCubeMaxCoins");
            String formattedMessage = config.getString("magmaCubeMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Bat) {
            coins = getRandomValueInRange("batMinCoins", "batMaxCoins");
            String formattedMessage = config.getString("batMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Witch) {
            coins = getRandomValueInRange("witchMinCoins", "witchMaxCoins");
            String formattedMessage = config.getString("witchMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Endermite) {
            coins = getRandomValueInRange("endermiteMinCoins", "endermiteMaxCoins");
            String formattedMessage = config.getString("endermiteMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Enderman) {
            coins = getRandomValueInRange("endermanMinCoins", "endermanMaxCoins");
            String formattedMessage = config.getString("endermanMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Shulker) {
            coins = getRandomValueInRange("shulkerMinCoins", "shulkerMaxCoins");
            String formattedMessage = config.getString("shulkerMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Sheep) {
            coins = getRandomValueInRange("sheepMinCoins", "sheepMaxCoins");
            String formattedMessage = config.getString("sheepMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Chicken) {
            coins = getRandomValueInRange("chickenMinCoins", "chickenMaxCoins");
            String formattedMessage = config.getString("chickenMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Squid) {
            coins = getRandomValueInRange("squidMinCoins", "squidMaxCoins");
            String formattedMessage = config.getString("squidMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Wolf) {
            coins = getRandomValueInRange("wolfMinCoins", "wolfMaxCoins");
            String formattedMessage = config.getString("wolfMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Horse || entity instanceof Donkey || entity instanceof Mule || entity instanceof SkeletonHorse || entity instanceof ZombieHorse) {
            coins = getRandomValueInRange("horseMinCoins", "horseMaxCoins");
            String formattedMessage = config.getString("horseMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Rabbit) {
            coins = getRandomValueInRange("rabbitMinCoins", "rabbitMaxCoins");
            String formattedMessage = config.getString("rabbitMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Villager) {
            coins = getRandomValueInRange("villagerMinCoins", "villagerMaxCoins");
            String formattedMessage = config.getString("villagerMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Parrot) {
            coins = getRandomValueInRange("parrotMinCoins", "parrotMaxCoins");
            String formattedMessage = config.getString("parrotMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Turtle) {
            coins = getRandomValueInRange("turtleMinCoins", "turtleMaxCoins");
            String formattedMessage = config.getString("turtleMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Phantom) {
            coins = getRandomValueInRange("phantomMinCoins", "phantomMaxCoins");
            String formattedMessage = config.getString("phantomMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Pillager) {
            coins = getRandomValueInRange("pillagerMinCoins", "pillagerMaxCoins");
            String formattedMessage = config.getString("pillagerMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Ravager) {
            coins = getRandomValueInRange("ravagerMinCoins", "ravagerMaxCoins");
            String formattedMessage = config.getString("ravagerMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        } else if (entity instanceof Hoglin) {
            coins = getRandomValueInRange("hoglinMinCoins", "hoglinMaxCoins");
            String formattedMessage = config.getString("hoglinMessage").replace("{coins}", formatCoins(coins));
            killer.sendActionBar(formattedMessage);
        }
        economy.depositPlayer(killer, coins);
    }
    private double getRandomValueInRange(String minKey, String maxKey) {
        double minCoins = config.getDouble(minKey);
        double maxCoins = config.getDouble(maxKey);
        return Math.random() * (maxCoins - minCoins) + minCoins;
    }
    private String formatCoins(double coins) {
        DecimalFormat decimalFormat = new DecimalFormat("#");
        return decimalFormat.format(coins);
    }
}


Java:
package net.cybermoney.Command;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class ReloadCommand implements CommandExecutor {
    private final JavaPlugin plugin;

    public ReloadCommand(JavaPlugin plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("reload")) {
            if (sender.hasPermission("cybermoney.reload")) {
                plugin.reloadConfig();
                plugin.getConfig().options().copyDefaults(true); // Загрузка значений из конфигурации
                plugin.saveConfig();
                sender.sendMessage("Конфигурация перезагружена.");
                return true;
            } else {
                sender.sendMessage("У вас нет прав для данной команды.");
                return true;
            }
        }
        return false;
    }
}
 
В главном классе из этого
Java:
        saveDefaultConfig();
        reloadConfig();
        config = getConfig();
Оставляешь только это
Java:
        saveDefaultConfig();
В классе команды из этого
Java:
                plugin.reloadConfig();
                plugin.getConfig().options().copyDefaults(true); // Загрузка значений из конфигурации
                plugin.saveConfig();
Оставляешь только это
Код:
                plugin.reloadConfig();
 
В главном классе из этого
Java:
        saveDefaultConfig();
        reloadConfig();
        config = getConfig();
Оставляешь только это
Java:
        saveDefaultConfig();
В классе команды из этого
Java:
                plugin.reloadConfig();
                plugin.getConfig().options().copyDefaults(true); // Загрузка значений из конфигурации
                plugin.saveConfig();
Оставляешь только это
Код:
                plugin.reloadConfig();
Не работает без config = getConfig(); и ещё всё равно не перезагружается
 
В чём трудность? reloadConfig() -> reload config -> перезагрузка конфиг -> перезагрузить конфиг
Такая трудность, что прям мозги кипят... Но не сложнее, чем математика в первом классе
 
В чём трудность? reloadConfig() -> reload config -> перезагрузка конфиг -> перезагрузить конфиг
Такая трудность, что прям мозги кипят... Но не сложнее, чем математика в первом классе
да просто, но почему то мне пришлось переписывать весь плагин
 
Для справки, основным конфигом полностью можно управлять с помощью баккит методов, ничего придумывать не надо, надо только понять за что отвечает каждый метод, основная твоя ошибка в том, что ты лепишь миллион лишних методов, плюсом хранить переменную FileConfiguration тебе не нужно, это делает баккит, чтобы получить конфиг нужно использовать MainClass.getConfig()
Когда разработчики начнут понимать то, что пишут, вот тогда не будет глупых ошибок и огромного количества вопросов
 
Назад
Сверху Снизу