Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
4.1 kB
2
Indexable
Never
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.UUID;

public class ShieldPlugin extends JavaPlugin implements Listener {

    private final UUID armorModifierUUID = UUID.randomUUID();

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (label.equalsIgnoreCase("take_shield") && sender instanceof Player) {
            Player player = (Player) sender;
            giveShield(player);
            return true;
        }
        return false;
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        // При подключении нового игрока, также даем ему щит
        giveShield(event.getPlayer());
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        // При выходе игрока, очищаем атрибуты, чтобы избежать утечек памяти
        resetAttributes(event.getPlayer());
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        ItemStack item = player.getInventory().getItemInMainHand();

        if (item != null && item.getType() == Material.SHIELD) {
            // Проверяем, что это щит, который дал наш плагин
            if (item.hasItemMeta() && item.getItemMeta().getDisplayName().equals("Shield")) {
                // Применяем эффекты щита
                applyShieldEffects(player);
            }
        }
    }

    private void giveShield(Player player) {
        ItemStack shield = new ItemStack(Material.SHIELD);
        ItemMeta meta = shield.getItemMeta();
        meta.setDisplayName("Shield");
        shield.setItemMeta(meta);

        // Добавляем атрибуты к щиту
        addAttributes(shield);

        player.getInventory().addItem(shield);
        player.sendMessage("Вы получили щит.");
    }

    private void addAttributes(ItemStack item) {
        ItemMeta meta = item.getItemMeta();

        // Увеличиваем максимальное здоровье на 10 единиц
        AttributeModifier healthModifier = new AttributeModifier(armorModifierUUID, "health", 10.0, AttributeModifier.Operation.ADD_NUMBER);
        meta.addAttributeModifier(Attribute.GENERIC_MAX_HEALTH, healthModifier);

        // Добавляем 5 единиц брони
        AttributeModifier armorModifier = new AttributeModifier(armorModifierUUID, "armor", 5.0, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND);
        meta.addAttributeModifier(Attribute.GENERIC_ARMOR, armorModifier);

        item.setItemMeta(meta);
    }

    private void applyShieldEffects(Player player) {
        // Применяем эффекты при надевании щита
        player.sendMessage("Вы экипировали щит и получили дополнительные характеристики.");
    }

    private void resetAttributes(Player player) {
        // Сбрасываем атрибуты при выходе игрока
        player.getAttribute(Attribute.GENERIC_MAX_HEALTH).removeModifier(armorModifierUUID);
        player.getAttribute(Attribute.GENERIC_ARMOR).removeModifier(armorModifierUUID);
    }
}
Leave a Comment