Untitled
unknown
plain_text
2 years ago
4.1 kB
6
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