Вопрос Не работает disabledWorlds

Версия Minecraft
1.17.X

MrJetby

Пользователь
Сообщения
122
Решения
2
Веб-сайт
treexstudio.site
Попытался сделать отключение получения монет в определенных мирах, но вот что-то я видимо делаю не так:

Java:
package me.jetby.megaminer;

import me.clip.placeholderapi.PlaceholderAPI;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.jetby.megaminer.Commands.Reload;
import me.jetby.megaminer.Commands.TabCompleter.ReloadCompleter;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.block.Block;
import org.bukkit.command.CommandExecutor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.Map;

import static java.util.Objects.requireNonNull;

public class MegaMiner extends JavaPlugin implements Listener, CommandExecutor {

    private ConfigurationSection blocksConfig;
    private ConfigurationSection messagesConfig;
    private Economy economy;

    private static MegaMiner instance;
    private PlaceholderExpansion disabledWorldsConfig;

    public static MegaMiner getInstance() {
        return instance;
    }

    @Override
    public void onEnable() {
        getLogger().info("MegaMiner has been enabled!");
        instance = this;

        // Загрузка конфига
        getCommand("megaminer").setExecutor(new Reload());
        getCommand("megaminer").setTabCompleter(new ReloadCompleter());
        saveDefaultConfig();
        reloadConfig();
        blocksConfig = getConfig().getConfigurationSection("blocks");
        messagesConfig = getConfig().getConfigurationSection("messages");

        // Регистрация событий и другие инициализации
        getServer().getPluginManager().registerEvents(this, this);



        // Подключение к Vault
        if (!setupEconomy()) {
            getLogger().severe("Vault not found! Disabling MegaMiner.");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }
    }

    private boolean setupEconomy() {
        if (Bukkit.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 onBlockBreak(BlockBreakEvent event) {
        Player player = event.getPlayer();
        Block block = event.getBlock();

        // Проверка мира
        if (!isWorldEnabled(player.getWorld().getName())) {
            return;
        }

        // Проверка, является ли разрушенный блок блоком, который нужно обработать
        if (blocksConfig.contains(block.getType().name())) {
            int minCurrency = blocksConfig.getInt(block.getType().name() + ".Min");
            int maxCurrency = blocksConfig.getInt(block.getType().name() + ".Max");
            boolean actionBarEnabled = blocksConfig.getBoolean(block.getType().name() + ".Actionbar");
            boolean messageEnabled = blocksConfig.getBoolean(block.getType().name() + ".Message");
            boolean bossBarEnabled = blocksConfig.getBoolean(block.getType().name() + ".Bossbar");
            int chance = blocksConfig.getInt(block.getType().name() + ".Chance");

            // Проверка на наличие зачарования "Шёлковое касание"
            ItemStack tool = player.getInventory().getItemInMainHand();
            if (!hasSilkTouch(tool)) {
                // Логика для выпадения валюты с учетом шанса
                if (Math.random() * 100 < chance) {
                    int droppedCurrency = (int) (Math.random() * (maxCurrency - minCurrency + 1) + minCurrency);

                    // Пример: выдача валюты игроку через Vault
                    economy.depositPlayer(player, droppedCurrency);

                    // Вывод сообщений с поддержкой цветов и плейсхолдера из PlaceholderAPI
                    if (actionBarEnabled) {
                        sendActionBar(player, PlaceholderAPI.setPlaceholders(player, ChatColor.translateAlternateColorCodes('&', messagesConfig.getString("actionbar").replace("%money%", String.valueOf(droppedCurrency)))));
                    }

                    if (messageEnabled) {
                        player.sendMessage(ChatColor.translateAlternateColorCodes('&', PlaceholderAPI.setPlaceholders(player, messagesConfig.getString("message").replace("%money%", String.valueOf(droppedCurrency)))));
                    }

                    // Здесь можно выполнить другие действия в зависимости от логики
                }
            }
        }
    }

    private boolean isWorldEnabled(String worldName) {
        return !disabledWorldsConfig.getStringList("disabled-worlds").contains(worldName);
    }



    private boolean hasSilkTouch(ItemStack tool) {
        // Проверка наличия зачарования "Шёлковое касание"
        Map<Enchantment, Integer> enchantments = tool.getEnchantments();
        return enchantments.containsKey(Enchantment.SILK_TOUCH);
    }

    private void sendActionBar(Player player, String message) {
        // Отправить сообщение через Action Bar
        requireNonNull(player).sendActionBar(message);
    }

    @Override
    public void onDisable() {
        getLogger().info("MegaMiner has been disabled!");
        // Здесь ты можешь выполнять завершающие действия перед выключением плагина
    }
}
 
Назад
Сверху Снизу