MrJetby
Пользователь
Попытался сделать отключение получения монет в определенных мирах, но вот что-то я видимо делаю не так:
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!");
// Здесь ты можешь выполнять завершающие действия перед выключением плагина
}
}