Untitled
unknown
plain_text
a year ago
4.1 kB
2
Indexable
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); } }
Editor is loading...
Leave a Comment